@@ -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"
0 commit comments