@@ -23,7 +23,7 @@ def __init__(self, parent=None, instance_klass=None,
2323 entity_name(str): Entity name - required for extraction
2424 entity_collection(str): Collection name - required for extraction
2525 """
26- self ._parent = parent
26+ self .parent = parent
2727 self ._instance_klass = instance_klass
2828 self ._entity_name = entity_name
2929 if entity_collection is None and entity_name is not None :
@@ -45,14 +45,6 @@ def threescale_client(self) -> 'ThreeScaleClient':
4545 """
4646 return self .parent .threescale_client
4747
48- @property
49- def parent (self ) -> 'DefaultResource' :
50- """ Instance of the parent resource
51- Returns(DefaultResource): Parent of the client is an subclass of the default resource
52-
53- """
54- return self ._parent
55-
5648 @property
5749 def rest (self ) -> 'RestApiClient' :
5850 """Rest API client for the 3scale instance
@@ -154,7 +146,7 @@ def __getitem__(self, selector: Union[int, 'str']) -> 'DefaultResource':
154146 def __len__ (self ) -> int :
155147 return len (self ._list ())
156148
157- def __iter__ (self ) -> Iterator ['CRUDResource ' ]:
149+ def __iter__ (self ) -> Iterator ['DefaultResource ' ]:
158150 return next (iter (self ._list ()))
159151
160152 def read (self , entity_id : int = None ) -> 'DefaultResource' :
@@ -190,6 +182,7 @@ def select(self, predicate, **kwargs) -> List['DefaultResource']:
190182
191183 def select_by (self , ** params ) -> List ['DefaultResource' ]:
192184 """Select by params - logical and
185+ Usage example: select_by(role='admin')
193186 Args:
194187 **params: params used for selection
195188 Returns: List of resources
@@ -289,6 +282,10 @@ def threescale_client(self) -> 'ThreeScaleClient':
289282 def parent (self ) -> 'DefaultResource' :
290283 return self .client .parent
291284
285+ @parent .setter
286+ def parent (self , parent ):
287+ self .client .parent = parent
288+
292289 @property
293290 def entity_name (self ) -> Optional [str ]:
294291 return self [self ._entity_name ]
@@ -310,6 +307,10 @@ def client(self) -> DefaultClient:
310307 def entity_id (self ) -> int :
311308 return self ._entity_id or self ._entity .get ('id' )
312309
310+ @entity_id .setter
311+ def entity_id (self , value ):
312+ self ._entity_id = value
313+
313314 def __getitem__ (self , item : str ):
314315 return self .entity .get (item )
315316
@@ -345,9 +346,13 @@ def set(self, item: str, value: Any):
345346 self .entity [item ] = value
346347
347348 def _lazy_load (self , ** kwargs ) -> 'DefaultResource' :
348- if not self ._entity :
349+ if self ._entity is None :
349350 # Lazy load the entity
350- self ._entity = self .fetch (** kwargs )
351+ fetched = self .fetch (** kwargs )
352+ if isinstance (fetched , dict ):
353+ self ._entity = fetched
354+ else :
355+ self ._entity = fetched ._entity
351356 return self
352357
353358 def read (self , ** kwargs ) -> 'DefaultResource' :
@@ -362,13 +367,16 @@ def exists(self, **kwargs) -> bool:
362367 return self .client .exists (entity_id = self .entity_id , ** kwargs )
363368
364369 def delete (self , ** kwargs ):
365- self .client .delete (entity_id = self .entity_id , ** kwargs )
370+ self .client .delete (entity_id = self .entity_id , resource = self , ** kwargs )
366371
367372 def update (self , params : dict = None , ** kwargs ) -> 'DefaultResource' :
368373 new_params = {** self .entity }
369374 if params :
370375 new_params .update (params )
371- new_entity = self .client .update (entity_id = self .entity_id , params = new_params , ** kwargs )
376+ new_entity = self .client .update (entity_id = self .entity_id ,
377+ params = new_params ,
378+ resource = self ,
379+ ** kwargs )
372380 self ._entity = new_entity .entity
373381 return self
374382
0 commit comments