frost-sta-client 1.1.49__py2.py3-none-any.whl → 1.1.50__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,5 +1,5 @@
1
1
  __title__ = 'frost_sta_client'
2
- __version__ = '1.1.49'
2
+ __version__ = '1.1.50'
3
3
  __license__ = 'LGPL3'
4
4
  __author__ = 'Fraunhofer IOSB'
5
5
  __copyright__ = 'Fraunhofer IOSB'
@@ -165,7 +165,7 @@ class Actuator(entity.Entity):
165
165
  if self.properties is not None and self.properties != {}:
166
166
  data['properties'] = self.properties
167
167
  if self.tasking_capabilities is not None and len(self.tasking_capabilities.entities) > 0:
168
- data['taskingCapabilities'] = self.tasking_capabilities.__getstate__()
168
+ data['TaskingCapabilities'] = self.tasking_capabilities.__getstate__()
169
169
  return data
170
170
 
171
171
  def __setstate__(self, state):
@@ -1,338 +1,338 @@
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
- import inspect
17
- import json
18
-
19
- import frost_sta_client.model.ext.unitofmeasurement
20
- from frost_sta_client.dao.datastream import DatastreamDao
21
-
22
- from . import thing
23
- from . import sensor
24
- from . import observedproperty
25
- from . import observation
26
- from . import entity
27
- from .ext import unitofmeasurement
28
- from .ext import entity_list
29
- from .ext import entity_type
30
-
31
- from frost_sta_client import utils
32
-
33
- import geojson.geometry
34
-
35
-
36
- class Datastream(entity.Entity):
37
-
38
- def __init__(self,
39
- name='',
40
- description='',
41
- observation_type='',
42
- unit_of_measurement=None,
43
- observed_area=None,
44
- properties=None,
45
- phenomenon_time=None,
46
- result_time=None,
47
- thing=None,
48
- sensor=None,
49
- observed_property=None,
50
- observations=None,
51
- **kwargs):
52
- """
53
- This class handles Datastreams assigned to a Thing. Before you create a Datastreams, you firstly have to
54
- create a Thing, a Sensor and an observedProperty to which you have to refer by specifying its ids.
55
-
56
- Parameters
57
- ----------
58
- name: str
59
- description: str
60
- observation_type: str
61
- unit_of_measurement: dict
62
- Should be a dict of keys 'name', 'symbol', 'definition' with values of str.
63
-
64
- """
65
- super().__init__(**kwargs)
66
- if properties is None:
67
- properties = {}
68
- self.name = name
69
- self.description = description
70
- self.observation_type = observation_type
71
- self.unit_of_measurement = unit_of_measurement
72
- self.observed_area = observed_area
73
- self.properties = properties
74
- self.phenomenon_time = phenomenon_time
75
- self.result_time = result_time
76
- self.thing = thing
77
- self.sensor = sensor
78
- self.observations = observations
79
- self.observed_property = observed_property
80
-
81
-
82
- def __new__(cls, *args, **kwargs):
83
- new_datastream = super().__new__(cls)
84
- attributes = dict(_id=None, _name='', _description='', _properties={}, _observation_type='',
85
- _unit_of_measurement=None, _observed_area=None, _phenomenon_time=None, _result_time=None,
86
- _thing=None, _sensor=None, _observed_property=None, _observations=None, _self_link='',
87
- _service=None)
88
- for key, value in attributes.items():
89
- new_datastream.__dict__[key] = value
90
- return new_datastream
91
-
92
- @property
93
- def name(self):
94
- return self._name
95
-
96
- @name.setter
97
- def name(self, value):
98
- if value is None:
99
- self._name = None
100
- return
101
- if not isinstance(value, str):
102
- raise ValueError('name should be of type str!')
103
- self._name = value
104
-
105
- @property
106
- def description(self):
107
- return self._description
108
-
109
- @description.setter
110
- def description(self, value):
111
- if value is None:
112
- self._description = None
113
- return
114
- if not isinstance(value, str):
115
- raise ValueError('description should be of type str!')
116
- self._description = value
117
-
118
- @property
119
- def observation_type(self):
120
- return self._observation_type
121
-
122
- @observation_type.setter
123
- def observation_type(self, value):
124
- if value is None:
125
- self._observation_type = None
126
- return
127
- if not isinstance(value, str):
128
- raise ValueError('observation_type should be of type str!')
129
- self._observation_type = value
130
-
131
- @property
132
- def unit_of_measurement(self):
133
- return self._unit_of_measurement
134
-
135
- @unit_of_measurement.setter
136
- def unit_of_measurement(self, value):
137
- if value is None or isinstance(value, unitofmeasurement.UnitOfMeasurement):
138
- self._unit_of_measurement = value
139
- return
140
- raise ValueError('unitOfMeasurement should be of type UnitOfMeasurement!')
141
-
142
- @property
143
- def observed_area(self):
144
- return self._observed_area
145
-
146
- @observed_area.setter
147
- def observed_area(self, value):
148
- if value is None:
149
- self._location = None
150
- return
151
- geo_classes = [obj for _, obj in inspect.getmembers(geojson) if inspect.isclass(obj) and
152
- obj.__module__ == 'geojson.geometry']
153
- if type(value) in geo_classes:
154
- self._observed_area = value
155
- return
156
- else:
157
- try:
158
- json.dumps(value)
159
- except TypeError:
160
- raise ValueError('observedArea should be of json_serializable!')
161
- self._observed_area = value
162
-
163
- @property
164
- def properties(self):
165
- return self._properties
166
-
167
- @properties.setter
168
- def properties(self, value):
169
- if value is None:
170
- self._properties = None
171
- return
172
- if not isinstance(value, dict):
173
- raise ValueError('properties should be of type dict')
174
- self._properties = value
175
-
176
- @property
177
- def phenomenon_time(self):
178
- return self._phenomenon_time
179
-
180
- @phenomenon_time.setter
181
- def phenomenon_time(self, value):
182
- self._phenomenon_time = utils.check_datetime(value, 'phenomenon_time')
183
-
184
- @property
185
- def result_time(self):
186
- return self._result_time
187
-
188
- @result_time.setter
189
- def result_time(self, value):
190
- self._result_time = utils.check_datetime(value, 'result_time')
191
-
192
- @property
193
- def thing(self):
194
- return self._thing
195
-
196
- @thing.setter
197
- def thing(self, value):
198
- if value is None or isinstance(value, thing.Thing):
199
- self._thing = value
200
- return
201
- raise ValueError('thing should be of type Thing!')
202
-
203
- @property
204
- def sensor(self):
205
- return self._sensor
206
-
207
- @sensor.setter
208
- def sensor(self, value):
209
- if value is None or isinstance(value, sensor.Sensor):
210
- self._sensor = value
211
- return
212
- raise ValueError('sensor should be of type Sensor!')
213
-
214
- @property
215
- def observed_property(self):
216
- return self._observed_property
217
-
218
- @observed_property.setter
219
- def observed_property(self, value):
220
- if isinstance(value, observedproperty.ObservedProperty) or value is None:
221
- self._observed_property = value
222
- return
223
- raise ValueError('observed property should by of type ObservedProperty!')
224
-
225
- @property
226
- def observations(self):
227
- return self._observations
228
-
229
- @observations.setter
230
- def observations(self, values):
231
- if values is None:
232
- self._observations = None
233
- return
234
- if isinstance(values, list) and all(isinstance(ob, observation.Observation) for ob in values):
235
- entity_class = entity_type.EntityTypes['Observation']['class']
236
- self._observations = entity_list.EntityList(entity_class=entity_class, entities=values)
237
- return
238
- if isinstance(values, entity_list.EntityList) and \
239
- all(isinstance(ob, observation.Observation) for ob in values.entities):
240
- self._observations = values
241
- return
242
- raise ValueError('Observations should be a list of Observations')
243
-
244
- def get_observations(self):
245
- result = self.service.observations()
246
- result.parent = self
247
- return result
248
-
249
- def ensure_service_on_children(self, service):
250
- if self.thing is not None:
251
- self.thing.set_service(service)
252
- if self.sensor is not None:
253
- self.sensor.set_service(service)
254
- if self.observed_property is not None:
255
- self.observed_property.set_service(service)
256
- if self.observations is not None:
257
- self.observations.set_service(service)
258
-
259
- def __eq__(self, other):
260
- if not super().__eq__(other):
261
- return False
262
- if self.name != other.name:
263
- return False
264
- if self.description != other.description:
265
- return False
266
- if self.observation_type != other.observation_type:
267
- return False
268
- if self.unit_of_measurement != other.unit_of_measurement:
269
- return False
270
- if self.properties != other.properties:
271
- return False
272
- if self.result_time != other.result_time:
273
- return False
274
- return True
275
-
276
- def __ne__(self, other):
277
- return not self == other
278
-
279
- def __getstate__(self):
280
- data = super().__getstate__()
281
- if self.name is not None and self.name != '':
282
- data['name'] = self.name
283
- if self.description is not None and self.description != '':
284
- data['description'] = self.description
285
- if self.observation_type is not None and self.observation_type != '':
286
- data['observationType'] = self.observation_type
287
- if self.properties is not None and self.properties != {}:
288
- data['properties'] = self.properties
289
- if self.unit_of_measurement is not None:
290
- data['unitOfMeasurement'] = self.unit_of_measurement
291
- if self.observed_area is not None:
292
- data['observedArea'] = self.observed_area
293
- if self.phenomenon_time is not None:
294
- data['phenomenonTime'] = utils.parse_datetime(self.phenomenon_time)
295
- if self.result_time is not None:
296
- data['resultTime'] = utils.parse_datetime(self.result_time)
297
- if self.thing is not None:
298
- data['Thing'] = self.thing
299
- if self.sensor is not None:
300
- data['Sensor'] = self.sensor
301
- if self.observed_property is not None:
302
- data['ObservedProperty'] = self.observed_property
303
- if self.observations is not None and len(self.observations.entities) > 0:
304
- data['Observations'] = self.observations.__getstate__()
305
- return data
306
-
307
- def __setstate__(self, state):
308
- super().__setstate__(state)
309
- self.name = state.get("name", None)
310
- self.description = state.get("description", None)
311
- self.observation_type = state.get("observationType", None)
312
- self.properties = state.get("properties", {})
313
- if state.get("unitOfMeasurement", None) is not None:
314
- self.unit_of_measurement = frost_sta_client.model.ext.unitofmeasurement.UnitOfMeasurement()
315
- self.unit_of_measurement.__setstate__(state["unitOfMeasurement"])
316
- if state.get("observedArea", None) is not None:
317
- self.observed_area = frost_sta_client.utils.process_area(state["observedArea"])
318
- if state.get("phenomenonTime", None) is not None:
319
- self.phenomenon_time = state["phenomenonTime"]
320
- if state.get("resultTime", None) is not None:
321
- self.result_time = state["resultTime"]
322
- if state.get("Thing", None) is not None:
323
- self.thing = frost_sta_client.model.thing.Thing()
324
- self.thing.__setstate__(state["Thing"])
325
- if state.get("ObservedProperty", None) is not None:
326
- self.observed_property = frost_sta_client.model.observedproperty.ObservedProperty()
327
- self.observed_property.__setstate__(state["ObservedProperty"])
328
- if state.get("Sensor", None) is not None:
329
- self.sensor = frost_sta_client.model.sensor.Sensor()
330
- self.sensor.__setstate__(state["Sensor"])
331
- if state.get("Observations", None) is not None and isinstance(state["Observations"], list):
332
- entity_class = entity_type.EntityTypes['Observation']['class']
333
- self.observations = utils.transform_json_to_entity_list(state['Observations'], entity_class)
334
- self.observations.next_link = state.get("Observations@iot.nextLink", None)
335
- self.observations.count = state.get("Observations@iot.count", None)
336
-
337
- def get_dao(self, service):
338
- return DatastreamDao(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
+ import inspect
17
+ import json
18
+
19
+ import frost_sta_client.model.ext.unitofmeasurement
20
+ from frost_sta_client.dao.datastream import DatastreamDao
21
+
22
+ from . import thing
23
+ from . import sensor
24
+ from . import observedproperty
25
+ from . import observation
26
+ from . import entity
27
+ from .ext import unitofmeasurement
28
+ from .ext import entity_list
29
+ from .ext import entity_type
30
+
31
+ from frost_sta_client import utils
32
+
33
+ import geojson.geometry
34
+
35
+
36
+ class Datastream(entity.Entity):
37
+
38
+ def __init__(self,
39
+ name='',
40
+ description='',
41
+ observation_type='',
42
+ unit_of_measurement=None,
43
+ observed_area=None,
44
+ properties=None,
45
+ phenomenon_time=None,
46
+ result_time=None,
47
+ thing=None,
48
+ sensor=None,
49
+ observed_property=None,
50
+ observations=None,
51
+ **kwargs):
52
+ """
53
+ This class handles Datastreams assigned to a Thing. Before you create a Datastreams, you firstly have to
54
+ create a Thing, a Sensor and an observedProperty to which you have to refer by specifying its ids.
55
+
56
+ Parameters
57
+ ----------
58
+ name: str
59
+ description: str
60
+ observation_type: str
61
+ unit_of_measurement: dict
62
+ Should be a dict of keys 'name', 'symbol', 'definition' with values of str.
63
+
64
+ """
65
+ super().__init__(**kwargs)
66
+ if properties is None:
67
+ properties = {}
68
+ self.name = name
69
+ self.description = description
70
+ self.observation_type = observation_type
71
+ self.unit_of_measurement = unit_of_measurement
72
+ self.observed_area = observed_area
73
+ self.properties = properties
74
+ self.phenomenon_time = phenomenon_time
75
+ self.result_time = result_time
76
+ self.thing = thing
77
+ self.sensor = sensor
78
+ self.observations = observations
79
+ self.observed_property = observed_property
80
+
81
+
82
+ def __new__(cls, *args, **kwargs):
83
+ new_datastream = super().__new__(cls)
84
+ attributes = dict(_id=None, _name='', _description='', _properties={}, _observation_type='',
85
+ _unit_of_measurement=None, _observed_area=None, _phenomenon_time=None, _result_time=None,
86
+ _thing=None, _sensor=None, _observed_property=None, _observations=None, _self_link='',
87
+ _service=None)
88
+ for key, value in attributes.items():
89
+ new_datastream.__dict__[key] = value
90
+ return new_datastream
91
+
92
+ @property
93
+ def name(self):
94
+ return self._name
95
+
96
+ @name.setter
97
+ def name(self, value):
98
+ if value is None:
99
+ self._name = None
100
+ return
101
+ if not isinstance(value, str):
102
+ raise ValueError('name should be of type str!')
103
+ self._name = value
104
+
105
+ @property
106
+ def description(self):
107
+ return self._description
108
+
109
+ @description.setter
110
+ def description(self, value):
111
+ if value is None:
112
+ self._description = None
113
+ return
114
+ if not isinstance(value, str):
115
+ raise ValueError('description should be of type str!')
116
+ self._description = value
117
+
118
+ @property
119
+ def observation_type(self):
120
+ return self._observation_type
121
+
122
+ @observation_type.setter
123
+ def observation_type(self, value):
124
+ if value is None:
125
+ self._observation_type = None
126
+ return
127
+ if not isinstance(value, str):
128
+ raise ValueError('observation_type should be of type str!')
129
+ self._observation_type = value
130
+
131
+ @property
132
+ def unit_of_measurement(self):
133
+ return self._unit_of_measurement
134
+
135
+ @unit_of_measurement.setter
136
+ def unit_of_measurement(self, value):
137
+ if value is None or isinstance(value, unitofmeasurement.UnitOfMeasurement):
138
+ self._unit_of_measurement = value
139
+ return
140
+ raise ValueError('unitOfMeasurement should be of type UnitOfMeasurement!')
141
+
142
+ @property
143
+ def observed_area(self):
144
+ return self._observed_area
145
+
146
+ @observed_area.setter
147
+ def observed_area(self, value):
148
+ if value is None:
149
+ self._location = None
150
+ return
151
+ geo_classes = [obj for _, obj in inspect.getmembers(geojson) if inspect.isclass(obj) and
152
+ obj.__module__ == 'geojson.geometry']
153
+ if type(value) in geo_classes:
154
+ self._observed_area = value
155
+ return
156
+ else:
157
+ try:
158
+ json.dumps(value)
159
+ except TypeError:
160
+ raise ValueError('observedArea should be of json_serializable!')
161
+ self._observed_area = value
162
+
163
+ @property
164
+ def properties(self):
165
+ return self._properties
166
+
167
+ @properties.setter
168
+ def properties(self, value):
169
+ if value is None:
170
+ self._properties = None
171
+ return
172
+ if not isinstance(value, dict):
173
+ raise ValueError('properties should be of type dict')
174
+ self._properties = value
175
+
176
+ @property
177
+ def phenomenon_time(self):
178
+ return self._phenomenon_time
179
+
180
+ @phenomenon_time.setter
181
+ def phenomenon_time(self, value):
182
+ self._phenomenon_time = utils.check_datetime(value, 'phenomenon_time')
183
+
184
+ @property
185
+ def result_time(self):
186
+ return self._result_time
187
+
188
+ @result_time.setter
189
+ def result_time(self, value):
190
+ self._result_time = utils.check_datetime(value, 'result_time')
191
+
192
+ @property
193
+ def thing(self):
194
+ return self._thing
195
+
196
+ @thing.setter
197
+ def thing(self, value):
198
+ if value is None or isinstance(value, thing.Thing):
199
+ self._thing = value
200
+ return
201
+ raise ValueError('thing should be of type Thing!')
202
+
203
+ @property
204
+ def sensor(self):
205
+ return self._sensor
206
+
207
+ @sensor.setter
208
+ def sensor(self, value):
209
+ if value is None or isinstance(value, sensor.Sensor):
210
+ self._sensor = value
211
+ return
212
+ raise ValueError('sensor should be of type Sensor!')
213
+
214
+ @property
215
+ def observed_property(self):
216
+ return self._observed_property
217
+
218
+ @observed_property.setter
219
+ def observed_property(self, value):
220
+ if isinstance(value, observedproperty.ObservedProperty) or value is None:
221
+ self._observed_property = value
222
+ return
223
+ raise ValueError('observed property should by of type ObservedProperty!')
224
+
225
+ @property
226
+ def observations(self):
227
+ return self._observations
228
+
229
+ @observations.setter
230
+ def observations(self, values):
231
+ if values is None:
232
+ self._observations = None
233
+ return
234
+ if isinstance(values, list) and all(isinstance(ob, observation.Observation) for ob in values):
235
+ entity_class = entity_type.EntityTypes['Observation']['class']
236
+ self._observations = entity_list.EntityList(entity_class=entity_class, entities=values)
237
+ return
238
+ if isinstance(values, entity_list.EntityList) and \
239
+ all(isinstance(ob, observation.Observation) for ob in values.entities):
240
+ self._observations = values
241
+ return
242
+ raise ValueError('Observations should be a list of Observations')
243
+
244
+ def get_observations(self):
245
+ result = self.service.observations()
246
+ result.parent = self
247
+ return result
248
+
249
+ def ensure_service_on_children(self, service):
250
+ if self.thing is not None:
251
+ self.thing.set_service(service)
252
+ if self.sensor is not None:
253
+ self.sensor.set_service(service)
254
+ if self.observed_property is not None:
255
+ self.observed_property.set_service(service)
256
+ if self.observations is not None:
257
+ self.observations.set_service(service)
258
+
259
+ def __eq__(self, other):
260
+ if not super().__eq__(other):
261
+ return False
262
+ if self.name != other.name:
263
+ return False
264
+ if self.description != other.description:
265
+ return False
266
+ if self.observation_type != other.observation_type:
267
+ return False
268
+ if self.unit_of_measurement != other.unit_of_measurement:
269
+ return False
270
+ if self.properties != other.properties:
271
+ return False
272
+ if self.result_time != other.result_time:
273
+ return False
274
+ return True
275
+
276
+ def __ne__(self, other):
277
+ return not self == other
278
+
279
+ def __getstate__(self):
280
+ data = super().__getstate__()
281
+ if self.name is not None and self.name != '':
282
+ data['name'] = self.name
283
+ if self.description is not None and self.description != '':
284
+ data['description'] = self.description
285
+ if self.observation_type is not None and self.observation_type != '':
286
+ data['observationType'] = self.observation_type
287
+ if self.properties is not None and self.properties != {}:
288
+ data['properties'] = self.properties
289
+ if self.unit_of_measurement is not None:
290
+ data['unitOfMeasurement'] = self.unit_of_measurement.__getstate__()
291
+ if self.observed_area is not None:
292
+ data['observedArea'] = self.observed_area
293
+ if self.phenomenon_time is not None:
294
+ data['phenomenonTime'] = utils.parse_datetime(self.phenomenon_time)
295
+ if self.result_time is not None:
296
+ data['resultTime'] = utils.parse_datetime(self.result_time)
297
+ if self.thing is not None:
298
+ data['Thing'] = self.thing.__getstate__()
299
+ if self.sensor is not None:
300
+ data['Sensor'] = self.sensor.__getstate__()
301
+ if self.observed_property is not None:
302
+ data['ObservedProperty'] = self.observed_property.__getstate__()
303
+ if self.observations is not None and len(self.observations.entities) > 0:
304
+ data['Observations'] = self.observations.__getstate__()
305
+ return data
306
+
307
+ def __setstate__(self, state):
308
+ super().__setstate__(state)
309
+ self.name = state.get("name", None)
310
+ self.description = state.get("description", None)
311
+ self.observation_type = state.get("observationType", None)
312
+ self.properties = state.get("properties", {})
313
+ if state.get("unitOfMeasurement", None) is not None:
314
+ self.unit_of_measurement = frost_sta_client.model.ext.unitofmeasurement.UnitOfMeasurement()
315
+ self.unit_of_measurement.__setstate__(state["unitOfMeasurement"])
316
+ if state.get("observedArea", None) is not None:
317
+ self.observed_area = frost_sta_client.utils.process_area(state["observedArea"])
318
+ if state.get("phenomenonTime", None) is not None:
319
+ self.phenomenon_time = state["phenomenonTime"]
320
+ if state.get("resultTime", None) is not None:
321
+ self.result_time = state["resultTime"]
322
+ if state.get("Thing", None) is not None:
323
+ self.thing = frost_sta_client.model.thing.Thing()
324
+ self.thing.__setstate__(state["Thing"])
325
+ if state.get("ObservedProperty", None) is not None:
326
+ self.observed_property = frost_sta_client.model.observedproperty.ObservedProperty()
327
+ self.observed_property.__setstate__(state["ObservedProperty"])
328
+ if state.get("Sensor", None) is not None:
329
+ self.sensor = frost_sta_client.model.sensor.Sensor()
330
+ self.sensor.__setstate__(state["Sensor"])
331
+ if state.get("Observations", None) is not None and isinstance(state["Observations"], list):
332
+ entity_class = entity_type.EntityTypes['Observation']['class']
333
+ self.observations = utils.transform_json_to_entity_list(state['Observations'], entity_class)
334
+ self.observations.next_link = state.get("Observations@iot.nextLink", None)
335
+ self.observations.count = state.get("Observations@iot.count", None)
336
+
337
+ def get_dao(self, service):
338
+ return DatastreamDao(service)
@@ -179,7 +179,7 @@ class FeatureOfInterest(entity.Entity):
179
179
  if self.feature is not None:
180
180
  data['feature'] = self.feature
181
181
  if self.observations is not None and len(self.observations.entities) > 0:
182
- data['Observations'] = self.observations.__gestate__()
182
+ data['Observations'] = self.observations.__getstate__()
183
183
  return data
184
184
 
185
185
  def __setstate__(self, state):
@@ -105,7 +105,7 @@ class HistoricalLocation(entity.Entity):
105
105
  if self.time is not None:
106
106
  data['time'] = utils.parse_datetime(self.time)
107
107
  if self.thing is not None:
108
- data['Thing'] = self.thing
108
+ data['Thing'] = self.thing.__getstate__()
109
109
  if self.locations is not None and len(self.locations.entities) > 0:
110
110
  data['Locations'] = self.locations.__getstate__()
111
111
  return data
@@ -218,9 +218,9 @@ class Location(entity.Entity):
218
218
  if self.location is not None:
219
219
  data['location'] = self.location
220
220
  if self.things is not None:
221
- data['Things'] = self.things
221
+ data['Things'] = self.things.__getstate__()
222
222
  if self.historical_locations is not None and len(self.historical_locations.entities) > 0:
223
- data['HistoricalLocation'] = self.historical_locations.__getstate__()
223
+ data['HistoricalLocations'] = self.historical_locations.__getstate__()
224
224
  return data
225
225
 
226
226
  def __setstate__(self, state):
@@ -290,13 +290,13 @@ class MultiDatastream(entity.Entity):
290
290
  if self.result_time is not None:
291
291
  data['resultTime'] = utils.parse_datetime(self.result_time)
292
292
  if self.thing is not None:
293
- data['Thing'] = self.thing
293
+ data['Thing'] = self.thing.__getstate__()
294
294
  if self.sensor is not None:
295
- data['Sensor'] = self.sensor
295
+ data['Sensor'] = self.sensor.__getstate__()
296
296
  if self.properties is not None and self.properties != {}:
297
297
  data['properties'] = self.properties
298
298
  if self.unit_of_measurements is not None and len(self.unit_of_measurements) > 0:
299
- data['unitOfMeasurements'] = self.unit_of_measurements
299
+ data['unitOfMeasurements'] = self.unit_of_measurements.__getstate__()
300
300
  if self.multi_observation_data_types is not None and len(self.multi_observation_data_types) > 0:
301
301
  data['multiObservationDataTypes'] = self.multi_observation_data_types
302
302
  if self.observed_properties is not None and len(self.observed_properties.entities) > 0:
@@ -184,7 +184,7 @@ class ObservedProperty(entity.Entity):
184
184
  if self.properties is not None and self.properties != {}:
185
185
  data['properties'] = self.properties
186
186
  if self.datastreams is not None and len(self.datastreams.entities) > 0:
187
- data['Datastream'] = self.datastreams.__getstate__()
187
+ data['Datastreams'] = self.datastreams.__getstate__()
188
188
  if self.multi_datastreams is not None and len(self.multi_datastreams.entities) > 0:
189
189
  data['MultiDatastreams'] = self.multi_datastreams.__getstate__()
190
190
  return data
@@ -98,16 +98,16 @@ class Task(entity.Entity):
98
98
  if self.creation_time is not None:
99
99
  data['creationTime'] = utils.parse_datetime(self.creation_time)
100
100
  if self.tasking_capability is not None:
101
- data['TaskingCapability'] = self.tasking_capability
101
+ data['TaskingCapability'] = self.tasking_capability.__getstate__()
102
102
  return data
103
103
 
104
104
  def __setstate__(self, state):
105
105
  super().__setstate__(state)
106
106
  self.tasking_parameters = state.get('taskingParameters', {})
107
107
  self.creation_time = state.get('creationTime', None)
108
- if state.get('taskingCapability', None) is not None:
108
+ if state.get('TaskingCapability', None) is not None:
109
109
  self.tasking_capability = frost_sta_client.model.tasking_capability.TaskingCapability()
110
- self.tasking_capability.__setstate__(state['taskingCapability'])
110
+ self.tasking_capability.__setstate__(state['TaskingCapability'])
111
111
 
112
112
  def get_dao(self, service):
113
113
  return TaskDao(service)
@@ -186,11 +186,11 @@ class TaskingCapability(entity.Entity):
186
186
  if self.properties is not None and self.properties != {}:
187
187
  data['properties'] = self.properties
188
188
  if self.thing is not None:
189
- data['Thing'] = self.thing
189
+ data['Thing'] = self.thing.__getstate__()
190
190
  if self.tasks is not None and len(self.tasks.entities) > 0:
191
191
  data['Tasks'] = self.tasks.__getstate__()
192
192
  if self.actuator is not None:
193
- data['Actuator'] = self.actuator
193
+ data['Actuator'] = self.actuator.__getstate__()
194
194
  return data
195
195
 
196
196
  def __setstate__(self, state):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: frost_sta_client
3
- Version: 1.1.49
3
+ Version: 1.1.50
4
4
  Summary: a client library to facilitate interaction with a FROST SensorThingsAPI Server
5
5
  Home-page: https://github.com/FraunhoferIOSB/FROST-Python-Client
6
6
  Author: Fraunhofer IOSB
@@ -1,5 +1,5 @@
1
1
  frost_sta_client/__init__.py,sha256=N0Rs6kwdPcpyz0p-Tfq2PYIAIIZsMmnSC0QXus_AmP0,1789
2
- frost_sta_client/__version__.py,sha256=ivlB8oJyiH--NyghDqejsdHw4ZWEylIr37Lk9oOIbh8,355
2
+ frost_sta_client/__version__.py,sha256=YlJvHmENV_oKBVhv9GKooi1RsV_49ZSoiI5TUbXJCi8,355
3
3
  frost_sta_client/utils.py,sha256=YA8B3SkG0RFFumSPPH65rJ2BHrADzKtcCKXVKAUVG54,4747
4
4
  frost_sta_client/dao/__init__.py,sha256=RKxbQ3WLVygWyz_Kb-SzO7CfUdffq7LqtJHcHSOHmgo,221
5
5
  frost_sta_client/dao/actuator.py,sha256=WxRjeetR50Pb9AbhCdtc1VRSl09pgzfA2DsPBBZy-3E,1099
@@ -16,18 +16,18 @@ frost_sta_client/dao/task.py,sha256=wRPoe8F3a8O8aAhgNtxvJm3LxD-oHUA6LilmXOZNJoM,
16
16
  frost_sta_client/dao/tasking_capability.py,sha256=cn5iG2aL2Zh74E8WRKpEfTRjupkY-4xK8xaIIIJ9waU,1138
17
17
  frost_sta_client/dao/thing.py,sha256=qPNrQjAmxrJ6dmJKVRr1eP6V9-zKVcIYr3t1DVNHtHo,1102
18
18
  frost_sta_client/model/__init__.py,sha256=LDj9AdnZ5Tjm0iZ2vTe_HyXxJ6x72GLsfKFNf5kww1U,627
19
- frost_sta_client/model/actuator.py,sha256=5foMfNehrDS0l5P_Gh6Ee5DlOS3mtRio0ULKRbZsJJw,7060
20
- frost_sta_client/model/datastream.py,sha256=FwscWHlpX5T_Zj_Prk1gxwZdMO-GLw9DivRnMluifkE,12903
19
+ frost_sta_client/model/actuator.py,sha256=D6MWkoXDVOHd54DDggcpSki1s8aqdHZHOPnhu-rCnYg,7060
20
+ frost_sta_client/model/datastream.py,sha256=tIp7egNtaLYzaNVeipVYbpA8KdULxY7704m_e-CDZto,12625
21
21
  frost_sta_client/model/entity.py,sha256=xf3EgxqUAg3Wk4nvZRNKkeFjYDMSS_47YPNVDVuFGO0,3671
22
- frost_sta_client/model/feature_of_interest.py,sha256=uMZN9o4udGoATmw6FTKKWZa5srfQFQpGvqNRjCul-uI,7186
23
- frost_sta_client/model/historical_location.py,sha256=UsPgUeYEa-ju_yyGSF0VrW0nVdTxMASsgfq7mB1iRZg,4615
24
- frost_sta_client/model/location.py,sha256=UoakCdiXRwuJ42RH4_pYrzKqAY4tnL0pPJ6CEKoNp04,9262
25
- frost_sta_client/model/multi_datastream.py,sha256=USZcs8dmDxI-D5RcX8ejbRavQQUhpBy1glWm7OP1PH8,14376
22
+ frost_sta_client/model/feature_of_interest.py,sha256=NYFIUZA6tVs6hK2oy7fOM4KCjLccHllIscg0M7Ycr2E,7187
23
+ frost_sta_client/model/historical_location.py,sha256=vZFv3NtKzTsFv1fMPwMSOeHc1QogiYcCu9lfNLvui68,4630
24
+ frost_sta_client/model/location.py,sha256=DX27Za-4ookaQlaQ6tsyDPkRW6RkFc6-oD7zvatJgGk,9278
25
+ frost_sta_client/model/multi_datastream.py,sha256=6rj_8NCSbxJ8afxg8O2eBzqDpe4xcNTKZaTb8AA3zY8,14421
26
26
  frost_sta_client/model/observation.py,sha256=YPNqH_CMfvaimkdAMtWW76-l5UIai32aej22pP3DnZ8,9221
27
- frost_sta_client/model/observedproperty.py,sha256=5ALOVMOSg4AB3CjX0vL_ddF0jKTJwBq89Nt9jE4eDcU,8346
27
+ frost_sta_client/model/observedproperty.py,sha256=NeyVBDm7xyZf8nWQvAshoytaKqwNv1Jw20FOMCTyU-Q,8347
28
28
  frost_sta_client/model/sensor.py,sha256=ric_gEhn8oQWE7TR4Dwo1ASGysZpWJ6gsrQT4n_sgn4,8644
29
- frost_sta_client/model/task.py,sha256=-rM6mvlzjFkcIdW8HSeNZtfdA4ZqDqjzGTmGBxg423I,4351
30
- frost_sta_client/model/tasking_capability.py,sha256=iEabvKXcYo5nSTI-oWPYc2YXu3b-D-m6llXx80mwySc,7755
29
+ frost_sta_client/model/task.py,sha256=xsNXokC2Z9GLdn9W_c9erC_yj3Duz_p5EY20HLhxX_o,4366
30
+ frost_sta_client/model/tasking_capability.py,sha256=3aznDKyvzO4VMbuz4dLYY1oK9Ggk8fy18p9T13y05PU,7785
31
31
  frost_sta_client/model/thing.py,sha256=1F-mkQPML5mf6NkzXswuTJr8nGnDV1u8GYNj8YtNcl0,13257
32
32
  frost_sta_client/model/ext/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
33
  frost_sta_client/model/ext/data_array_document.py,sha256=Szvv4iHIHqQsost-ASInoTHYH7qc6qjMkgSYXJu-iYE,2201
@@ -40,8 +40,8 @@ frost_sta_client/query/query.py,sha256=hXd-ffYf2HDZ5aqVA5lW5XtoijIr4-4mTfevdRDz2
40
40
  frost_sta_client/service/__init__.py,sha256=au1GqHe1OB7Iq-i90plqmIrH-7wBE7ogDoQ2uX03Fj0,109
41
41
  frost_sta_client/service/auth_handler.py,sha256=qahYUK7Z0kGvbUcdtpodIA9sngYCfJz2jqKpLVGA8Z4,1117
42
42
  frost_sta_client/service/sensorthingsservice.py,sha256=H2wM4v5oPvJ6eBfvdkbYyLI4V1vaWpbAuq-Q_fGo3-A,4621
43
- frost_sta_client-1.1.49.dist-info/licenses/LICENSE,sha256=LPNKwDiu5awG-TPd0dqYJuC7k4PBPY4LCI_O0LSpW1s,7814
44
- frost_sta_client-1.1.49.dist-info/METADATA,sha256=5-EuYzZh_RwqShdQaV5Bmsm9nCsb-Z0cUO3GjBUiKWk,5905
45
- frost_sta_client-1.1.49.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
46
- frost_sta_client-1.1.49.dist-info/top_level.txt,sha256=c35-3D_K1E_y8fcadqI3j6kGQ7HBrkOqCNie5Rv64KI,17
47
- frost_sta_client-1.1.49.dist-info/RECORD,,
43
+ frost_sta_client-1.1.50.dist-info/licenses/LICENSE,sha256=LPNKwDiu5awG-TPd0dqYJuC7k4PBPY4LCI_O0LSpW1s,7814
44
+ frost_sta_client-1.1.50.dist-info/METADATA,sha256=_puhN-FXpb5axOVuwtPXbSTy2aprSKXWeOTdx_B3ONw,5905
45
+ frost_sta_client-1.1.50.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
46
+ frost_sta_client-1.1.50.dist-info/top_level.txt,sha256=c35-3D_K1E_y8fcadqI3j6kGQ7HBrkOqCNie5Rv64KI,17
47
+ frost_sta_client-1.1.50.dist-info/RECORD,,