Skip to content

Commit 290f013

Browse files
committed
Merge branch 'allow_user_defined_IDs' of https://github.com/tfeseker/FROST-Python-Client into allow_user_defined_IDs
2 parents a96a508 + f035a18 commit 290f013

4 files changed

Lines changed: 14 additions & 12 deletions

File tree

frost_sta_client/__version__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
__title__ = 'frost_sta_client'
2-
__version__ = '1.1.35'
2+
__version__ = '1.1.36'
33
__license__ = 'LGPL3'
44
__author__ = 'Katharina Emde'
55
__copyright__ = 'Fraunhofer IOSB'

frost_sta_client/model/multi_datastream.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,7 @@ def __setstate__(self, state):
342342
self.multi_observation_data_types.append(value)
343343
if state.get('ObservedProperties', None) is not None and isinstance(state['ObservedProperties'], list):
344344
entity_class = entity_type.EntityTypes['ObservedProperty']['class']
345-
self.observed_properties = utils.transform_json_to_entity_list(state['ObservedProperty'], entity_class)
345+
self.observed_properties = utils.transform_json_to_entity_list(state['ObservedProperties'], entity_class)
346346
self.observed_properties.next_link = state.get('ObservedProperties@iot.nextLink')
347347
self.observed_properties.count = state.get('ObservedProperties@iot.count')
348348
if state.get('Observations', None) is not None and isinstance(state['Observations'], list):

frost_sta_client/query/query.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@
1717
import frost_sta_client.utils
1818
import frost_sta_client.model.ext.entity_list
1919

20-
from furl import furl
20+
2121
import logging
22-
import json
2322
import requests
23+
from requests.exceptions import JSONDecodeError
2424

2525

2626
class Query:
@@ -153,7 +153,7 @@ def list(self, callback=None, step_size=None):
153153
logging.debug('Received response: {} from {}'.format(response.status_code, url))
154154
try:
155155
json_response = response.json()
156-
except ValueError:
156+
except JSONDecodeError:
157157
raise ValueError('Cannot find json in http response')
158158
entity_list = frost_sta_client.utils.transform_json_to_entity_list(json_response, self.entity_class)
159159
entity_list.set_service(self.service)

frost_sta_client/utils.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from dateutil.parser import isoparse
2020
import geojson
2121
import logging
22+
import sys
2223
import frost_sta_client.model.ext.entity_list
2324

2425

@@ -33,12 +34,15 @@ def transform_entity_to_json_dict(entity):
3334
json_str = jsonpickle.encode(entity, unpicklable=False)
3435
return jsonpickle.decode(json_str)
3536

37+
def class_from_string(string):
38+
module_name, class_name = string.rsplit(".", 1)
39+
return getattr(sys.modules[module_name], class_name)
3640

3741
def transform_json_to_entity(json_response, entity_class):
38-
decodable_str = '{\'py/object\': \'' + entity_class + '\', \'py/state\': ' \
39-
+ jsonpickle.encode(json_response, unpicklable=False) + '}'
40-
return jsonpickle.decode(decodable_str)
41-
42+
cl = class_from_string(entity_class)
43+
obj = cl()
44+
obj.__setstate__(json_response)
45+
return obj
4246

4347
def transform_json_to_entity_list(json_response, entity_class):
4448
entity_list = frost_sta_client.model.ext.entity_list.EntityList(entity_class)
@@ -54,9 +58,7 @@ def transform_json_to_entity_list(json_response, entity_class):
5458
response_list = json_response
5559
else:
5660
raise ValueError("expected json as a dict or list to transform into entity list")
57-
for item in response_list:
58-
result_list.append(transform_json_to_entity(item, entity_list.entity_class))
59-
entity_list.entities = result_list
61+
entity_list.entities = [transform_json_to_entity(item, entity_list.entity_class) for item in response_list]
6062
return entity_list
6163

6264

0 commit comments

Comments
 (0)