forked from tableau/document-api-python
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathwindow.py
More file actions
88 lines (67 loc) · 2.62 KB
/
window.py
File metadata and controls
88 lines (67 loc) · 2.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
class ViewPointField(object):
"""Represents viewpoint field."""
def __init__(self, fieldxml):
self._xml = fieldxml
self._field_text = self._xml.text
@property
def field_text(self):
return self._field_text
@field_text.setter
def field_text(self, value):
self._field_text = value
self._xml.text = value
class ViewPointTupleValue(object):
"""Represents viewpoint field."""
def __init__(self, tuplexml):
self._xml = tuplexml
self._tuple_value_text = self._xml.text
self._tuple_value_datasource = self.tuple_value_text.split('].[')[0].strip('"[').strip(']"')
@property
def tuple_value_text(self):
return self._tuple_value_text
@tuple_value_text.setter
def tuple_value_text(self, value):
self._tuple_value_text = value
self._xml.text = value
@property
def tuple_value_datasource(self):
return self._tuple_value_datasource
class CardParam(object):
"""A class representing card (with param) object (in window XML)."""
def __init__(self, cardparamXmlElement):
"""Constructor for XMl element representing card with param XML."""
self._cardparamXmlElement = cardparamXmlElement
self._param = self._cardparamXmlElement.get('param')
self._param_datasource = self._param.split('].[')[0].strip('"[').strip(']"')
@property
def param(self):
return self._param
@param.setter
def param(self, value):
self._param = value
self._cardparamXmlElement.set('param', value)
@property
def param_datasource(self):
return self._param_datasource
class Window(object):
"""A class representing workbook window."""
def __init__(self, windowxml):
self._xml = windowxml
self._viewpoint_fields = list(map(ViewPointField, self._xml.findall('./viewpoint//*field')))
self._viewpoint_tuple_values = list(map(ViewPointTupleValue,
self._xml.findall('./viewpoint//*/tuple/value'))) \
if bool(self._xml.findall('./viewpoint//*/tuple/value')) else []
self._cards_xml= self._xml.findall('./cards//*/card[@param]')
self._cards_with_param = list(map(CardParam, self._cards_xml)) if bool(self._cards_xml) else []
@property
def viewpoint_fields(self):
return self._viewpoint_fields
@property
def cards_xml(self):
return self._cards_xml
@property
def cards_with_param(self):
return self._cards_with_param
@property
def viewpoint_tuple_values(self):
return self._viewpoint_tuple_values