crossplane-function-pythonic 0.6.2__py3-none-any.whl → 0.6.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
-
2
1
  import datetime
2
+
3
3
  from google.protobuf.duration_pb2 import Duration
4
4
 
5
5
  from . import (
@@ -8,7 +8,6 @@ from . import (
8
8
  )
9
9
  from .proto.v1 import run_function_pb2 as fnv1
10
10
 
11
-
12
11
  _notset = object()
13
12
 
14
13
 
@@ -16,7 +15,7 @@ class ConnectionSecret:
16
15
  def __get__(self, composite, objtype=None):
17
16
  if composite.crossplane_v1:
18
17
  return composite.spec.writeConnectionSecretToRef
19
- secret = getattr(composite, '_connectionSecret', None)
18
+ secret = getattr(composite, "_connectionSecret", None)
20
19
  if not secret:
21
20
  secret = protobuf.Map()
22
21
  for key, value in composite.request.input.writeConnectionSecretToRef:
@@ -27,7 +26,9 @@ class ConnectionSecret:
27
26
  def __set__(self, composite, values):
28
27
  if composite.crossplane_v1:
29
28
  if values != composite.spec.writeConnectionSecretToRef:
30
- raise NotImplementedError('Connection Secret cannot be set in Crossplane V1')
29
+ raise NotImplementedError(
30
+ "Connection Secret cannot be set in Crossplane V1"
31
+ )
31
32
  return
32
33
  secret = protobuf.Map()
33
34
  for key, value in values:
@@ -37,7 +38,7 @@ class ConnectionSecret:
37
38
 
38
39
  class Connection:
39
40
  def __get__(self, composite, objtype=None):
40
- connection = getattr(composite, '_connection', None)
41
+ connection = getattr(composite, "_connection", None)
41
42
  if not connection:
42
43
  connection = _Connection(composite)
43
44
  composite._connection = connection
@@ -53,7 +54,9 @@ class Connection:
53
54
  class TTL:
54
55
  def __get__(self, composite, objtype=None):
55
56
  if composite.response.meta.ttl.nanos:
56
- return float(composite.response.meta.ttl.seconds) + (float(composite.response.meta.ttl.nanos) / 1000000000.0)
57
+ return float(composite.response.meta.ttl.seconds) + (
58
+ float(composite.response.meta.ttl.nanos) / 1000000000.0
59
+ )
57
60
  return int(composite.response.meta.ttl.seconds)
58
61
 
59
62
  def __set__(self, composite, ttl):
@@ -65,14 +68,16 @@ class TTL:
65
68
  if ttl.is_integer():
66
69
  composite.response.meta.ttl.nanos = 0
67
70
  else:
68
- composite.response.meta.ttl.nanos = int((ttl - int(composite.response.meta.ttl.seconds)) * 1000000000)
71
+ composite.response.meta.ttl.nanos = int(
72
+ (ttl - int(composite.response.meta.ttl.seconds)) * 1000000000
73
+ )
69
74
  else:
70
- raise ValueError('ttl must be an int or float')
75
+ raise TypeError("ttl must be an int or float")
71
76
 
72
77
 
73
78
  class Ready:
74
79
  def __get__(self, composite, objtype=None):
75
- if hasattr(composite, '_ready'):
80
+ if hasattr(composite, "_ready"):
76
81
  return composite._ready
77
82
  if composite.desired._parent.ready == fnv1.Ready.READY_TRUE:
78
83
  return True
@@ -93,7 +98,9 @@ class Ready:
93
98
  class BaseComposite:
94
99
  def __init__(self, crossplane_v1, request, logger):
95
100
  self.crossplane_v1 = crossplane_v1
96
- self.request = protobuf.Message(None, 'request', request.DESCRIPTOR, request, 'Function Request')
101
+ self.request = protobuf.Message(
102
+ None, "request", request.DESCRIPTOR, request, "Function Request"
103
+ )
97
104
  response = fnv1.RunFunctionResponse(
98
105
  meta=fnv1.ResponseMeta(
99
106
  tag=request.meta.tag,
@@ -104,15 +111,17 @@ class BaseComposite:
104
111
  desired=request.desired,
105
112
  context=request.context,
106
113
  )
107
- self.response = protobuf.Message(None, 'response', response.DESCRIPTOR, response)
114
+ self.response = protobuf.Message(
115
+ None, "response", response.DESCRIPTOR, response
116
+ )
108
117
  self.logger = logger
109
118
  self.capabilities = Capabilities(self.request.meta.capabilities)
110
119
  self.parameters = self.request.input.parameters
111
120
  self.credentials = Credentials(self.request)
112
121
  self.context = self.response.context
113
- self.environment = self.context['apiextensions.crossplane.io/environment']
122
+ self.environment = self.context["apiextensions.crossplane.io/environment"]
114
123
  self.requireds = Requireds(self)
115
- self.watched = self.requireds['ops.crossplane.io/watched-resource'][0]
124
+ self.watched = self.requireds["ops.crossplane.io/watched-resource"][0]
116
125
  self.schemas = Schemas(self)
117
126
  self.resources = Resources(self)
118
127
  self.autoReady = True
@@ -131,7 +140,7 @@ class BaseComposite:
131
140
  self.output = self.response.output
132
141
  self.conditions = Conditions(observed, self.response)
133
142
  self.results = Results(self.response)
134
- self.events = Results(self.response) # Deprecated, use self.results
143
+ self.events = Results(self.response) # Deprecated, use self.results
135
144
 
136
145
  ttl = TTL()
137
146
  connectionSecret = ConnectionSecret()
@@ -151,7 +160,9 @@ class Capabilities:
151
160
 
152
161
  @property
153
162
  def requireds(self):
154
- return fnv1.CAPABILITY_REQUIRED_RESOURCES in self._capabilities if self else None
163
+ return (
164
+ fnv1.CAPABILITY_REQUIRED_RESOURCES in self._capabilities if self else None
165
+ )
155
166
 
156
167
  @property
157
168
  def credentials(self):
@@ -168,7 +179,7 @@ class Capabilities:
168
179
 
169
180
  class Credentials:
170
181
  def __init__(self, request):
171
- self.__dict__['_request'] = request
182
+ self.__dict__["_request"] = request
172
183
 
173
184
  def __getattr__(self, key):
174
185
  return self[key]
@@ -192,7 +203,7 @@ class Credentials:
192
203
 
193
204
  class Credential:
194
205
  def __init__(self, credential):
195
- self.__dict__['_credential'] = credential
206
+ self.__dict__["_credential"] = credential
196
207
 
197
208
  def __getattr__(self, key):
198
209
  return self[key]
@@ -216,8 +227,8 @@ class Credential:
216
227
 
217
228
  class Resources:
218
229
  def __init__(self, composite):
219
- self.__dict__['_composite'] = composite
220
- self.__dict__['_cache'] = {}
230
+ self.__dict__["_composite"] = composite
231
+ self.__dict__["_cache"] = {}
221
232
 
222
233
  def __getattr__(self, key):
223
234
  return self[key]
@@ -272,11 +283,13 @@ class Resource:
272
283
  self.usages = None
273
284
  self.unknownsFatal = None
274
285
 
275
- def __call__(self, kind=_notset, apiVersion=_notset, namespace=_notset, name=_notset):
286
+ def __call__(
287
+ self, kind=_notset, apiVersion=_notset, namespace=_notset, name=_notset
288
+ ):
276
289
  self.desired()
277
290
  if kind != _notset:
278
291
  # Allow for apiVersion in the first arg and kind in the second arg
279
- if '/' in kind or kind == 'v1':
292
+ if "/" in kind or kind == "v1":
280
293
  if apiVersion != _notset:
281
294
  self.kind = apiVersion
282
295
  apiVersion = kind
@@ -308,16 +321,16 @@ class Resource:
308
321
 
309
322
  @property
310
323
  def externalName(self):
311
- name = self.metadata.annotations['crossplane.io/external-name']
324
+ name = self.metadata.annotations["crossplane.io/external-name"]
312
325
  if not name:
313
- name = self.observed.metadata.annotations['crossplane.io/external-name']
326
+ name = self.observed.metadata.annotations["crossplane.io/external-name"]
314
327
  if name:
315
328
  self.externalName = name
316
329
  return name
317
330
 
318
331
  @externalName.setter
319
332
  def externalName(self, name):
320
- self.metadata.annotations['crossplane.io/external-name'] = name
333
+ self.metadata.annotations["crossplane.io/external-name"] = name
321
334
 
322
335
  @property
323
336
  def metadata(self):
@@ -358,14 +371,16 @@ class Resource:
358
371
 
359
372
  @property
360
373
  def ready(self):
361
- if not hasattr(self, '_ready'):
374
+ if not hasattr(self, "_ready"):
362
375
  if self.desired._parent.ready == fnv1.Ready.READY_TRUE:
363
- self._ready = True
376
+ self._ready = True
364
377
  elif self.desired._parent.ready == fnv1.Ready.READY_FALSE:
365
378
  self._ready = False
366
379
  else:
367
380
  self._ready = None
368
- if self.autoReady or (self.autoReady is None and self._composite.autoReady):
381
+ if self.autoReady or (
382
+ self.autoReady is None and self._composite.autoReady
383
+ ):
369
384
  ready = auto_ready.resource_ready(self)
370
385
  if ready:
371
386
  self._ready = ready
@@ -382,7 +397,7 @@ class Resource:
382
397
  else:
383
398
  self.desired._parent.ready = fnv1.Ready.READY_FALSE
384
399
 
385
- def setReadyCondition(self, type='Ready'):
400
+ def setReadyCondition(self, type="Ready"):
386
401
  condition = self.conditions[type]
387
402
  if condition.status:
388
403
  self.ready = self.observed.metadata.name
@@ -413,6 +428,7 @@ class Resource:
413
428
  field = resource.status.notReady
414
429
  self.metadata.annotations[f"pythonic.dependency/{resource.name}"] = field
415
430
 
431
+
416
432
  class Requireds:
417
433
  def __init__(self, composite):
418
434
  self._composite = composite
@@ -485,11 +501,18 @@ class RequiredResources:
485
501
  self._resources = composite.request.required_resources[name]
486
502
  self._cache = {}
487
503
 
488
- def __call__(self, kind=_notset, apiVersion=_notset, namespace=_notset, name=_notset, labels=_notset):
504
+ def __call__(
505
+ self,
506
+ kind=_notset,
507
+ apiVersion=_notset,
508
+ namespace=_notset,
509
+ name=_notset,
510
+ labels=_notset,
511
+ ):
489
512
  self._selector()
490
513
  if kind != _notset:
491
514
  # Allow for apiVersion in the first arg and kind in the second arg
492
- if '/' in kind or kind == 'v1':
515
+ if "/" in kind or kind == "v1":
493
516
  if apiVersion != _notset:
494
517
  self.kind = apiVersion
495
518
  apiVersion = kind
@@ -617,9 +640,7 @@ class Schemas:
617
640
  def __contains__(self, key):
618
641
  if key in self._composite.request.required_schemas:
619
642
  return True
620
- if key in self._composite.response.requirements.schemas:
621
- return True
622
- return False
643
+ return key in self._composite.response.requirements.schemas
623
644
 
624
645
  def __iter__(self):
625
646
  names = set()
@@ -641,7 +662,7 @@ class Schema:
641
662
  self._selector()
642
663
  if kind != _notset:
643
664
  # Allow for apiVersion in the first arg and kind in the second arg
644
- if '/' in kind or kind == 'v1':
665
+ if "/" in kind or kind == "v1":
645
666
  if apiVersion != _notset:
646
667
  self.kind = apiVersion
647
668
  apiVersion = kind
@@ -695,22 +716,21 @@ class Schema:
695
716
  return item in self._schema
696
717
 
697
718
  def __iter__(self):
698
- for key, value in self._schema:
699
- yield key, value
719
+ yield from self._schema
700
720
 
701
721
  def __hash__(self):
702
722
  return hash(self._schema)
703
723
 
704
724
  def __eq__(self, other):
705
- if instance(other, Schema):
725
+ if isinstance(other, Schema):
706
726
  other = other._schema
707
727
  return self._schema == other
708
728
 
709
729
  def __str__(self):
710
730
  return str(self._schema)
711
731
 
712
- def __format__(self, spec='yaml'):
713
- return format(self,_schema, spec)
732
+ def __format__(self, spec="yaml"):
733
+ return format(self._schema, spec)
714
734
 
715
735
 
716
736
  class Conditions:
@@ -725,12 +745,9 @@ class Conditions:
725
745
  return Condition(self, type)
726
746
 
727
747
  def __bool__(self):
728
- if self._response is not None:
729
- if self._response.conditions:
730
- return True
731
- if self._observed.resource.status.conditions:
748
+ if self._response is not None and self._response.conditions:
732
749
  return True
733
- return False
750
+ return bool(self._observed.resource.status.conditions)
734
751
 
735
752
  def __len__(self):
736
753
  return len(self._types())
@@ -760,14 +777,14 @@ class Condition(protobuf.ProtobufValue):
760
777
  def _protobuf_value(self):
761
778
  status = self.status
762
779
  value = {
763
- 'type': self.type,
764
- 'status': 'Unknown' if status is None else str(status),
765
- 'reason': self.reason or '',
766
- 'message': self.message or '',
780
+ "type": self.type,
781
+ "status": "Unknown" if status is None else str(status),
782
+ "reason": self.reason or "",
783
+ "message": self.message or "",
767
784
  }
768
785
  time = self.lastTransitionTime
769
786
  if time:
770
- value['lastTransitionTime'] = time.isoformat().replace('+00:00', 'Z')
787
+ value["lastTransitionTime"] = time.isoformat().replace("+00:00", "Z")
771
788
  return value
772
789
 
773
790
  def __call__(self, reason=_notset, message=_notset, status=_notset, claim=_notset):
@@ -786,9 +803,9 @@ class Condition(protobuf.ProtobufValue):
786
803
  def status(self):
787
804
  condition = self._find_condition()
788
805
  if condition:
789
- if condition.status in (fnv1.Status.STATUS_CONDITION_TRUE, 'True', True):
806
+ if condition.status in (fnv1.Status.STATUS_CONDITION_TRUE, "True", True):
790
807
  return True
791
- if condition.status in (fnv1.Status.STATUS_CONDITION_FALSE, 'False', False):
808
+ if condition.status in (fnv1.Status.STATUS_CONDITION_FALSE, "False", False):
792
809
  return False
793
810
  return None
794
811
 
@@ -804,7 +821,6 @@ class Condition(protobuf.ProtobufValue):
804
821
  else:
805
822
  condition.status = fnv1.Status.STATUS_CONDITION_FALSE
806
823
 
807
-
808
824
  @property
809
825
  def reason(self):
810
826
  condition = self._find_condition()
@@ -862,7 +878,7 @@ class Condition(protobuf.ProtobufValue):
862
878
  return observed
863
879
  return None
864
880
  if self._conditions._response is None:
865
- raise ValueError('Condition is read only')
881
+ raise ValueError("Condition is read only")
866
882
  condition = fnv1.Condition()
867
883
  condition.type = self.type
868
884
  return self._conditions._response.conditions.append(condition)
@@ -984,14 +1000,18 @@ class Result:
984
1000
 
985
1001
  @property
986
1002
  def claim(self):
987
- return bool(self) and self._result.target == fnv1.Target.TARGET_COMPOSITE_AND_CLAIM
1003
+ return (
1004
+ bool(self) and self._result.target == fnv1.Target.TARGET_COMPOSITE_AND_CLAIM
1005
+ )
988
1006
 
989
1007
  @claim.setter
990
1008
  def claim(self, claim):
991
1009
  if bool(self):
992
1010
  if claim:
993
1011
  self._result.target = fnv1.Target.TARGET_COMPOSITE_AND_CLAIM
994
- elif claim == None or (isinstance(claim, protobuf.Value) and claim._isUnknown):
1012
+ elif claim == None or (
1013
+ isinstance(claim, protobuf.Value) and claim._isUnknown
1014
+ ):
995
1015
  self._result.target = fnv1.Target.TARGET_UNSPECIFIED
996
1016
  else:
997
1017
  self._result.target = fnv1.Target.TARGET_COMPOSITE
@@ -999,14 +1019,14 @@ class Result:
999
1019
 
1000
1020
  class _Connection:
1001
1021
  def __init__(self, composite):
1002
- self._set_attribute('_composite', composite)
1022
+ self._set_attribute("_composite", composite)
1003
1023
 
1004
1024
  def _set_attribute(self, key, value):
1005
1025
  self.__dict__[key] = value
1006
1026
 
1007
1027
  @property
1008
1028
  def _resource_name(self):
1009
- return self._composite.connectionSecret.resourceName or 'connection-secret'
1029
+ return self._composite.connectionSecret.resourceName or "connection-secret"
1010
1030
 
1011
1031
  @property
1012
1032
  def observed(self):
@@ -1028,14 +1048,15 @@ class _Connection:
1028
1048
  return key in self._composite.response.desired.composite.connection_details
1029
1049
 
1030
1050
  def __iter__(self):
1031
- for key, value in self._composite.response.desired.composite.connection_details:
1032
- yield key, value
1051
+ yield from self._composite.response.desired.composite.connection_details
1033
1052
 
1034
1053
  def __str__(self):
1035
1054
  return format(self)
1036
1055
 
1037
- def __format__(self, spec='yaml'):
1038
- return format(self._composite.response.desired.composite.connection_details, spec)
1056
+ def __format__(self, spec="yaml"):
1057
+ return format(
1058
+ self._composite.response.desired.composite.connection_details, spec
1059
+ )
1039
1060
 
1040
1061
  def __call__(self, **kwargs):
1041
1062
  self._composite.response.desired.composite.connection_details(**kwargs)
@@ -1052,9 +1073,8 @@ class _Connection:
1052
1073
  if not isinstance(value, str):
1053
1074
  if value is None:
1054
1075
  return
1055
- if isinstance(value, (protobuf.FieldMessage, protobuf.Value)):
1056
- if not value:
1057
- return
1076
+ if isinstance(value, (protobuf.FieldMessage, protobuf.Value)) and not value:
1077
+ return
1058
1078
  value = str(value)
1059
1079
  self._composite.response.desired.composite.connection_details[key] = value
1060
1080
  if self._composite.crossplane_v1 or not self._composite.connectionSecret.name:
@@ -1062,15 +1082,20 @@ class _Connection:
1062
1082
  if self._resource_name in self._composite.resources:
1063
1083
  secret = self._composite.resources[self._resource_name]
1064
1084
  else:
1065
- secret = self._composite.resources[self._resource_name]('v1', 'Secret')
1066
- if self._composite.connectionSecret.name and len(self._composite.connectionSecret.name):
1085
+ secret = self._composite.resources[self._resource_name]("v1", "Secret")
1086
+ if self._composite.connectionSecret.name and len(
1087
+ self._composite.connectionSecret.name
1088
+ ):
1067
1089
  secret.metadata.name = self._composite.connectionSecret.name
1068
1090
  if not self._composite.metadata.namespace:
1069
1091
  if not self._composite.connectionSecret.namespace:
1070
- self._composite.results.fatal('ConnectionNoNamespace', 'Cluster scoped XR must specify connection secret namespace')
1092
+ self._composite.results.fatal(
1093
+ "ConnectionNoNamespace",
1094
+ "Cluster scoped XR must specify connection secret namespace",
1095
+ )
1071
1096
  return
1072
1097
  secret.metadata.namespace = self._composite.connectionSecret.namespace
1073
- secret.type = 'connection.crossplane.io/v1alpha1'
1098
+ secret.type = "connection.crossplane.io/v1alpha1"
1074
1099
  secret.data[key] = protobuf.B64Encode(value)
1075
1100
 
1076
1101
  def __delattr__(self, key):