@@ -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
0 commit comments