Skip to content

Commit e004f60

Browse files
committed
feat: groups all fields
1 parent 1b292b7 commit e004f60

File tree

3 files changed

+43
-0
lines changed

3 files changed

+43
-0
lines changed

tableauserverclient/models/group_item.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ def __init__(self, name=None, domain_name=None) -> None:
6565
self._users: Optional[Callable[..., "Pager"]] = None
6666
self.name: Optional[str] = name
6767
self.domain_name: Optional[str] = domain_name
68+
self._user_count: Optional[int] = None
6869

6970
def __repr__(self):
7071
return f"{self.__class__.__name__}({self.__dict__!r})"
@@ -118,6 +119,10 @@ def users(self) -> "Pager":
118119
def _set_users(self, users: Callable[..., "Pager"]) -> None:
119120
self._users = users
120121

122+
@property
123+
def user_count(self) -> Optional[int]:
124+
return self._user_count
125+
121126
@classmethod
122127
def from_response(cls, resp, ns) -> list["GroupItem"]:
123128
all_group_items = list()
@@ -127,6 +132,7 @@ def from_response(cls, resp, ns) -> list["GroupItem"]:
127132
name = group_xml.get("name", None)
128133
group_item = cls(name)
129134
group_item._id = group_xml.get("id", None)
135+
group_item._user_count = int(count) if (count := group_xml.get("userCount", None)) else None
130136

131137
# Domain name is returned in a domain element for some calls
132138
domain_elem = group_xml.find(".//t:domain", namespaces=ns)
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<ns0:tsResponse xmlns:ns0="http://tableau.com/api" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://tableau.com/api https://help.tableau.com/samples/en-us/rest_api/ts-api_3_25.xsd">
2+
<ns0:pagination pageNumber="1" pageSize="100" totalAvailable="3" />
3+
<ns0:groups>
4+
<ns0:group id="28c5b855-16df-482f-ad0b-428c1df58859" name="All Users" userCount="2">
5+
<ns0:domain name="local" />
6+
</ns0:group>
7+
<ns0:group id="ace1ee2d-e7dd-4d7a-9504-a1ccaa5212ea" name="group1" userCount="1">
8+
<ns0:domain name="local" />
9+
</ns0:group>
10+
<ns0:group id="baf0ed9d-c25d-4114-97ed-5232b8a732fd" name="test" userCount="0">
11+
<ns0:domain name="local" />
12+
</ns0:group>
13+
</ns0:groups>
14+
</ns0:tsResponse>

test/test_group.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
# TEST_ASSET_DIR = os.path.join(os.path.dirname(__file__), "assets")
1111

1212
GET_XML = os.path.join(TEST_ASSET_DIR, "group_get.xml")
13+
GET_XML_ALL_FIELDS = TEST_ASSET_DIR / "group_get_all_fields.xml"
1314
POPULATE_USERS = os.path.join(TEST_ASSET_DIR, "group_populate_users.xml")
1415
POPULATE_USERS_EMPTY = os.path.join(TEST_ASSET_DIR, "group_populate_users_empty.xml")
1516
ADD_USER = os.path.join(TEST_ASSET_DIR, "group_add_user.xml")
@@ -310,3 +311,25 @@ def test_update_ad_async(self) -> None:
310311
self.assertEqual(job.id, "c2566efc-0767-4f15-89cb-56acb4349c1b")
311312
self.assertEqual(job.mode, "Asynchronous")
312313
self.assertEqual(job.type, "GroupSync")
314+
315+
def test_get_all_fields(self) -> None:
316+
ro = TSC.RequestOptions()
317+
ro.all_fields = True
318+
self.server.version = "3.21"
319+
self.baseurl = self.server.groups.baseurl
320+
with requests_mock.mock() as m:
321+
m.get(f"{self.baseurl}?fields=_all_", text=GET_XML_ALL_FIELDS.read_text())
322+
groups, pages = self.server.groups.get(req_options=ro)
323+
324+
assert pages.total_available == 3
325+
assert len(groups) == 3
326+
assert groups[0].id == "28c5b855-16df-482f-ad0b-428c1df58859"
327+
assert groups[0].name == "All Users"
328+
assert groups[0].user_count == 2
329+
assert groups[0].domain_name == "local"
330+
assert groups[1].id == "ace1ee2d-e7dd-4d7a-9504-a1ccaa5212ea"
331+
assert groups[1].name == "group1"
332+
assert groups[1].user_count == 1
333+
assert groups[2].id == "baf0ed9d-c25d-4114-97ed-5232b8a732fd"
334+
assert groups[2].name == "test"
335+
assert groups[2].user_count == 0

0 commit comments

Comments
 (0)