Skip to content

Commit b34f560

Browse files
author
Patrick J. McNerthney
committed
Fix resource specific unknownsFatal, autoReady, and usages settings
1 parent b06c8e8 commit b34f560

File tree

1 file changed

+20
-3
lines changed

1 file changed

+20
-3
lines changed

crossplane/pythonic/composite.py

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -140,12 +140,17 @@ def __iter__(self):
140140
class 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

177184
class Resource:
@@ -276,12 +283,17 @@ def ready(self, ready):
276283
class 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

Comments
 (0)