Skip to content

Commit fa0129e

Browse files
committed
fix code
1 parent 4682491 commit fa0129e

File tree

2 files changed

+34
-68
lines changed

2 files changed

+34
-68
lines changed

tableauserverclient/models/project_item.py

Lines changed: 33 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,12 @@ def __init__(
3939
self.parent_id: Optional[str] = parent_id
4040
self._samples: Optional[bool] = samples
4141
self._owner_id: Optional[str] = None
42-
42+
4343
self._created_at = None
4444
self._owner_name: Optional[str] = None
45-
self._top_level_project = None
45+
self._top_level_project: Optional[bool] = None
4646
self._updated_at = None
47-
47+
4848
self._permissions = None
4949
self._default_workbook_permissions = None
5050
self._default_datasource_permissions = None
@@ -181,46 +181,7 @@ def is_default(self):
181181
return self.name.lower() == "default"
182182

183183
def _parse_common_tags(self, project_xml, ns):
184-
if not isinstance(project_xml, ET.Element):
185-
project_xml = fromstring(project_xml).find(".//t:project", namespaces=ns)
186-
187-
if project_xml is not None:
188-
(
189-
_,
190-
name,
191-
description,
192-
content_permissions,
193-
parent_id,
194-
) = self._parse_element(project_xml)
195-
self._set_values(None, name, description, content_permissions, parent_id)
196-
return self
197-
198-
def _set_values(self, project_fields):
199-
if 'contentPermissions' in project_fields:
200-
self._content_permissions = project_fields['contentPermissions']
201-
if 'createdAt' in project_fields:
202-
self._created_at = parse_datetime(project_fields['createdAt'])
203-
if 'description' in project_fields:
204-
self._description = project_fields['description']
205-
if 'id' in project_fields:
206-
self._id = project_fields['id']
207-
if 'name' in project_fields:
208-
self._name = project_fields['name']
209-
if 'parentProjectId' in project_fields:
210-
self._parent_id = project_fields['parentProjectId']
211-
if 'topLevelProject' in project_fields:
212-
self._top_level_project = string_to_bool(project_fields['topLevelProject'])
213-
if 'updatedAt' in project_fields:
214-
self._updated_at = parse_datetime(project_fields['updatedAt'])
215-
if 'owner' in project_fields:
216-
owner_fields = project_fields['owner']
217-
if 'id' in owner_fields:
218-
self._owner_id = owner_fields['id']
219-
if 'name' in owner_fields:
220-
self._owner_name = owner_fields['name']
221-
if self.parent_id is not None:
222-
self._top_level_project = False
223-
184+
return ProjectItem.from_xml(ProjectItem, project_xml, ns)
224185

225186
def _set_permissions(self, permissions):
226187
self._permissions = permissions
@@ -240,33 +201,40 @@ def from_response(cls, resp, ns) -> list["ProjectItem"]:
240201
all_project_xml = parsed_response.findall(".//t:project", namespaces=ns)
241202

242203
for project_xml in all_project_xml:
243-
project_item = cls.from_xml(project_xml)
204+
project_item = cls.from_xml(project_xml, ns)
244205
all_project_items.append(project_item)
245206
return all_project_items
246207

247208
@classmethod
248-
def from_xml(cls, project_xml, namespace=None) -> "ProjectItem":
209+
def from_xml(cls, project_xml, ns) -> "ProjectItem":
249210
project_item = cls()
250-
project_item._set_values(*cls._parse_element(project_xml))
251-
return project_item
252-
253-
@staticmethod
254-
def _parse_element(project_xml, ns):
255-
id = project_xml.get("id", None)
256-
name = project_xml.get("name", None)
257-
description = project_xml.get("description", None)
258-
content_permissions = project_xml.get("contentPermissions", None)
259-
parent_id = project_xml.get("parentProjectId", None)
260-
project_fields = project_xml.attrib
261-
owner_elem = project_xml.find('.//t:owner', namespaces=ns)
211+
if project_xml.get("contentPermissions", None):
212+
project_item._content_permissions = project_xml.get("contentPermissions")
213+
if project_xml.get("createdAt", None):
214+
project_item._created_at = parse_datetime(project_xml.get("createdAt"))
215+
if project_xml.get("description", None):
216+
project_item._description = project_xml.get("description")
217+
if project_xml.get("id", None):
218+
project_item._id = project_xml.get("id")
219+
if project_xml.get("name", None):
220+
project_item._name = project_xml.get("name")
221+
if project_xml.get("parentProjectId", None):
222+
project_item._parent_id = project_xml.get("parentProjectId")
223+
if project_xml.get("topLevelProject", None):
224+
project_item._top_level_project = ProjectItem.string_to_bool(project_xml.get("topLevelProject"))
225+
if project_xml.get("updatedAt", None):
226+
project_item._updated_at = parse_datetime(project_xml.get("updatedAt"))
227+
228+
if project_item.parent_id is not None:
229+
project_item._top_level_project = False
230+
231+
owner_elem = project_xml.find(".//t:owner", ns)
262232
if owner_elem is not None:
263-
owner_fields = owner_elem.attrib
264-
project_fields['owner'] = owner_fields
265-
owner_id = owner_elem.get("id", None)
266-
267-
return project_fields
233+
project_item._owner_id = owner_elem.get("id", None)
234+
project_item._owner_name = owner_elem.get("name", None)
268235

236+
return project_item
269237

270-
# Used to convert string represented boolean to a boolean type
271-
def string_to_bool(s):
272-
return s.lower() == 'true'
238+
# Used to convert string represented boolean to a boolean type
239+
def string_to_bool(s):
240+
return s.lower() == "true"

tableauserverclient/server/endpoint/projects_endpoint.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11

22
from .endpoint import Endpoint, api, parameter_added_in
33
from .exceptions import MissingRequiredFieldError
4-
from .. import RequestFactory, ProjectItem, PaginationItem
54

65
import logging
76

@@ -10,8 +9,7 @@
109
from tableauserverclient.server.endpoint.exceptions import MissingRequiredFieldError
1110
from tableauserverclient.server.endpoint.permissions_endpoint import _PermissionsEndpoint
1211
from tableauserverclient.server import RequestFactory, RequestOptions
13-
from tableauserverclient.models.permissions_item import PermissionsRule
14-
from tableauserverclient.models import ProjectItem, PaginationItem, Resource
12+
from tableauserverclient.models import PaginationItem, PermissionsRule, ProjectItem, Resource
1513

1614
from typing import Optional, TYPE_CHECKING
1715

0 commit comments

Comments
 (0)