1
1
import xml .etree .ElementTree as ET
2
2
from .exceptions import UnpopulatedPropertyError
3
- from .property_decorators import property_not_nullable , property_is_boolean
3
+ from .property_decorators import property_not_nullable , property_is_boolean , property_is_enum
4
4
from .tag_item import TagItem
5
5
from ..datetime_helpers import parse_datetime
6
6
import copy
7
7
8
8
9
9
class DatasourceItem (object ):
10
+ class AskDataEnablement :
11
+ Enabled = 'Enabled'
12
+ Disabled = 'Disabled'
13
+ SiteDefault = 'SiteDefault'
14
+
10
15
def __init__ (self , project_id , name = None ):
16
+ self ._ask_data_enablement = None
17
+ self ._certified = None
18
+ self ._certification_note = None
11
19
self ._connections = None
12
20
self ._content_url = None
13
21
self ._created_at = None
14
22
self ._datasource_type = None
23
+ self ._encrypt_extracts = None
24
+ self ._has_extracts = None
15
25
self ._id = None
16
26
self ._initial_tags = set ()
17
27
self ._project_name = None
18
28
self ._updated_at = None
19
- self ._certified = None
20
- self ._certification_note = None
29
+ self ._use_remote_query_agent = None
30
+ self ._webpage_url = None
31
+ self .description = None
21
32
self .name = name
22
33
self .owner_id = None
23
34
self .project_id = project_id
24
35
self .tags = set ()
25
36
26
37
self ._permissions = None
27
38
39
+ @property
40
+ def ask_data_enablement (self ):
41
+ return self ._ask_data_enablement
42
+
43
+ @ask_data_enablement .setter
44
+ @property_is_enum (AskDataEnablement )
45
+ def ask_data_enablement (self , value ):
46
+ self ._ask_data_enablement = value
47
+
28
48
@property
29
49
def connections (self ):
30
50
if self ._connections is None :
@@ -65,6 +85,19 @@ def certification_note(self):
65
85
def certification_note (self , value ):
66
86
self ._certification_note = value
67
87
88
+ @property
89
+ def encrypt_extracts (self ):
90
+ return self ._encrypt_extracts
91
+
92
+ @encrypt_extracts .setter
93
+ @property_is_boolean
94
+ def encrypt_extracts (self , value ):
95
+ self ._encrypt_extracts = value
96
+
97
+ @property
98
+ def has_extracts (self ):
99
+ return self ._has_extracts
100
+
68
101
@property
69
102
def id (self ):
70
103
return self ._id
@@ -90,6 +123,19 @@ def datasource_type(self):
90
123
def updated_at (self ):
91
124
return self ._updated_at
92
125
126
+ @property
127
+ def use_remote_query_agent (self ):
128
+ return self ._use_remote_query_agent
129
+
130
+ @use_remote_query_agent .setter
131
+ @property_is_boolean
132
+ def use_remote_query_agent (self , value ):
133
+ self ._use_remote_query_agent = value
134
+
135
+ @property
136
+ def webpage_url (self ):
137
+ return self ._webpage_url
138
+
93
139
def _set_connections (self , connections ):
94
140
self ._connections = connections
95
141
@@ -100,38 +146,53 @@ def _parse_common_elements(self, datasource_xml, ns):
100
146
if not isinstance (datasource_xml , ET .Element ):
101
147
datasource_xml = ET .fromstring (datasource_xml ).find ('.//t:datasource' , namespaces = ns )
102
148
if datasource_xml is not None :
103
- (_ , _ , _ , _ , _ , updated_at , _ , project_id , project_name , owner_id ,
104
- certified , certification_note ) = self ._parse_element (datasource_xml , ns )
105
- self ._set_values (None , None , None , None , None , updated_at , None , project_id ,
106
- project_name , owner_id , certified , certification_note )
149
+ (ask_data_enablement , certified , certification_note , _ , _ , _ , _ , encrypt_extracts , has_extracts ,
150
+ _ , _ , owner_id , project_id , project_name , _ , updated_at , use_remote_query_agent ,
151
+ webpage_url ) = self ._parse_element (datasource_xml , ns )
152
+ self ._set_values (ask_data_enablement , certified , certification_note , None , None , None , None ,
153
+ encrypt_extracts , has_extracts , None , None , owner_id , project_id , project_name , None ,
154
+ updated_at , use_remote_query_agent , webpage_url )
107
155
return self
108
156
109
- def _set_values (self , id , name , datasource_type , content_url , created_at ,
110
- updated_at , tags , project_id , project_name , owner_id , certified , certification_note ):
111
- if id is not None :
112
- self . _id = id
113
- if name :
114
- self . name = name
115
- if datasource_type :
116
- self . _datasource_type = datasource_type
157
+ def _set_values (self , ask_data_enablement , certified , certification_note , content_url , created_at , datasource_type ,
158
+ description , encrypt_extracts , has_extracts , id_ , name , owner_id , project_id , project_name , tags ,
159
+ updated_at , use_remote_query_agent , webpage_url ) :
160
+ if ask_data_enablement is not None :
161
+ self . _ask_data_enablement = ask_data_enablement
162
+ if certification_note :
163
+ self . certification_note = certification_note
164
+ self . certified = certified # Always True/False, not conditional
117
165
if content_url :
118
166
self ._content_url = content_url
119
167
if created_at :
120
168
self ._created_at = created_at
121
- if updated_at :
122
- self ._updated_at = updated_at
123
- if tags :
124
- self .tags = tags
125
- self ._initial_tags = copy .copy (tags )
169
+ if datasource_type :
170
+ self ._datasource_type = datasource_type
171
+ if description :
172
+ self .description = description
173
+ if encrypt_extracts is not None :
174
+ self .encrypt_extracts = str (encrypt_extracts ).lower () == 'true'
175
+ if has_extracts is not None :
176
+ self ._has_extracts = str (has_extracts ).lower () == 'true'
177
+ if id_ is not None :
178
+ self ._id = id_
179
+ if name :
180
+ self .name = name
181
+ if owner_id :
182
+ self .owner_id = owner_id
126
183
if project_id :
127
184
self .project_id = project_id
128
185
if project_name :
129
186
self ._project_name = project_name
130
- if owner_id :
131
- self .owner_id = owner_id
132
- if certification_note :
133
- self .certification_note = certification_note
134
- self .certified = certified # Always True/False, not conditional
187
+ if tags :
188
+ self .tags = tags
189
+ self ._initial_tags = copy .copy (tags )
190
+ if updated_at :
191
+ self ._updated_at = updated_at
192
+ if use_remote_query_agent is not None :
193
+ self ._use_remote_query_agent = str (use_remote_query_agent ).lower () == 'true'
194
+ if webpage_url :
195
+ self ._webpage_url = webpage_url
135
196
136
197
@classmethod
137
198
def from_response (cls , resp , ns ):
@@ -140,25 +201,32 @@ def from_response(cls, resp, ns):
140
201
all_datasource_xml = parsed_response .findall ('.//t:datasource' , namespaces = ns )
141
202
142
203
for datasource_xml in all_datasource_xml :
143
- (id_ , name , datasource_type , content_url , created_at , updated_at ,
144
- tags , project_id , project_name , owner_id ,
145
- certified , certification_note ) = cls ._parse_element (datasource_xml , ns )
204
+ (ask_data_enablement , certified , certification_note , content_url , created_at , datasource_type ,
205
+ description , encrypt_extracts , has_extracts , id_ , name , owner_id , project_id , project_name , tags ,
206
+ updated_at , use_remote_query_agent , webpage_url ) = cls ._parse_element (datasource_xml , ns )
146
207
datasource_item = cls (project_id )
147
- datasource_item ._set_values (id_ , name , datasource_type , content_url , created_at , updated_at ,
148
- tags , None , project_name , owner_id , certified , certification_note )
208
+ datasource_item ._set_values (ask_data_enablement , certified , certification_note , content_url ,
209
+ created_at , datasource_type , description , encrypt_extracts ,
210
+ has_extracts , id_ , name , owner_id , None , project_name , tags , updated_at ,
211
+ use_remote_query_agent , webpage_url )
149
212
all_datasource_items .append (datasource_item )
150
213
return all_datasource_items
151
214
152
215
@staticmethod
153
216
def _parse_element (datasource_xml , ns ):
154
- id_ = datasource_xml .get ('id' , None )
155
- name = datasource_xml .get ('name' , None )
156
- datasource_type = datasource_xml .get ('type' , None )
217
+ certification_note = datasource_xml .get ('certificationNote' , None )
218
+ certified = str (datasource_xml .get ('isCertified' , None )).lower () == 'true'
157
219
content_url = datasource_xml .get ('contentUrl' , None )
158
220
created_at = parse_datetime (datasource_xml .get ('createdAt' , None ))
221
+ datasource_type = datasource_xml .get ('type' , None )
222
+ description = datasource_xml .get ('description' , None )
223
+ encrypt_extracts = datasource_xml .get ('encryptExtracts' , None )
224
+ has_extracts = datasource_xml .get ('hasExtracts' , None )
225
+ id_ = datasource_xml .get ('id' , None )
226
+ name = datasource_xml .get ('name' , None )
159
227
updated_at = parse_datetime (datasource_xml .get ('updatedAt' , None ))
160
- certification_note = datasource_xml .get ('certificationNote ' , None )
161
- certified = str ( datasource_xml .get ('isCertified ' , None )). lower () == 'true'
228
+ use_remote_query_agent = datasource_xml .get ('useRemoteQueryAgent ' , None )
229
+ webpage_url = datasource_xml .get ('webpageUrl ' , None )
162
230
163
231
tags = None
164
232
tags_elem = datasource_xml .find ('.//t:tags' , namespaces = ns )
@@ -177,5 +245,11 @@ def _parse_element(datasource_xml, ns):
177
245
if owner_elem is not None :
178
246
owner_id = owner_elem .get ('id' , None )
179
247
180
- return (id_ , name , datasource_type , content_url , created_at , updated_at , tags , project_id ,
181
- project_name , owner_id , certified , certification_note )
248
+ ask_data_enablement = None
249
+ ask_data_elem = datasource_xml .find ('.//t:askData' , namespaces = ns )
250
+ if ask_data_elem is not None :
251
+ ask_data_enablement = ask_data_elem .get ('enablement' , None )
252
+
253
+ return (ask_data_enablement , certified , certification_note , content_url , created_at ,
254
+ datasource_type , description , encrypt_extracts , has_extracts , id_ , name , owner_id ,
255
+ project_id , project_name , tags , updated_at , use_remote_query_agent , webpage_url )
0 commit comments