1
1
import xml .etree .ElementTree as ET
2
- from .property_decorators import property_is_enum , property_not_empty
2
+ from .property_decorators import property_is_enum , property_not_empty , property_not_nullable
3
+ from ..datetime_helpers import parse_datetime
3
4
4
5
5
6
class ProjectItem (object ):
@@ -8,11 +9,16 @@ class ContentPermissions:
8
9
ManagedByOwner = 'ManagedByOwner'
9
10
10
11
def __init__ (self , name , description = None , content_permissions = None , parent_id = None ):
11
- self ._content_permissions = None
12
+ self ._created_at = None
12
13
self ._id = None
14
+ self ._owner_id = None
15
+ self ._owner_name = None
16
+ self ._top_level_project = None
17
+ self ._updated_at = None
18
+
19
+ self .content_permissions = content_permissions
13
20
self .description = description
14
21
self .name = name
15
- self .content_permissions = content_permissions
16
22
self .parent_id = parent_id
17
23
18
24
@property
@@ -24,6 +30,18 @@ def content_permissions(self):
24
30
def content_permissions (self , value ):
25
31
self ._content_permissions = value
26
32
33
+ @property
34
+ def created_at (self ):
35
+ return self ._created_at
36
+
37
+ @property
38
+ def description (self ):
39
+ return self ._description
40
+
41
+ @description .setter
42
+ def description (self , value ):
43
+ self ._description = value
44
+
27
45
@property
28
46
def id (self ):
29
47
return self ._id
@@ -34,32 +52,62 @@ def name(self):
34
52
35
53
@name .setter
36
54
@property_not_empty
55
+ @property_not_nullable
37
56
def name (self , value ):
38
57
self ._name = value
39
58
59
+ @property
60
+ def owner_id (self ):
61
+ return self ._owner_id
62
+
63
+ @property
64
+ def owner_name (self ):
65
+ return self ._owner_name
66
+
67
+ @property
68
+ def parent_id (self ):
69
+ return self ._parent_id
70
+
71
+ @parent_id .setter
72
+ def parent_id (self , value ):
73
+ self ._parent_id = value
74
+
75
+ @property
76
+ def top_level_project (self ):
77
+ return self ._top_level_project
78
+
79
+ @property
80
+ def updated_at (self ):
81
+ return self ._updated_at
82
+
40
83
def is_default (self ):
41
84
return self .name .lower () == 'default'
42
85
43
- def _parse_common_tags (self , project_xml ):
44
- if not isinstance (project_xml , ET .Element ):
45
- project_xml = ET .fromstring (project_xml ).find ('.//t:project' , namespaces = NAMESPACE )
46
-
47
- if project_xml is not None :
48
- (_ , name , description , content_permissions , parent_id ) = self ._parse_element (project_xml )
49
- self ._set_values (None , name , description , content_permissions , parent_id )
50
- return self
51
-
52
- def _set_values (self , project_id , name , description , content_permissions , parent_id ):
53
- if project_id is not None :
54
- self ._id = project_id
55
- if name :
56
- self ._name = name
57
- if description :
58
- self .description = description
59
- if content_permissions :
60
- self ._content_permissions = content_permissions
61
- if parent_id :
62
- self .parent_id = parent_id
86
+ def _set_values (self , project_fields ):
87
+ if 'contentPermissions' in project_fields :
88
+ self ._content_permissions = project_fields ['contentPermissions' ]
89
+ if 'createdAt' in project_fields :
90
+ self ._created_at = parse_datetime (project_fields ['createdAt' ])
91
+ if 'description' in project_fields :
92
+ self ._description = project_fields ['description' ]
93
+ if 'id' in project_fields :
94
+ self ._id = project_fields ['id' ]
95
+ if 'name' in project_fields :
96
+ self ._name = project_fields ['name' ]
97
+ if 'parentProjectId' in project_fields :
98
+ self ._parent_id = project_fields ['parentProjectId' ]
99
+ if 'topLevelProject' in project_fields :
100
+ self ._top_level_project = string_to_bool (project_fields ['topLevelProject' ])
101
+ if 'updatedAt' in project_fields :
102
+ self ._updated_at = parse_datetime (project_fields ['updatedAt' ])
103
+ if 'owner' in project_fields :
104
+ owner_fields = project_fields ['owner' ]
105
+ if 'id' in owner_fields :
106
+ self ._owner_id = owner_fields ['id' ]
107
+ if 'name' in owner_fields :
108
+ self ._owner_name = owner_fields ['name' ]
109
+ if self .parent_id is not None :
<
10000
td data-grid-cell-id="diff-fe12d749387d81c5a1c5384eeae35f39dca342f118f939d14e3154b761146f49-62-110-0" data-selected="false" role="gridcell" style="background-color:var(--diffBlob-additionNum-bgColor, var(--diffBlob-addition-bgColor-num));text-align:center" tabindex="-1" valign="top" class="focusable-grid-cell diff-line-number position-relative left-side">
110
+ self ._top_level_project = False
63
111
64
112
@classmethod
65
113
def from_response (cls , resp , ns ):
@@ -68,18 +116,23 @@ def from_response(cls, resp, ns):
68
116
all_project_xml = parsed_response .findall ('.//t:project' , namespaces = ns )
69
117
70
118
for project_xml in all_project_xml :
71
- ( id , name , description , content_permissions , parent_id ) = cls ._parse_element (project_xml )
72
- project_item = cls (name )
73
- project_item ._set_values (id , name , description , content_permissions , parent_id )
119
+ project_fields = cls ._parse_element (project_xml , ns )
120
+ project_item = cls (project_fields [ ' name' ] )
121
+ project_item ._set_values (project_fields )
74
122
all_project_items .append (project_item )
75
123
return all_project_items
76
124
77
125
@staticmethod
78
- def _parse_element (project_xml ):
79
- id = project_xml .get ('id' , None )
80
- name = project_xml .get ('name' , None )
81
- description = project_xml .get ('description' , None )
82
- content_permissions = project_xml .get ('contentPermissions' , None )
83
- parent_id = project_xml .get ('parentProjectId' , None )
84
-
85
- return id , name , description , content_permissions , parent_id
126
+ def _parse_element (project_xml , ns ):
127
+ project_fields = project_xml .attrib
128
+ owner_elem = project_xml .find ('.//t:owner' , namespaces = ns )
129
+ if owner_elem is not None :
130
+ owner_fields = owner_elem .attrib
131
+ project_fields ['owner' ] = owner_fields
132
+
133
+ return project_fields
134
+
135
+
136
+ # Used to convert string represented boolean to a boolean type
137
+ def string_to_bool (s ):
138
+ return s .lower () == 'true'
0 commit comments