frost-sta-client 1.1.50__py2.py3-none-any.whl → 1.1.51__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,345 +1,345 @@
1
- # Copyright (C) 2021 Fraunhofer Institut IOSB, Fraunhoferstr. 1, D 76131
2
- # Karlsruhe, Germany.
3
- #
4
- # This program is free software: you can redistribute it and/or modify
5
- # it under the terms of the GNU Lesser General Public License as published by
6
- # the Free Software Foundation, either version 3 of the License, or
7
- # (at your option) any later version.
8
- #
9
- # This program is distributed in the hope that it will be useful,
10
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
- # GNU Lesser General Public License for more details.
13
- #
14
- # You should have received a copy of the GNU Lesser General Public License
15
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
-
17
- import frost_sta_client.model
18
- from frost_sta_client.dao.multi_datastream import MultiDatastreamDao
19
-
20
- from . import entity
21
- from . import thing
22
- from . import sensor
23
- from . import observation
24
- from . import observedproperty
25
- from .ext import unitofmeasurement
26
-
27
- from frost_sta_client import utils
28
- from .ext import entity_list
29
- from .ext import entity_type
30
-
31
- import geojson.geometry
32
-
33
-
34
- class MultiDatastream(entity.Entity):
35
- def __init__(self,
36
- name='',
37
- description='',
38
- properties=None,
39
- unit_of_measurements=None,
40
- observation_type='',
41
- multi_observation_data_types=None,
42
- observed_area=None,
43
- phenomenon_time=None,
44
- result_time=None,
45
- thing=None,
46
- sensor=None,
47
- observed_properties=None,
48
- observations=None,
49
- **kwargs):
50
- super().__init__(**kwargs)
51
- if properties is None:
52
- properties = {}
53
- if multi_observation_data_types is None:
54
- multi_observation_data_types = []
55
- self.name = name
56
- self.description = description
57
- self.properties = properties
58
- self.unit_of_measurements = unit_of_measurements
59
- self.observation_type = observation_type
60
- self.multi_observation_data_types = multi_observation_data_types
61
- self.observed_area = observed_area
62
- self.phenomenon_time = phenomenon_time
63
- self.result_time = result_time
64
- self.thing = thing
65
- self.sensor = sensor
66
- self.observed_properties = observed_properties
67
- self.observations = observations
68
-
69
- def __new__(cls, *args, **kwargs):
70
- new_mds = super().__new__(cls)
71
- attributes = dict(_id=None, _name='', _description='', _properties={}, _observation_type='', _multi_observation_data_types=[],
72
- _unit_of_measurements=[], _observed_area=None, _phenomenon_time=None, _result_time=None,
73
- _thing=None, _sensor=None, _observed_properties=None, _observations=None, _self_link='',
74
- _service=None)
75
- for key, value in attributes.items():
76
- new_mds.__dict__[key] = value
77
- return new_mds
78
-
79
- @property
80
- def name(self):
81
- return self._name
82
-
83
- @name.setter
84
- def name(self, value):
85
- if value is None:
86
- self._name = None
87
- return
88
- if not isinstance(value, str):
89
- raise ValueError('name should be of type str!')
90
- self._name = value
91
-
92
- @property
93
- def description(self):
94
- return self._description
95
-
96
- @description.setter
97
- def description(self, value):
98
- if value is None:
99
- self._description = None
100
- return
101
- if not isinstance(value, str):
102
- raise ValueError('description should be of type str!')
103
- self._description = value
104
-
105
- @property
106
- def properties(self):
107
- return self._properties
108
-
109
- @properties.setter
110
- def properties(self, values):
111
- if values is None:
112
- self._properties = {}
113
- return
114
- if not isinstance(values, dict):
115
- raise ValueError('properties should be of type dict!')
116
- self._properties = values
117
-
118
- @property
119
- def unit_of_measurements(self):
120
- return self._unit_of_measurements
121
-
122
- @unit_of_measurements.setter
123
- def unit_of_measurements(self, values):
124
- if values is not None and (not isinstance(values, list) or \
125
- any((not isinstance(uom, unitofmeasurement.UnitOfMeasurement)) for uom in values)):
126
- raise ValueError('unit_of_measurements should be a list of type UnitOfMeasurement')
127
- self._unit_of_measurements = values
128
-
129
- @property
130
- def observation_type(self):
131
- return self._observation_type
132
-
133
- @observation_type.setter
134
- def observation_type(self, value):
135
- if not isinstance(value, str):
136
- raise ValueError('observation_type should be of type str!')
137
- self._observation_type = value
138
-
139
- @property
140
- def multi_observation_data_types(self):
141
- return self._multi_observation_data_types
142
-
143
- @multi_observation_data_types.setter
144
- def multi_observation_data_types(self, values):
145
- if values is not None and (not isinstance(values, list) or any((not isinstance(dtype, str)) for dtype in values)):
146
- raise ValueError('multi_observations_data_types should be list of type str!')
147
- self._multi_observation_data_types = values
148
-
149
- @property
150
- def observed_area(self):
151
- return self._observed_area
152
-
153
- @observed_area.setter
154
- def observed_area(self, value):
155
- if value is None:
156
- self._observed_area = None
157
- return
158
- if not isinstance(value, geojson.geometry.Polygon):
159
- raise ValueError('observedArea should be geojson object')
160
- self._observed_area = value
161
-
162
- @property
163
- def phenomenon_time(self):
164
- return self._phenomenon_time
165
-
166
- @phenomenon_time.setter
167
- def phenomenon_time(self, value):
168
- self._phenomenon_time = utils.check_datetime(value, 'phenomenon_time')
169
-
170
- @property
171
- def result_time(self):
172
- return self._result_time
173
-
174
- @result_time.setter
175
- def result_time(self, value):
176
- self._result_time = utils.check_datetime(value, 'result_time')
177
-
178
- @property
179
- def thing(self):
180
- return self._thing
181
-
182
- @thing.setter
183
- def thing(self, value):
184
- if value is not None and not isinstance(value, thing.Thing):
185
- raise ValueError('thing should be of type Thing!')
186
- self._thing = value
187
-
188
- @property
189
- def sensor(self):
190
- return self._sensor
191
-
192
- @sensor.setter
193
- def sensor(self, value):
194
- if value is not None and not isinstance(value, sensor.Sensor):
195
- raise ValueError('sensor should be of type Sensor!')
196
- self._sensor = value
197
-
198
- @property
199
- def observed_properties(self):
200
- return self._observed_properties
201
-
202
- @observed_properties.setter
203
- def observed_properties(self, values):
204
- if values is None:
205
- self._observed_properties = None
206
- return
207
- if isinstance(values, list) and all(isinstance(op, observedproperty.ObservedProperty) for op in values):
208
- entity_class = entity_type.EntityTypes['ObservedProperty']['class']
209
- self._observed_properties = entity_list.EntityList(entity_class=entity_class, entities=values)
210
- return
211
- if not isinstance(values, entity_list.EntityList) or \
212
- any(not isinstance(op, observedproperty.ObservedProperty) for op in values.entities):
213
- raise ValueError('observed_properties should be an entity list of ObservedProperty!')
214
- self._observed_properties = values
215
-
216
- @property
217
- def observations(self):
218
- return self._observations
219
-
220
- @observations.setter
221
- def observations(self, values):
222
- if values is None:
223
- self._observations = None
224
- return
225
- if isinstance(values, list) and all(isinstance(ob, observation.Observation) for ob in values):
226
- entity_class = entity_type.EntityTypes['Observation']['class']
227
- self._observations = entity_list.EntityList(entity_class=entity_class, entities=values)
228
- return
229
- if not isinstance(values, entity_list.EntityList) or \
230
- any(not isinstance(ob, observation.Observation) for ob in values.entities):
231
- raise ValueError('Observations should be an entity list of Observations')
232
- self._observations = values
233
-
234
- def get_observations(self):
235
- result = self.service.observations()
236
- result.parent = self
237
- return result
238
-
239
- def get_observed_properties(self):
240
- result = self.service.observed_properties()
241
- result.parent = self
242
- return result
243
-
244
- def ensure_service_on_children(self, service):
245
- if self.thing is not None:
246
- self.thing.set_service(service)
247
- if self.sensor is not None:
248
- self.sensor.set_service(service)
249
- if self.observations is not None:
250
- self.observations.set_service(service)
251
- if self.observed_properties is not None:
252
- self.observed_properties.set_service(service)
253
-
254
- def __eq__(self, other):
255
- if not super().__eq__(other):
256
- return False
257
- if self.name != other.name:
258
- return False
259
- if self.description != other.description:
260
- return False
261
- if self.observation_type != other.observation_type:
262
- return False
263
- if self.observed_area != other.observation_area:
264
- return False
265
- if self.properties != other.properties:
266
- return False
267
- if self.result_time != other.result_time:
268
- return False
269
- if self.unit_of_measurements != other.unit_of_measurements:
270
- return False
271
- if self.multi_observation_data_types != other.multi_observation_data_types:
272
- return False
273
- return True
274
-
275
- def __ne__(self, other):
276
- return not self == other
277
-
278
- def __getstate__(self):
279
- data = super().__getstate__()
280
- if self.name is not None and self.name != '':
281
- data['name'] = self.name
282
- if self.description is not None and self.description != '':
283
- data['description'] = self.description
284
- if self.observation_type is not None and self.observation_type != '':
285
- data['observationType'] = self.observation_type
286
- if self.observed_area is not None:
287
- data['observedArea'] = self.observed_area
288
- if self.phenomenon_time is not None:
289
- data['phenomenonTime'] = utils.parse_datetime(self.phenomenon_time)
290
- if self.result_time is not None:
291
- data['resultTime'] = utils.parse_datetime(self.result_time)
292
- if self.thing is not None:
293
- data['Thing'] = self.thing.__getstate__()
294
- if self.sensor is not None:
295
- data['Sensor'] = self.sensor.__getstate__()
296
- if self.properties is not None and self.properties != {}:
297
- data['properties'] = self.properties
298
- if self.unit_of_measurements is not None and len(self.unit_of_measurements) > 0:
299
- data['unitOfMeasurements'] = self.unit_of_measurements.__getstate__()
300
- if self.multi_observation_data_types is not None and len(self.multi_observation_data_types) > 0:
301
- data['multiObservationDataTypes'] = self.multi_observation_data_types
302
- if self.observed_properties is not None and len(self.observed_properties.entities) > 0:
303
- data['ObservedProperties'] = self.observed_properties.__getstate__()
304
- if self.observations is not None and len(self.observations.entities) > 0:
305
- data['Observations'] = self.observations.__getstate__()
306
- return data
307
-
308
- def __setstate__(self, state):
309
- super().__setstate__(state)
310
- self.name = state.get('name', None)
311
- self.description = state.get('description', None)
312
- self.observation_type = state.get('observationType', None)
313
- self.observation_area = state.get('observedArea', None)
314
- self.phenomenon_time = state.get('phenomenonTime', None)
315
- self.result_time = state.get('resultTime', None)
316
- self.properties = state.get('properties', None)
317
- if state.get('Thing', None) is not None:
318
- self.thing = frost_sta_client.model.thing.Thing()
319
- self.thing.__setstate__(state['Thing'])
320
- if state.get('Sensor', None) is not None:
321
- self.sensor = frost_sta_client.model.sensor.Sensor()
322
- self.sensor.__setstate__(state['Sensor'])
323
- if state.get('unitOfMeasurements', None) is not None \
324
- and isinstance(state['unitOfMeasurements'], list):
325
- self.unit_of_measurements = []
326
- for value in state['unitOfMeasurements']:
327
- self.unit_of_measurements.append(value)
328
- if state.get('multiObservationDataTypes', None) is not None \
329
- and isinstance(state['multiObservationDataTypes'], list):
330
- self.multi_observation_data_types = []
331
- for value in state['multiObservationDataTypes']:
332
- self.multi_observation_data_types.append(value)
333
- if state.get('ObservedProperties', None) is not None and isinstance(state['ObservedProperties'], list):
334
- entity_class = entity_type.EntityTypes['ObservedProperty']['class']
335
- self.observed_properties = utils.transform_json_to_entity_list(state['ObservedProperties'], entity_class)
336
- self.observed_properties.next_link = state.get('ObservedProperties@iot.nextLink')
337
- self.observed_properties.count = state.get('ObservedProperties@iot.count')
338
- if state.get('Observations', None) is not None and isinstance(state['Observations'], list):
339
- entity_class = entity_type.EntityTypes['Observation']['class']
340
- self.observations = utils.transform_json_to_entity_list(state['Observations'], entity_class)
341
- self.observed_properties.next_link = state.get('Observations@iot.nextLink')
342
- self.observed_properties.count = state.get('Observations@iot.count')
343
-
344
- def get_dao(self, service):
345
- return MultiDatastreamDao(service)
1
+ # Copyright (C) 2021 Fraunhofer Institut IOSB, Fraunhoferstr. 1, D 76131
2
+ # Karlsruhe, Germany.
3
+ #
4
+ # This program is free software: you can redistribute it and/or modify
5
+ # it under the terms of the GNU Lesser General Public License as published by
6
+ # the Free Software Foundation, either version 3 of the License, or
7
+ # (at your option) any later version.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU Lesser General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU Lesser General Public License
15
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
16
+
17
+ import frost_sta_client.model
18
+ from frost_sta_client.dao.multi_datastream import MultiDatastreamDao
19
+
20
+ from . import entity
21
+ from . import thing
22
+ from . import sensor
23
+ from . import observation
24
+ from . import observedproperty
25
+ from .ext import unitofmeasurement
26
+
27
+ from frost_sta_client import utils
28
+ from .ext import entity_list
29
+ from .ext import entity_type
30
+
31
+ import geojson.geometry
32
+
33
+
34
+ class MultiDatastream(entity.Entity):
35
+ def __init__(self,
36
+ name='',
37
+ description='',
38
+ properties=None,
39
+ unit_of_measurements=None,
40
+ observation_type='',
41
+ multi_observation_data_types=None,
42
+ observed_area=None,
43
+ phenomenon_time=None,
44
+ result_time=None,
45
+ thing=None,
46
+ sensor=None,
47
+ observed_properties=None,
48
+ observations=None,
49
+ **kwargs):
50
+ super().__init__(**kwargs)
51
+ if properties is None:
52
+ properties = {}
53
+ if multi_observation_data_types is None:
54
+ multi_observation_data_types = []
55
+ self.name = name
56
+ self.description = description
57
+ self.properties = properties
58
+ self.unit_of_measurements = unit_of_measurements
59
+ self.observation_type = observation_type
60
+ self.multi_observation_data_types = multi_observation_data_types
61
+ self.observed_area = observed_area
62
+ self.phenomenon_time = phenomenon_time
63
+ self.result_time = result_time
64
+ self.thing = thing
65
+ self.sensor = sensor
66
+ self.observed_properties = observed_properties
67
+ self.observations = observations
68
+
69
+ def __new__(cls, *args, **kwargs):
70
+ new_mds = super().__new__(cls)
71
+ attributes = dict(_id=None, _name='', _description='', _properties={}, _observation_type='', _multi_observation_data_types=[],
72
+ _unit_of_measurements=[], _observed_area=None, _phenomenon_time=None, _result_time=None,
73
+ _thing=None, _sensor=None, _observed_properties=None, _observations=None, _self_link='',
74
+ _service=None)
75
+ for key, value in attributes.items():
76
+ new_mds.__dict__[key] = value
77
+ return new_mds
78
+
79
+ @property
80
+ def name(self):
81
+ return self._name
82
+
83
+ @name.setter
84
+ def name(self, value):
85
+ if value is None:
86
+ self._name = None
87
+ return
88
+ if not isinstance(value, str):
89
+ raise ValueError('name should be of type str!')
90
+ self._name = value
91
+
92
+ @property
93
+ def description(self):
94
+ return self._description
95
+
96
+ @description.setter
97
+ def description(self, value):
98
+ if value is None:
99
+ self._description = None
100
+ return
101
+ if not isinstance(value, str):
102
+ raise ValueError('description should be of type str!')
103
+ self._description = value
104
+
105
+ @property
106
+ def properties(self):
107
+ return self._properties
108
+
109
+ @properties.setter
110
+ def properties(self, values):
111
+ if values is None:
112
+ self._properties = {}
113
+ return
114
+ if not isinstance(values, dict):
115
+ raise ValueError('properties should be of type dict!')
116
+ self._properties = values
117
+
118
+ @property
119
+ def unit_of_measurements(self):
120
+ return self._unit_of_measurements
121
+
122
+ @unit_of_measurements.setter
123
+ def unit_of_measurements(self, values):
124
+ if values is not None and (not isinstance(values, list) or \
125
+ any((not isinstance(uom, unitofmeasurement.UnitOfMeasurement)) for uom in values)):
126
+ raise ValueError('unit_of_measurements should be a list of type UnitOfMeasurement')
127
+ self._unit_of_measurements = values
128
+
129
+ @property
130
+ def observation_type(self):
131
+ return self._observation_type
132
+
133
+ @observation_type.setter
134
+ def observation_type(self, value):
135
+ if not isinstance(value, str):
136
+ raise ValueError('observation_type should be of type str!')
137
+ self._observation_type = value
138
+
139
+ @property
140
+ def multi_observation_data_types(self):
141
+ return self._multi_observation_data_types
142
+
143
+ @multi_observation_data_types.setter
144
+ def multi_observation_data_types(self, values):
145
+ if values is not None and (not isinstance(values, list) or any((not isinstance(dtype, str)) for dtype in values)):
146
+ raise ValueError('multi_observations_data_types should be list of type str!')
147
+ self._multi_observation_data_types = values
148
+
149
+ @property
150
+ def observed_area(self):
151
+ return self._observed_area
152
+
153
+ @observed_area.setter
154
+ def observed_area(self, value):
155
+ if value is None:
156
+ self._observed_area = None
157
+ return
158
+ if not isinstance(value, geojson.geometry.Polygon):
159
+ raise ValueError('observedArea should be geojson object')
160
+ self._observed_area = value
161
+
162
+ @property
163
+ def phenomenon_time(self):
164
+ return self._phenomenon_time
165
+
166
+ @phenomenon_time.setter
167
+ def phenomenon_time(self, value):
168
+ self._phenomenon_time = utils.check_datetime(value, 'phenomenon_time')
169
+
170
+ @property
171
+ def result_time(self):
172
+ return self._result_time
173
+
174
+ @result_time.setter
175
+ def result_time(self, value):
176
+ self._result_time = utils.check_datetime(value, 'result_time')
177
+
178
+ @property
179
+ def thing(self):
180
+ return self._thing
181
+
182
+ @thing.setter
183
+ def thing(self, value):
184
+ if value is not None and not isinstance(value, thing.Thing):
185
+ raise ValueError('thing should be of type Thing!')
186
+ self._thing = value
187
+
188
+ @property
189
+ def sensor(self):
190
+ return self._sensor
191
+
192
+ @sensor.setter
193
+ def sensor(self, value):
194
+ if value is not None and not isinstance(value, sensor.Sensor):
195
+ raise ValueError('sensor should be of type Sensor!')
196
+ self._sensor = value
197
+
198
+ @property
199
+ def observed_properties(self):
200
+ return self._observed_properties
201
+
202
+ @observed_properties.setter
203
+ def observed_properties(self, values):
204
+ if values is None:
205
+ self._observed_properties = None
206
+ return
207
+ if isinstance(values, list) and all(isinstance(op, observedproperty.ObservedProperty) for op in values):
208
+ entity_class = entity_type.EntityTypes['ObservedProperty']['class']
209
+ self._observed_properties = entity_list.EntityList(entity_class=entity_class, entities=values)
210
+ return
211
+ if not isinstance(values, entity_list.EntityList) or \
212
+ any(not isinstance(op, observedproperty.ObservedProperty) for op in values.entities):
213
+ raise ValueError('observed_properties should be an entity list of ObservedProperty!')
214
+ self._observed_properties = values
215
+
216
+ @property
217
+ def observations(self):
218
+ return self._observations
219
+
220
+ @observations.setter
221
+ def observations(self, values):
222
+ if values is None:
223
+ self._observations = None
224
+ return
225
+ if isinstance(values, list) and all(isinstance(ob, observation.Observation) for ob in values):
226
+ entity_class = entity_type.EntityTypes['Observation']['class']
227
+ self._observations = entity_list.EntityList(entity_class=entity_class, entities=values)
228
+ return
229
+ if not isinstance(values, entity_list.EntityList) or \
230
+ any(not isinstance(ob, observation.Observation) for ob in values.entities):
231
+ raise ValueError('Observations should be an entity list of Observations')
232
+ self._observations = values
233
+
234
+ def get_observations(self):
235
+ result = self.service.observations()
236
+ result.parent = self
237
+ return result
238
+
239
+ def get_observed_properties(self):
240
+ result = self.service.observed_properties()
241
+ result.parent = self
242
+ return result
243
+
244
+ def ensure_service_on_children(self, service):
245
+ if self.thing is not None:
246
+ self.thing.set_service(service)
247
+ if self.sensor is not None:
248
+ self.sensor.set_service(service)
249
+ if self.observations is not None:
250
+ self.observations.set_service(service)
251
+ if self.observed_properties is not None:
252
+ self.observed_properties.set_service(service)
253
+
254
+ def __eq__(self, other):
255
+ if not super().__eq__(other):
256
+ return False
257
+ if self.name != other.name:
258
+ return False
259
+ if self.description != other.description:
260
+ return False
261
+ if self.observation_type != other.observation_type:
262
+ return False
263
+ if self.observed_area != other.observed_area:
264
+ return False
265
+ if self.properties != other.properties:
266
+ return False
267
+ if self.result_time != other.result_time:
268
+ return False
269
+ if self.unit_of_measurements != other.unit_of_measurements:
270
+ return False
271
+ if self.multi_observation_data_types != other.multi_observation_data_types:
272
+ return False
273
+ return True
274
+
275
+ def __ne__(self, other):
276
+ return not self == other
277
+
278
+ def __getstate__(self):
279
+ data = super().__getstate__()
280
+ if self.name is not None and self.name != '':
281
+ data['name'] = self.name
282
+ if self.description is not None and self.description != '':
283
+ data['description'] = self.description
284
+ if self.observation_type is not None and self.observation_type != '':
285
+ data['observationType'] = self.observation_type
286
+ if self.observed_area is not None:
287
+ data['observedArea'] = self.observed_area
288
+ if self.phenomenon_time is not None:
289
+ data['phenomenonTime'] = utils.parse_datetime(self.phenomenon_time)
290
+ if self.result_time is not None:
291
+ data['resultTime'] = utils.parse_datetime(self.result_time)
292
+ if self.thing is not None:
293
+ data['Thing'] = self.thing.__getstate__()
294
+ if self.sensor is not None:
295
+ data['Sensor'] = self.sensor.__getstate__()
296
+ if self.properties is not None and self.properties != {}:
297
+ data['properties'] = self.properties
298
+ if self.unit_of_measurements is not None and len(self.unit_of_measurements) > 0:
299
+ data['unitOfMeasurements'] = self.unit_of_measurements.__getstate__()
300
+ if self.multi_observation_data_types is not None and len(self.multi_observation_data_types) > 0:
301
+ data['multiObservationDataTypes'] = self.multi_observation_data_types
302
+ if self.observed_properties is not None and len(self.observed_properties.entities) > 0:
303
+ data['ObservedProperties'] = self.observed_properties.__getstate__()
304
+ if self.observations is not None and len(self.observations.entities) > 0:
305
+ data['Observations'] = self.observations.__getstate__()
306
+ return data
307
+
308
+ def __setstate__(self, state):
309
+ super().__setstate__(state)
310
+ self.name = state.get('name', None)
311
+ self.description = state.get('description', None)
312
+ self.observation_type = state.get('observationType', None)
313
+ self.observation_area = state.get('observedArea', None)
314
+ self.phenomenon_time = state.get('phenomenonTime', None)
315
+ self.result_time = state.get('resultTime', None)
316
+ self.properties = state.get('properties', None)
317
+ if state.get('Thing', None) is not None:
318
+ self.thing = frost_sta_client.model.thing.Thing()
319
+ self.thing.__setstate__(state['Thing'])
320
+ if state.get('Sensor', None) is not None:
321
+ self.sensor = frost_sta_client.model.sensor.Sensor()
322
+ self.sensor.__setstate__(state['Sensor'])
323
+ if state.get('unitOfMeasurements', None) is not None \
324
+ and isinstance(state['unitOfMeasurements'], list):
325
+ self.unit_of_measurements = []
326
+ for value in state['unitOfMeasurements']:
327
+ self.unit_of_measurements.append(value)
328
+ if state.get('multiObservationDataTypes', None) is not None \
329
+ and isinstance(state['multiObservationDataTypes'], list):
330
+ self.multi_observation_data_types = []
331
+ for value in state['multiObservationDataTypes']:
332
+ self.multi_observation_data_types.append(value)
333
+ if state.get('ObservedProperties', None) is not None and isinstance(state['ObservedProperties'], list):
334
+ entity_class = entity_type.EntityTypes['ObservedProperty']['class']
335
+ self.observed_properties = utils.transform_json_to_entity_list(state['ObservedProperties'], entity_class)
336
+ self.observed_properties.next_link = state.get('ObservedProperties@iot.nextLink')
337
+ self.observed_properties.count = state.get('ObservedProperties@iot.count')
338
+ if state.get('Observations', None) is not None and isinstance(state['Observations'], list):
339
+ entity_class = entity_type.EntityTypes['Observation']['class']
340
+ self.observations = utils.transform_json_to_entity_list(state['Observations'], entity_class)
341
+ self.observations.next_link = state.get('Observations@iot.nextLink')
342
+ self.observations.count = state.get('Observations@iot.count')
343
+
344
+ def get_dao(self, service):
345
+ return MultiDatastreamDao(service)