Skip to content

Commit eaa3743

Browse files
committed
Retrieve a lazy-loaded dataset when setting one of its paramters
1 parent c1dfee3 commit eaa3743

File tree

5 files changed

+36
-8
lines changed

5 files changed

+36
-8
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# Changelog
22

3+
## v1.0.34 (2019-11-11)
4+
Retrieve a lazy-loaded dataset when setting one of its paramters.
5+
36
## v1.0.33 (2019-10-17)
47

58
* A default timeout of 10" on connection and 60" on silence has been added to all the API calls

ravenpackapi/core.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from ravenpackapi.utils.date_formats import as_datetime_str
1616

1717
_VALID_METHODS = ('get', 'post', 'put', 'delete')
18-
VERSION = '1.0.33'
18+
VERSION = '1.0.34'
1919

2020
logger = logging.getLogger("ravenpack.core")
2121

ravenpackapi/models/dataset.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ def __setattr__(self, field, value):
7575
if field == 'id':
7676
field = 'uuid'
7777
if field in Dataset._VALID_FIELDS:
78+
self._lazyload()
7879
super(Dataset, self).__setattr__(field, value)
7980
else:
8081
object.__setattr__(self, field, value)
@@ -88,6 +89,12 @@ def __delitem__(self, field):
8889
def id(self): # an alias for the dataset unique id
8990
return self.uuid
9091

92+
def _lazyload(self):
93+
if (getattr(self, '_lazy_retrieve_on_get', False) # dynamic, we check this also during object creation
94+
and self.uuid
95+
):
96+
self.get_from_server() # get the missing fields
97+
9198
def __getattribute__(self, field):
9299
""" Getting attributes we may trigger a data refresh from the server """
93100
if field == 'id': # id is an alias for uuid
@@ -99,11 +106,8 @@ def __getattribute__(self, field):
99106

100107
if field in Dataset._VALID_FIELDS and field != 'uuid':
101108
value = super(Dataset, self).__getattribute__(field)
102-
if (value is None
103-
and self._lazy_retrieve_on_get
104-
and self.uuid
105-
):
106-
self.get_from_server() # get the missing fields
109+
if value is None:
110+
self._lazyload()
107111
return super(Dataset, self).__getattribute__(field)
108112

109113
def as_dict(self):
@@ -130,9 +134,9 @@ def get_from_server(self, force=False):
130134
response = self.api.request(
131135
endpoint="/datasets/{dataset_uuid}".format(dataset_uuid=dataset_id),
132136
)
137+
self._lazy_retrieve_on_get = False # we got everything from the server
133138
for field, value in response.json().items():
134139
setattr(self, field, value)
135-
self._lazy_retrieve_on_get = False # we got everything from the server
136140
return self.as_dict()
137141

138142
@api_method

ravenpackapi/tests/test_dataset_update.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,24 @@ def test_create_and_update(self):
3737
dataset.delete()
3838

3939
assert delete_all_datasets_by_name(self.api, self.dataset_name) == 0
40+
41+
def test_simple_update(self):
42+
filters = {"rp_entity_id": {"$in": ['D8442A']}}
43+
ds = self.api.create_dataset(
44+
Dataset(
45+
name=self.dataset_name,
46+
filters=filters, # a dataset with a filter
47+
)
48+
)
49+
assert ds._lazy_retrieve_on_get is False
50+
51+
dataset_id = ds.id
52+
53+
ds = self.api.get_dataset(dataset_id) # retrieve the dataset
54+
assert ds._lazy_retrieve_on_get is True # it still have to be lazy loaded here
55+
ds.filters = {"rp_entity_id": {"$in": ["228D42"]}} # update the dataset ***
56+
ds.save()
57+
58+
for r in ds.json('2019-01-01', '2019-01-02'):
59+
assert r['rp_entity_id'] == '228D42', "Expecting entity to be 228D42 - got %s" % r['rp_entity_id']
60+
break

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from setuptools import setup, find_packages
22

3-
VERSION = '1.0.33'
3+
VERSION = '1.0.34'
44

55
with open('README.rst') as readme_file:
66
readme = readme_file.read()

0 commit comments

Comments
 (0)