forked from tableau/server-client-python
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgroupset_item.py
More file actions
61 lines (47 loc) · 2.01 KB
/
groupset_item.py
File metadata and controls
61 lines (47 loc) · 2.01 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
from typing import Optional
import xml.etree.ElementTree as ET
from defusedxml.ElementTree import fromstring
from tableauserverclient.models.group_item import GroupItem
from tableauserverclient.models.reference_item import ResourceReference
class GroupSetItem:
tag_name: str = "groupSet"
def __init__(self, name: Optional[str] = None) -> None:
self.name = name
self.id: Optional[str] = None
self.groups: list["GroupItem"] = []
self.group_count: int = 0
def __str__(self) -> str:
name = self.name
id = self.id
return f"<{self.__class__.__qualname__}({name=}, {id=})>"
def __repr__(self) -> str:
return self.__str__()
@property
def name(self) -> Optional[str]:
return self._name
@name.setter
def name(self, value: Optional[str]) -> None:
self._name = value
@classmethod
def from_response(cls, response: bytes, ns: dict[str, str]) -> list["GroupSetItem"]:
parsed_response = fromstring(response)
all_groupset_xml = parsed_response.findall(".//t:groupSet", namespaces=ns)
return [cls.from_xml(xml, ns) for xml in all_groupset_xml]
@classmethod
def from_xml(cls, groupset_xml: ET.Element, ns: dict[str, str]) -> "GroupSetItem":
def get_group(group_xml: ET.Element) -> GroupItem:
group_item = GroupItem()
group_item._id = group_xml.get("id")
group_item.name = group_xml.get("name")
return group_item
group_set_item = cls()
group_set_item.name = groupset_xml.get("name")
group_set_item.id = groupset_xml.get("id")
group_set_item.group_count = int(count) if (count := groupset_xml.get("groupCount")) else 0
group_set_item.groups = [
get_group(group_xml) for group_xml in groupset_xml.findall(".//t:group", namespaces=ns)
]
return group_set_item
@staticmethod
def as_reference(id_: str) -> ResourceReference:
return ResourceReference(id_, GroupSetItem.tag_name)