@@ -140,12 +140,17 @@ def __iter__(self):
140140class Resources :
141141 def __init__ (self , composite ):
142142 self .__dict__ ['_composite' ] = composite
143+ self .__dict__ ['_cache' ] = {}
143144
144145 def __getattr__ (self , key ):
145146 return self [key ]
146147
147148 def __getitem__ (self , key ):
148- return Resource (self ._composite , key )
149+ if key in self ._cache :
150+ return self ._cache [key ]
151+ resource = Resource (self ._composite , key )
152+ self ._cache [key ] = resource
153+ return resource
149154
150155 def __bool__ (self ):
151156 return bool (self ._composite .response .desired .resources )
@@ -165,13 +170,15 @@ def __setattr__(self, key, resource):
165170
166171 def __setitem__ (self , key , resource ):
167172 self ._composite .response .desired .resources [key ].resource = resource
173+ self ._cache .pop (key , None )
168174
169175 def __delattr__ (self , key ):
170176 del self [key ]
171177
172178 def __delitem__ (self , key ):
173179 if key in self ._composite .response .desired .resources :
174180 del self ._composite .response .desired .resources [key ]
181+ self ._cache .pop (key , None )
175182
176183
177184class Resource :
@@ -276,12 +283,17 @@ def ready(self, ready):
276283class Requireds :
277284 def __init__ (self , composite ):
278285 self ._composite = composite
286+ self ._cache = {}
279287
280288 def __getattr__ (self , key ):
281289 return self [key ]
282290
283291 def __getitem__ (self , key ):
284- return RequiredResources (self ._composite , key )
292+ if key in self ._cache :
293+ return self ._cache [key ]
294+ required = RequiredResources (self ._composite , key )
295+ self ._cache [key ] = required
296+ return required
285297
286298 def __bool__ (self ):
287299 return bool (len (self ))
@@ -316,6 +328,7 @@ def __init__(self, composite, name):
316328 self .name = name
317329 self ._selector = composite .response .requirements .extra_resources [name ]
318330 self ._resources = composite .request .extra_resources [name ]
331+ self ._cache = {}
319332
320333 def __call__ (self , apiVersion = _notset , kind = _notset , namespace = _notset , name = _notset , labels = _notset ):
321334 self ._selector ()
@@ -378,7 +391,11 @@ def matchLabels(self, labels):
378391 self ._selector .match_labels .labels [entry [0 ]] = entry [1 ]
379392
380393 def __getitem__ (self , ix ):
381- return RequiredResource (self .name , ix , self ._resources .items [ix ])
394+ if ix in self ._cache :
395+ return self ._cache [ix ]
396+ resource = RequiredResource (self .name , ix , self ._resources .items [ix ])
397+ self ._cache [ix ] = resource
398+ return resource
382399
383400 def __bool__ (self ):
384401 return bool (self ._resources .items )
0 commit comments