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,15 @@ 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
+
68
97
@property
69
98
def id (self ):
70
99
return self ._id
@@ -90,6 +119,15 @@ def datasource_type(self):
90
119
def updated_at (self ):
91
120
return self ._updated_at
92
121
122
+ @property
123
+ def use_remote_query_agent (self ):
124
+ return self ._use_remote_query_agent
125
+
126
+ @use_remote_query_agent .setter
127
+ @property_is_boolean
128
+ def use_remote_query_agent (self , value ):
129
+ self ._use_remote_query_agent = value
130
+
93
131
def _set_connections (self , connections ):
94
132
self ._connections = connections
95
133
@@ -100,38 +138,53 @@ def _parse_common_elements(self, datasource_xml, ns):
100
138
if not isinstance (datasource_xml , ET .Element ):
101
139
datasource_xml = ET .fromstring (datasource_xml ).find ('.//t:datasource' , namespaces = ns )
102
140
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 )
141
+ (ask_data_enablement , certified , certification_note , _ , _ , _ , _ , encrypt_extracts , has_extracts ,
142
+ _ , _ , owner_id , project_id , project_name , _ , updated_at , use_remote_query_agent ,
143
+ webpage_url ) = self ._parse_element (datasource_xml , ns )
144
+ self ._set_values (ask_data_enablement , certified , certification_note , None , None , None , None ,
145
+ encrypt_extracts , has_extracts , None , None , owner_id , project_id , project_name , None ,
146
+ updated_at , use_remote_query_agent , webpage_url )
107
147
return self
108
148
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
149
+ def _set_values (self , ask_data_enablement , certified , certification_note , content_url , created_at , datasource_type ,
150
+ description , encrypt_extracts , has_extracts , id_ , name , owner_id , project_id , project_name , tags ,
151
+ updated_at , use_remote_query_agent , webpage_url ) :
152
+ if ask_data_enablement is not None :
153
+ self . _ask_data_enablement = ask_data_enablement
154
+ if certification_note :
155
+ self . certification_note = certification_note
156
+ self . certified = certified # Always True/False, not conditional
117
157
if content_url :
118
158
self ._content_url = content_url
119
159
if created_at :
120
160
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 )
161
+ if datasource_type :
162
+ self ._datasource_type = datasource_type
163
+ if description :
164
+ self .description = description
165
+ if encrypt_extracts is not None :
166
+ self .encrypt_extracts = str (encrypt_extracts ).lower () == 'true'
167
+ if has_extracts is not None :
168
+ self ._has_extracts = str (has_extracts ).lower () == 'true'
169
+ if id_ is not None :
170
+ self ._id = id_
171
+ if name :
172
+ self .name = name
173
+ if owner_id :
174
+ self .owner_id = owner_id
126
175
if project_id :
127
176
self .project_id = project_id
128
177
if project_name :
129
178
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
179
+ if tags :
180
+ self .tags = tags
181
+ self ._initial_tags = copy .copy (tags )
182
+ if updated_at :
183
+ self ._updated_at = updated_at
184
+ if use_remote_query_agent is not None :
185
+ self ._use_remote_query_agent = str (use_remote_query_agent ).lower () == 'true'
186
+ if webpage_url :
187
+ self ._webpage_url = webpage_url
135
188
136
189
@classmethod
137
190
def from_response (cls , resp , ns ):
@@ -140,25 +193,32 @@ def from_response(cls, resp, ns):
140
193
all_datasource_xml = parsed_response .findall ('.//t:datasource' , namespaces = ns )
141
194
142
195
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 )
196
+ (ask_data_enablement , certified , certification_note , content_url , created_at , datasource_type ,
197
+ description , encrypt_extracts , has_extracts , id_ , name , owner_id , project_id , project_name , tags ,
198
+ updated_at , use_remote_query_agent , webpage_url ) = cls ._parse_element (datasource_xml , ns )
146
199
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 )
200
+ datasource_item ._set_values (ask_data_enablement , certified , certification_note , content_url ,
201
+ created_at , datasource_type , description , encrypt_extracts ,
202
+ has_extracts , id_ , name , owner_id , None , project_name , tags , updated_at ,
203
+ use_remote_query_agent , webpage_url )
149
204
all_datasource_items .append (datasource_item )
150
205
return all_datasource_items
151
206
152
207
@staticmethod
153
208
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 )
209
+ certification_note = datasource_xml .get ('certificationNote' , None )
210
+ certified = str (datasource_xml .get ('isCertified' , None )).lower () == 'true'
157
211
content_url = datasource_xml .get ('contentUrl' , None )
158
212
created_at = parse_datetime (datasource_xml .get ('createdAt' , None ))
213
+ datasource_type = datasource_xml .get ('type' , None )
214
+ description = datasource_xml .get ('description' , None )
215
+ encrypt_extracts = datasource_xml .get ('encryptExtracts' , None )
216
+ has_extracts = datasource_xml .get ('hasExtracts' , None )
217
+ id_ = datasource_xml .get ('id' , None )
218
+ name = datasource_xml .get ('name' , None )
159
219
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'
220
+ use_remote_query_agent = datasource_xml .get ('useRemoteQueryAgent ' , None )
221
+ webpage_url = datasource_xml .get ('webpageUrl ' , None )
162
222
163
223
tags = None
164
224
tags_elem = datasource_xml .find ('.//t:tags' , namespaces = ns )
@@ -177,5 +237,11 @@ def _parse_element(datasource_xml, ns):
177
237
if owner_elem is not None :
178
238
owner_id = owner_elem .get ('id' , None )
179
239
180
- return (id_ , name , datasource_type , content_url , created_at , updated_at , tags , project_id ,
181
- project_name , owner_id , certified , certification_note )
240
+ ask_data_enablement = None
241
+ ask_data_elem = datasource_xml .find ('.//t:askData' , namespaces = ns )
242
+ if ask_data_elem is not None :
243
+ ask_data_enablement = ask_data_elem .get ('enablement' , None )
244
+
245
+ return (ask_data_enablement , certified , certification_note , content_url , created_at ,
246
+ datasource_type , description , encrypt_extracts , has_extracts , id_ , name , owner_id ,
247
+ project_id , project_name , tags , updated_at , use_remote_query_agent , webpage_url )
0 commit comments