crossplane-function-pythonic 0.6.1__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.
@@ -17,9 +17,10 @@
17
17
 
18
18
  import base64
19
19
  import datetime
20
- import google.protobuf.struct_pb2
21
20
  import json
22
21
  import sys
22
+
23
+ import google.protobuf.struct_pb2
23
24
  import yaml
24
25
 
25
26
  _Unknown = object()
@@ -29,12 +30,15 @@ append = sys.maxsize
29
30
  def Map(**kwargs):
30
31
  return Value(None, None, kwargs)
31
32
 
33
+
32
34
  def List(*args):
33
35
  return Value(None, None, args)
34
36
 
37
+
35
38
  def Unknown():
36
39
  return Value(None, None)
37
40
 
41
+
38
42
  def Yaml(string, readOnly=None):
39
43
  if isinstance(string, (FieldMessage, Value)):
40
44
  if not string:
@@ -42,12 +46,16 @@ def Yaml(string, readOnly=None):
42
46
  string = str(string)
43
47
  return Value(None, None, yaml.safe_load(string), readOnly)
44
48
 
49
+
45
50
  def YamlAll(string, readOnly=None):
46
51
  if isinstance(string, (FieldMessage, Value)):
47
52
  if not string:
48
53
  return string
49
54
  string = str(string)
50
- return Value(None, None, [document for document in yaml.safe_load_all(string)], readOnly)
55
+ return Value(
56
+ None, None, [document for document in yaml.safe_load_all(string)], readOnly
57
+ )
58
+
51
59
 
52
60
  def Json(string, readOnly=None):
53
61
  if isinstance(string, (FieldMessage, Value)):
@@ -56,29 +64,31 @@ def Json(string, readOnly=None):
56
64
  string = str(string)
57
65
  return Value(None, None, json.loads(string), readOnly)
58
66
 
67
+
59
68
  def B64Encode(string):
60
69
  if isinstance(string, (FieldMessage, Value)):
61
70
  if not string:
62
71
  return string
63
72
  string = str(string)
64
- return base64.b64encode(string.encode('utf-8')).decode('utf-8')
73
+ return base64.b64encode(string.encode("utf-8")).decode("utf-8")
74
+
65
75
 
66
76
  def B64Decode(string):
67
77
  if isinstance(string, (FieldMessage, Value)):
68
78
  if not string:
69
79
  return string
70
80
  string = str(string)
71
- return base64.b64decode(string.encode('utf-8')).decode('utf-8')
81
+ return base64.b64decode(string.encode("utf-8")).decode("utf-8")
72
82
 
73
83
 
74
84
  class Message:
75
85
  def __init__(self, parent, key, descriptor, message=_Unknown, readOnly=False):
76
- self._set_attribute('_parent', parent)
77
- self._set_attribute('_key', key)
78
- self._set_attribute('_descriptor', descriptor)
79
- self._set_attribute('_message', message)
80
- self._set_attribute('_readOnly', readOnly)
81
- self._set_attribute('_cache', {})
86
+ self._set_attribute("_parent", parent)
87
+ self._set_attribute("_key", key)
88
+ self._set_attribute("_descriptor", descriptor)
89
+ self._set_attribute("_message", message)
90
+ self._set_attribute("_readOnly", readOnly)
91
+ self._set_attribute("_cache", {})
82
92
 
83
93
  def _set_attribute(self, key, value):
84
94
  self.__dict__[key] = value
@@ -100,12 +110,21 @@ class Message:
100
110
  if value is _Unknown and field.has_default_value:
101
111
  value = field.default_value
102
112
  if field.is_repeated:
103
- if field.type == field.TYPE_MESSAGE and field.message_type.GetOptions().map_entry:
104
- value = MapMessage(self, key, field.message_type.fields_by_name['value'], value, self._readOnly)
113
+ if (
114
+ field.type == field.TYPE_MESSAGE
115
+ and field.message_type.GetOptions().map_entry
116
+ ):
117
+ value = MapMessage(
118
+ self,
119
+ key,
120
+ field.message_type.fields_by_name["value"],
121
+ value,
122
+ self._readOnly,
123
+ )
105
124
  else:
106
125
  value = RepeatedMessage(self, key, field, value, self._readOnly)
107
126
  elif field.type == field.TYPE_MESSAGE:
108
- if field.message_type.name in ('Struct', 'ListValue'):
127
+ if field.message_type.name in ("Struct", "ListValue"):
109
128
  value = Value(self, key, value, self._readOnly)
110
129
  else:
111
130
  value = Message(self, key, field.message_type, value, self._readOnly)
@@ -129,7 +148,11 @@ class Message:
129
148
 
130
149
  def __hash__(self):
131
150
  if self._message is not _Unknown:
132
- return hash(tuple(hash(item) for item in sorted(iter(self), key=lambda item: item[0])))
151
+ return hash(
152
+ tuple(
153
+ hash(item) for item in sorted(iter(self), key=lambda item: item[0])
154
+ )
155
+ )
133
156
  return 0
134
157
 
135
158
  def __eq__(self, other):
@@ -153,7 +176,7 @@ class Message:
153
176
  def __str__(self):
154
177
  return format(self)
155
178
 
156
- def __format__(self, spec='yaml'):
179
+ def __format__(self, spec="yaml"):
157
180
  return _formatObject(self, spec)
158
181
 
159
182
  def _fullName(self, key=None):
@@ -163,28 +186,28 @@ class Message:
163
186
  else:
164
187
  name = str(self._key)
165
188
  if key is not None:
166
- if '.' in key:
189
+ if "." in key:
167
190
  name += f"[{key}]"
168
191
  else:
169
192
  name += f".{key}"
170
193
  return name
171
194
  if key is not None:
172
195
  return str(key)
173
- return ''
196
+ return ""
174
197
 
175
198
  def _create_child(self, key):
176
199
  if self._readOnly:
177
200
  raise ValueError(f"{self._readOnly} is read only")
178
201
  key = self._validate_key(key)
179
202
  if self._message is _Unknown:
180
- self.__dict__['_message'] = self._parent._create_child(self._key)
203
+ self.__dict__["_message"] = self._parent._create_child(self._key)
181
204
  return getattr(self._message, key)
182
205
 
183
206
  def __call__(self, **kwargs):
184
207
  if self._readOnly:
185
208
  raise ValueError(f"{self._readOnly} is read only")
186
209
  if self._message is _Unknown:
187
- self.__dict__['_message'] = self._parent._create_child(self._key)
210
+ self.__dict__["_message"] = self._parent._create_child(self._key)
188
211
  self._message.Clear()
189
212
  self._cache.clear()
190
213
  for key, value in kwargs.items():
@@ -202,7 +225,7 @@ class Message:
202
225
  raise AttributeError(obj=self, name=key)
203
226
  field = self._descriptor.fields_by_name[key]
204
227
  if self._message is _Unknown:
205
- self.__dict__['_message'] = self._parent._create_child(self._key)
228
+ self.__dict__["_message"] = self._parent._create_child(self._key)
206
229
  if isinstance(value, Message):
207
230
  value = value._message
208
231
  elif isinstance(value, (MapMessage, RepeatedMessage)):
@@ -212,7 +235,7 @@ class Message:
212
235
  elif isinstance(value, Value):
213
236
  value = value._raw
214
237
  if field.type == field.TYPE_BYTES and isinstance(value, str):
215
- value = value.encode('utf-8')
238
+ value = value.encode("utf-8")
216
239
  setattr(self._message, key, value)
217
240
  self._cache.pop(key, None)
218
241
 
@@ -241,12 +264,12 @@ class Message:
241
264
 
242
265
  class MapMessage:
243
266
  def __init__(self, parent, key, field, messages=_Unknown, readOnly=False):
244
- self._set_attribute('_parent', parent)
245
- self._set_attribute('_key', key)
246
- self._set_attribute('_field', field)
247
- self._set_attribute('_messages', messages)
248
- self._set_attribute('_readOnly', readOnly)
249
- self._set_attribute('_cache', {})
267
+ self._set_attribute("_parent", parent)
268
+ self._set_attribute("_key", key)
269
+ self._set_attribute("_field", field)
270
+ self._set_attribute("_messages", messages)
271
+ self._set_attribute("_readOnly", readOnly)
272
+ self._set_attribute("_cache", {})
250
273
 
251
274
  def _set_attribute(self, key, value):
252
275
  self.__dict__[key] = value
@@ -265,10 +288,12 @@ class MapMessage:
265
288
  if value is None and self._field.has_default_value:
266
289
  value = self._field.default_value
267
290
  if self._field.type == self._field.TYPE_MESSAGE:
268
- if self._field.message_type.name in ('Struct', 'ListValue'):
291
+ if self._field.message_type.name in ("Struct", "ListValue"):
269
292
  value = Value(self, key, value, self._readOnly)
270
293
  else:
271
- value = Message(self, key, self._field.message_type, value, self._readOnly)
294
+ value = Message(
295
+ self, key, self._field.message_type, value, self._readOnly
296
+ )
272
297
  else:
273
298
  value = FieldMessage(self, key, self._field.type, value)
274
299
  self._cache[key] = value
@@ -290,7 +315,11 @@ class MapMessage:
290
315
 
291
316
  def __hash__(self):
292
317
  if self._nessages is not None:
293
- return hash(tuple(hash(item) for item in sorted(iter(self), key=lambda item: item[0])))
318
+ return hash(
319
+ tuple(
320
+ hash(item) for item in sorted(iter(self), key=lambda item: item[0])
321
+ )
322
+ )
294
323
  return 0
295
324
 
296
325
  def __eq__(self, other):
@@ -298,9 +327,12 @@ class MapMessage:
298
327
  return False
299
328
  if self._field.type != other._field.type:
300
329
  return False
301
- if self._field.type == self._field.TYPE_MESSAGE:
302
- if self._field.message_type.full_name != other._field.message_type.full_name:
303
- return False
330
+ if (
331
+ self._field.type == self._field.TYPE_MESSAGE
332
+ and self._field.message_type.full_name
333
+ != other._field.message_type.full_name
334
+ ):
335
+ return False
304
336
  if self._messages is _Unknown:
305
337
  return other._messages is _Unknown
306
338
  elif other._messages is _Unknown:
@@ -317,7 +349,7 @@ class MapMessage:
317
349
  def __str__(self):
318
350
  return format(self)
319
351
 
320
- def __format__(self, spec='yaml'):
352
+ def __format__(self, spec="yaml"):
321
353
  return _formatObject(self, spec)
322
354
 
323
355
  def _fullName(self, key=None):
@@ -327,28 +359,28 @@ class MapMessage:
327
359
  else:
328
360
  name = str(self._key)
329
361
  if key is not None:
330
- if '.' in key:
362
+ if "." in key:
331
363
  name += f"[{key}]"
332
364
  else:
333
365
  name += f".{key}"
334
366
  return name
335
367
  if key is not None:
336
368
  return str(key)
337
- return ''
369
+ return ""
338
370
 
339
371
  def _create_child(self, key):
340
372
  if self._readOnly:
341
373
  raise ValueError(f"{self._readOnly} is read only")
342
374
  key = self._validate_key(key)
343
375
  if self._messages is _Unknown:
344
- self.__dict__['_messages'] = self._parent._create_child(self._key)
376
+ self.__dict__["_messages"] = self._parent._create_child(self._key)
345
377
  return self._messages[key]
346
378
 
347
379
  def __call__(self, **kwargs):
348
380
  if self._readOnly:
349
381
  raise ValueError(f"{self._readOnly} is read only")
350
382
  if self._messages is _Unknown:
351
- self.__dict__['_messages'] = self._parent._create_child(self._key)
383
+ self.__dict__["_messages"] = self._parent._create_child(self._key)
352
384
  self._messages.clear()
353
385
  self._cache.clear()
354
386
  for key, value in kwargs.items():
@@ -376,7 +408,7 @@ class MapMessage:
376
408
  self._messages.pop(key, None)
377
409
  else:
378
410
  if self._field.type == self._field.TYPE_BYTES and isinstance(message, str):
379
- message = message.encode('utf-8')
411
+ message = message.encode("utf-8")
380
412
  self._messages[key] = message
381
413
  self._cache.pop(key, None)
382
414
 
@@ -425,8 +457,7 @@ class RepeatedMessage:
425
457
  key = 0
426
458
  else:
427
459
  key = len(self._messages) + key
428
- if key < 0:
429
- key = 0
460
+ key = max(key, 0)
430
461
  if key in self._cache:
431
462
  return self._cache[key]
432
463
  if self._messages is _Unknown or key >= len(self._messages):
@@ -436,10 +467,12 @@ class RepeatedMessage:
436
467
  if value is None and self._field.has_default_value:
437
468
  value = self._field.default_value
438
469
  if self._field.type == self._field.TYPE_MESSAGE:
439
- if self._field.message_type.name in ('Struct', 'ListValue'):
470
+ if self._field.message_type.name in ("Struct", "ListValue"):
440
471
  value = Value(self, key, value, self._readOnly)
441
472
  else:
442
- value = Message(self, key, self._field.message_type, value, self._readOnly)
473
+ value = Message(
474
+ self, key, self._field.message_type, value, self._readOnly
475
+ )
443
476
  else:
444
477
  value = FieldMessage(self, key, self._field.type, value)
445
478
  self._cache[key] = value
@@ -473,9 +506,12 @@ class RepeatedMessage:
473
506
  return False
474
507
  if self._field.type != other._field.type:
475
508
  return False
476
- if self._field.type == self._field.TYPE_MESSAGE:
477
- if self._field.message_type.full_name != other._field.message_type.full_name:
478
- return False
509
+ if (
510
+ self._field.type == self._field.TYPE_MESSAGE
511
+ and self._field.message_type.full_name
512
+ != other._field.message_type.full_name
513
+ ):
514
+ return False
479
515
  if self._messages is _Unknown:
480
516
  return other._messages is _Unknown
481
517
  elif other._messages is _Unknown:
@@ -490,7 +526,7 @@ class RepeatedMessage:
490
526
  def __str__(self):
491
527
  return format(self)
492
528
 
493
- def __format__(self, spec='yaml'):
529
+ def __format__(self, spec="yaml"):
494
530
  return _formatObject(self, spec)
495
531
 
496
532
  def _fullName(self, key=None):
@@ -504,14 +540,14 @@ class RepeatedMessage:
504
540
  return name
505
541
  if key is not None:
506
542
  return str(key)
507
- return ''
543
+ return ""
508
544
 
509
545
  def _create_child(self, key):
510
546
  if self._readOnly:
511
547
  raise ValueError(f"{self._readOnly} is read only")
512
548
  key = self._validate_key(key)
513
549
  if self._messages is _Unknown:
514
- self.__dict__['_messages'] = self._parent._create_child(self._key)
550
+ self.__dict__["_messages"] = self._parent._create_child(self._key)
515
551
  if key == append:
516
552
  key = len(self._messages)
517
553
  elif key < 0:
@@ -524,7 +560,7 @@ class RepeatedMessage:
524
560
  if self._readOnly:
525
561
  raise ValueError(f"{self._readOnly} is read only")
526
562
  if self._messages is _Unknown:
527
- self.__dict__['_messages'] = self._parent._create_child(self._key)
563
+ self.__dict__["_messages"] = self._parent._create_child(self._key)
528
564
  self._messages.clear()
529
565
  self._cache.clear()
530
566
  for arg in args:
@@ -553,7 +589,7 @@ class RepeatedMessage:
553
589
  self._cache.clear()
554
590
  else:
555
591
  if self._field.type == self._field.TYPE_BYTES and isinstance(message, str):
556
- message = message.encode('utf-8')
592
+ message = message.encode("utf-8")
557
593
  if key >= len(self._messages):
558
594
  self._messages.append(message)
559
595
  else:
@@ -623,19 +659,19 @@ class FieldMessage:
623
659
 
624
660
  def __bytes__(self):
625
661
  if self._value is _Unknown:
626
- return None
662
+ return None # noqa: PLE0308
627
663
  if isinstance(self._value, str):
628
- return self._value.encode('utf-8')
664
+ return self._value.encode("utf-8")
629
665
  return bytes(self._value)
630
666
 
631
667
  def __str__(self):
632
668
  if self._value is _Unknown:
633
- return None
669
+ return None # noqa: PLE0307
634
670
  if isinstance(self._value, bytes):
635
- return self._value.decode('utf-8')
671
+ return self._value.decode("utf-8")
636
672
  return str(self._value)
637
673
 
638
- def __format__(self, spec=''):
674
+ def __format__(self, spec=""):
639
675
  if self._value is _Unknown:
640
676
  return None
641
677
  return format(self._value, spec)
@@ -657,14 +693,14 @@ class FieldMessage:
657
693
  else:
658
694
  name = str(self._key)
659
695
  if key is not None:
660
- if '.' in key:
696
+ if "." in key:
661
697
  name += f"[{key}]"
662
698
  else:
663
699
  name += f".{key}"
664
700
  return name
665
701
  if key is not None:
666
702
  return str(key)
667
- return ''
703
+ return ""
668
704
 
669
705
 
670
706
  class ProtobufValue:
@@ -675,16 +711,26 @@ class ProtobufValue:
675
711
 
676
712
  class Value:
677
713
  def __init__(self, parent, key, value=_Unknown, readOnly=None):
678
- self._set_attribute('_parent', parent)
679
- self._set_attribute('_key', key)
680
- self._set_attribute('_dependencies', {})
681
- self._set_attribute('_unknowns', {})
682
- self._set_attribute('_cache', {})
683
- self._set_attribute('_readOnly', None)
684
- if isinstance(value, (google.protobuf.struct_pb2.Value, google.protobuf.struct_pb2.Struct, google.protobuf.struct_pb2.ListValue)) or value is _Unknown:
685
- self._set_attribute('_value', value)
714
+ self._set_attribute("_parent", parent)
715
+ self._set_attribute("_key", key)
716
+ self._set_attribute("_dependencies", {})
717
+ self._set_attribute("_unknowns", {})
718
+ self._set_attribute("_cache", {})
719
+ self._set_attribute("_readOnly", None)
720
+ if (
721
+ isinstance(
722
+ value,
723
+ (
724
+ google.protobuf.struct_pb2.Value,
725
+ google.protobuf.struct_pb2.Struct,
726
+ google.protobuf.struct_pb2.ListValue,
727
+ ),
728
+ )
729
+ or value is _Unknown
730
+ ):
731
+ self._set_attribute("_value", value)
686
732
  else:
687
- self._set_attribute('_value', google.protobuf.struct_pb2.Value())
733
+ self._set_attribute("_value", google.protobuf.struct_pb2.Value())
688
734
  if value is None:
689
735
  self._value.null_value = 0
690
736
  elif isinstance(value, dict):
@@ -695,7 +741,7 @@ class Value:
695
741
  self._value.list_value.Clear()
696
742
  for ix, v in enumerate(value):
697
743
  self[ix] = v
698
- elif isinstance(value, bool): # Must be before number check
744
+ elif isinstance(value, bool): # Must be before number check
699
745
  self._value.bool_value = value
700
746
  elif isinstance(value, (int, float)):
701
747
  self._value.number_value = value
@@ -703,7 +749,7 @@ class Value:
703
749
  self._value.string_value = value
704
750
  else:
705
751
  raise ValueError(f"Unexpected Value type: {value.__class__}")
706
- self._set_attribute('_readOnly', readOnly)
752
+ self._set_attribute("_readOnly", readOnly)
707
753
 
708
754
  def _set_attribute(self, key, value):
709
755
  self.__dict__[key] = value
@@ -732,42 +778,40 @@ class Value:
732
778
  return self._unknowns[key]
733
779
  if isinstance(key, str):
734
780
  match self._kind:
735
- case 'struct_value':
781
+ case "struct_value":
736
782
  value = self._value.struct_value.fields.get(key, _Unknown)
737
- case 'Struct':
783
+ case "Struct":
738
784
  value = self._value.fields.get(key, _Unknown)
739
- case 'Unknown':
785
+ case "Unknown":
740
786
  value = _Unknown
741
787
  case _:
742
- raise ValueError(f"Invalid key \"{key}\" for kind: {self._kind}")
788
+ raise ValueError(f'Invalid key "{key}" for kind: {self._kind}')
743
789
  elif isinstance(key, int):
744
790
  match self._kind:
745
- case 'list_value':
791
+ case "list_value":
746
792
  if key < 0:
747
793
  key = len(self._value.list_value.values) + key
748
- if key < 0:
749
- key = 0
794
+ key = max(key, 0)
750
795
  if key < len(self._value.list_value.values):
751
796
  value = self._value.list_value.values[key]
752
797
  else:
753
798
  if key == append:
754
799
  key = len(self._value.list_value.values)
755
800
  value = _Unknown
756
- case 'ListValue':
801
+ case "ListValue":
757
802
  if key < 0:
758
803
  key = len(self._value.values) + key
759
- if key < 0:
760
- key = 0
804
+ key = max(key, 0)
761
805
  if key < len(self._value.values):
762
806
  value = self._value.values[key]
763
807
  else:
764
808
  if key == append:
765
809
  key = len(self._value.values)
766
810
  value = _Unknown
767
- case 'Unknown':
811
+ case "Unknown":
768
812
  value = _Unknown
769
813
  case _:
770
- raise ValueError(f"Invalid key \"{key}\" for kind: {self._kind}")
814
+ raise ValueError(f'Invalid key "{key}" for kind: {self._kind}')
771
815
  else:
772
816
  raise NotImplementedError()
773
817
  value = Value(self, key, value, self._readOnly)
@@ -779,29 +823,29 @@ class Value:
779
823
 
780
824
  def __len__(self):
781
825
  match self._kind:
782
- case 'struct_value':
826
+ case "struct_value":
783
827
  return len(self._value.struct_value.fields) + len(self._unknowns)
784
- case 'Struct':
828
+ case "Struct":
785
829
  return len(self._value.fields) + len(self._unknowns)
786
- case 'list_value':
830
+ case "list_value":
787
831
  return len(self._value.list_value.values) + len(self._unknowns)
788
- case 'ListValue':
832
+ case "ListValue":
789
833
  return len(self._value.values) + len(self._unknowns)
790
- case 'string_value':
834
+ case "string_value":
791
835
  return len(self._value.string_value)
792
- case 'bool_value':
836
+ case "bool_value":
793
837
  return 1 if self._value.bool_value else 0
794
838
  return 0
795
839
 
796
840
  def __contains__(self, item):
797
841
  match self._kind:
798
- case 'struct_value':
842
+ case "struct_value":
799
843
  item = self._validate_key(item)
800
844
  return item in self._value.struct_value.fields or item in self._unknowns
801
- case 'Struct':
845
+ case "Struct":
802
846
  item = self._validate_key(item)
803
847
  return item in self._value.fields or item in self._unknowns
804
- case 'list_value' | 'ListValue':
848
+ case "list_value" | "ListValue":
805
849
  for value in self:
806
850
  if item == value:
807
851
  return True
@@ -809,19 +853,21 @@ class Value:
809
853
 
810
854
  def __iter__(self):
811
855
  match self._kind:
812
- case 'struct_value':
813
- for key in sorted(set(self._value.struct_value.fields) | set(self._unknowns.keys())):
856
+ case "struct_value":
857
+ for key in sorted(
858
+ set(self._value.struct_value.fields) | set(self._unknowns.keys())
859
+ ):
814
860
  yield key, self[key]
815
- case 'Struct':
861
+ case "Struct":
816
862
  for key in sorted(set(self._value.fields) | set(self._unknowns.keys())):
817
863
  yield key, self[key]
818
- case 'list_value':
864
+ case "list_value":
819
865
  for ix in range(len(self._value.list_value.values)):
820
866
  yield self[ix]
821
867
  for ix in sorted(self._unknowns.keys()):
822
868
  if ix >= len(self._value.list_value.values):
823
869
  yield self[ix]
824
- case 'ListValue':
870
+ case "ListValue":
825
871
  for ix in range(len(self._value.values)):
826
872
  yield self[ix]
827
873
  for ix in sorted(self._unknowns.keys()):
@@ -830,17 +876,22 @@ class Value:
830
876
 
831
877
  def __hash__(self):
832
878
  match self._kind:
833
- case 'struct_value' | 'Struct':
834
- return hash(tuple(hash(item) for item in sorted(iter(self), key=lambda item: item[0])))
835
- case 'list_value' | 'ListValue':
879
+ case "struct_value" | "Struct":
880
+ return hash(
881
+ tuple(
882
+ hash(item)
883
+ for item in sorted(iter(self), key=lambda item: item[0])
884
+ )
885
+ )
886
+ case "list_value" | "ListValue":
836
887
  return hash(tuple(hash(item) for item in self))
837
- case 'string_value':
888
+ case "string_value":
838
889
  return hash(self._value.string_value)
839
- case 'null_value':
890
+ case "null_value":
840
891
  return hash(None)
841
- case 'number_value':
892
+ case "number_value":
842
893
  return hash(self._value.number_value)
843
- case 'bool_value':
894
+ case "bool_value":
844
895
  return hash(self._value.bool_value)
845
896
  return 0
846
897
 
@@ -849,7 +900,7 @@ class Value:
849
900
  if isinstance(other, Value) and other._kind != kind:
850
901
  return False
851
902
  match kind:
852
- case 'struct_value' | 'Struct':
903
+ case "struct_value" | "Struct":
853
904
  if not isinstance(other, (Value, dict)):
854
905
  return False
855
906
  if len(self) != len(other):
@@ -860,7 +911,7 @@ class Value:
860
911
  if value != other[key]:
861
912
  return False
862
913
  return True
863
- case 'list_value' | 'ListValue':
914
+ case "list_value" | "ListValue":
864
915
  if not isinstance(other, (Value, tuple, list)):
865
916
  return False
866
917
  if len(self) != len(other):
@@ -869,27 +920,27 @@ class Value:
869
920
  if value != other[ix]:
870
921
  return False
871
922
  return True
872
- case 'Unknown':
923
+ case "Unknown":
873
924
  if isinstance(other, Value):
874
925
  return other._isUnknown
875
926
  return False
876
- case 'string_value':
927
+ case "string_value":
877
928
  if isinstance(other, Value):
878
929
  return self._value.string_value == other._value.string_value
879
930
  if isinstance(other, str):
880
931
  return self._value.string_value == other
881
932
  return False
882
- case 'null_value':
933
+ case "null_value":
883
934
  if isinstance(other, Value):
884
935
  return True
885
936
  return other is None
886
- case 'number_value':
937
+ case "number_value":
887
938
  if isinstance(other, Value):
888
939
  return self._value.number_value == other._value.number_value
889
940
  if isinstance(other, (int, float)):
890
941
  return self._value.number_value == other
891
942
  return False
892
- case 'bool_value':
943
+ case "bool_value":
893
944
  if isinstance(other, Value):
894
945
  return self._value.bool_value == other._value.bool_value
895
946
  if isinstance(other, bool):
@@ -899,7 +950,7 @@ class Value:
899
950
 
900
951
  def __or__(self, other):
901
952
  kind = self._kind
902
- if kind not in ('struct_value', 'Struct'):
953
+ if kind not in ("struct_value", "Struct"):
903
954
  return NotImplemented
904
955
  if not isinstance(other, (Value, dict)):
905
956
  return NotImplemented
@@ -917,56 +968,56 @@ class Value:
917
968
  result = Map()
918
969
  for key, value in other.items():
919
970
  result[key] = value
920
- if self._kind not in ('struct_value', 'Struct'):
971
+ if self._kind not in ("struct_value", "Struct"):
921
972
  return NotImplemented
922
973
  for key, value in self:
923
974
  result[key] = value
924
975
  return result
925
976
 
926
977
  def __str__(self):
927
- return format(self, '')
978
+ return format(self, "")
928
979
 
929
- def __format__(self, spec='yaml'):
980
+ def __format__(self, spec="yaml"):
930
981
  if not spec:
931
982
  match self._kind:
932
- case 'Unknown':
933
- return '<<UNKNOWN>>'
934
- case 'string_value':
983
+ case "Unknown":
984
+ return "<<UNKNOWN>>"
985
+ case "string_value":
935
986
  return self._value.string_value
936
- case 'null_value':
937
- return 'null'
938
- case 'number_value':
987
+ case "null_value":
988
+ return "null"
989
+ case "number_value":
939
990
  value = self._value.number_value
940
991
  if value.is_integer():
941
992
  value = int(value)
942
993
  return str(value)
943
- case 'bool_value':
944
- return 'true' if self._value.bool_value else 'false'
994
+ case "bool_value":
995
+ return "true" if self._value.bool_value else "false"
945
996
  return _formatObject(self, spec)
946
997
 
947
998
  def __int__(self):
948
999
  kind = self._kind
949
1000
  match kind:
950
- case 'string_value':
1001
+ case "string_value":
951
1002
  return int(self._value.string_value)
952
- case 'number_value':
1003
+ case "number_value":
953
1004
  return int(self._value.number_value)
954
- case 'bool_value':
1005
+ case "bool_value":
955
1006
  return int(self._value.bool_value)
956
- case 'Unknown':
1007
+ case "Unknown":
957
1008
  return 0
958
1009
  raise TypeError(f"Cannot convert kind to integer: {kind}")
959
1010
 
960
1011
  def __float__(self):
961
1012
  kind = self._kind
962
1013
  match kind:
963
- case 'string_value':
1014
+ case "string_value":
964
1015
  return float(self._value.string_value)
965
- case 'number_value':
1016
+ case "number_value":
966
1017
  return float(self._value.number_value)
967
- case 'bool_value':
1018
+ case "bool_value":
968
1019
  return float(self._value.bool_value)
969
- case 'Unknown':
1020
+ case "Unknown":
970
1021
  return 0.0
971
1022
  raise TypeError(f"Cannot convert kind to float: {kind}")
972
1023
 
@@ -988,25 +1039,25 @@ class Value:
988
1039
  if isinstance(key, int):
989
1040
  name += f"[{key}]"
990
1041
  else:
991
- if '.' in key:
1042
+ if "." in key:
992
1043
  name += f"[{key}]"
993
1044
  else:
994
1045
  name += f".{key}"
995
1046
  return name
996
1047
  if key is not None:
997
1048
  return str(key)
998
- return ''
1049
+ return ""
999
1050
 
1000
1051
  def __call__(self, *args, **kwargs):
1001
1052
  if self._readOnly:
1002
1053
  raise ValueError(f"{self._readOnly} is read only")
1003
- self.__dict__['_value'] = google.protobuf.struct_pb2.Value()
1054
+ self.__dict__["_value"] = google.protobuf.struct_pb2.Value()
1004
1055
  self._cache.clear()
1005
1056
  self._dependencies.clear()
1006
1057
  self._unknowns.clear()
1007
1058
  if len(kwargs):
1008
1059
  if len(args):
1009
- raise ValueError('Connect specify both kwargs and args')
1060
+ raise ValueError("Connect specify both kwargs and args")
1010
1061
  for key, value in kwargs.items():
1011
1062
  self[key] = value
1012
1063
  elif len(args):
@@ -1024,12 +1075,12 @@ class Value:
1024
1075
  raise ValueError(f"{self._readOnly} is read only")
1025
1076
  key = self._validate_key(key)
1026
1077
  if isinstance(key, str):
1027
- if self._ensure_map() == 'struct_value':
1078
+ if self._ensure_map() == "struct_value":
1028
1079
  values = self._value.struct_value.fields
1029
1080
  else:
1030
1081
  values = self._value.fields
1031
1082
  elif isinstance(key, int):
1032
- if self._ensure_list() == 'list_value':
1083
+ if self._ensure_list() == "list_value":
1033
1084
  values = self._value.list_value.values
1034
1085
  else:
1035
1086
  values = self._value.values
@@ -1048,10 +1099,10 @@ class Value:
1048
1099
  value = value._protobuf_value
1049
1100
  if value is None:
1050
1101
  values[key].null_value = 0
1051
- elif isinstance(value, bool): # Must be before int check
1102
+ elif isinstance(value, bool): # Must be before int check
1052
1103
  values[key].bool_value = value
1053
1104
  elif isinstance(value, bytes):
1054
- values[key].string_value = value._value.decode('utf-8')
1105
+ values[key].string_value = value._value.decode("utf-8")
1055
1106
  elif isinstance(value, str):
1056
1107
  values[key].string_value = value
1057
1108
  elif isinstance(value, (int, float)):
@@ -1069,7 +1120,7 @@ class Value:
1069
1120
  if isinstance(value._value, str):
1070
1121
  values[key].string_value = value._value
1071
1122
  elif isinstance(value._value, bytes):
1072
- values[key].string_value = value._value.decode('utf-8')
1123
+ values[key].string_value = value._value.decode("utf-8")
1073
1124
  elif value._value is None:
1074
1125
  values[key].null_value = value._value.null_value
1075
1126
  elif isinstance(value._value, (int, float)):
@@ -1083,23 +1134,23 @@ class Value:
1083
1134
  elif isinstance(value, Value):
1084
1135
  self._dependencies[key] = value
1085
1136
  match value._kind:
1086
- case 'struct_value' | 'Struct':
1137
+ case "struct_value" | "Struct":
1087
1138
  values[key].struct_value.Clear()
1088
1139
  for k, v in value:
1089
1140
  self[key][k] = v
1090
- case 'list_value' | 'ListValue':
1141
+ case "list_value" | "ListValue":
1091
1142
  values[key].list_value.Clear()
1092
1143
  for ix, v in enumerate(value):
1093
1144
  self[key][ix] = v
1094
- case 'string_value':
1145
+ case "string_value":
1095
1146
  values[key].string_value = value._value.string_value
1096
- case 'null_value':
1147
+ case "null_value":
1097
1148
  values[key].null_value = value._value.null_value
1098
- case 'number_value':
1149
+ case "number_value":
1099
1150
  values[key].number_value = value._value.number_value
1100
- case 'bool_value':
1151
+ case "bool_value":
1101
1152
  values[key].bool_value = value._value.bool_value
1102
- case 'Unknown':
1153
+ case "Unknown":
1103
1154
  self._setUnknown(key, value)
1104
1155
  case _:
1105
1156
  raise ValueError(f"Unexpected value kind: {value._kind}")
@@ -1109,41 +1160,41 @@ class Value:
1109
1160
  @property
1110
1161
  def _raw(self):
1111
1162
  match self._kind:
1112
- case 'struct_value':
1163
+ case "struct_value":
1113
1164
  return self._value.struct_value
1114
- case 'list_value':
1165
+ case "list_value":
1115
1166
  return self._value.list_value
1116
- case 'string_value':
1167
+ case "string_value":
1117
1168
  return self._value.string_value
1118
- case 'null_value':
1169
+ case "null_value":
1119
1170
  return self._value.null_value
1120
- case 'number_value':
1171
+ case "number_value":
1121
1172
  return self._value.number_value
1122
- case 'bool_value':
1173
+ case "bool_value":
1123
1174
  return self._value.bool_value
1124
- case 'Struct' | 'ListValue':
1175
+ case "Struct" | "ListValue":
1125
1176
  return self._value
1126
- case 'Unknown':
1177
+ case "Unknown":
1127
1178
  return _Unknown
1128
1179
 
1129
1180
  def _setUnknown(self, key, value):
1130
1181
  self._dependencies.pop(key, None)
1131
1182
  self._unknowns[key] = value
1132
1183
  match self._kind:
1133
- case 'struct_value':
1184
+ case "struct_value":
1134
1185
  if key in self._value.struct_value.fields:
1135
1186
  del self._value.struct_value[key]
1136
- case 'Struct':
1187
+ case "Struct":
1137
1188
  if key in self._value.fields:
1138
1189
  del self._value[key]
1139
- case 'list_value':
1190
+ case "list_value":
1140
1191
  if key < len(self._value.list_value.values):
1141
1192
  self._value.list_value.values[key].Clear()
1142
1193
  for ix in reversed(range(len(self._value.list_value.values))):
1143
1194
  if ix not in self._unknowns:
1144
1195
  break
1145
1196
  del self._value.list_value[ix]
1146
- case 'ListValue':
1197
+ case "ListValue":
1147
1198
  if key < len(self._value.values):
1148
1199
  self._value.values[key].Clear()
1149
1200
  for ix in reversed(range(len(self._value.values))):
@@ -1158,30 +1209,30 @@ class Value:
1158
1209
  if self._readOnly:
1159
1210
  raise ValueError(f"{self._readOnly} is read only")
1160
1211
  kind = self._kind
1161
- if kind == 'Unknown':
1212
+ if kind == "Unknown":
1162
1213
  return
1163
1214
  key = self._validate_key(key)
1164
1215
  if isinstance(key, str):
1165
1216
  match kind:
1166
- case 'struct_value':
1217
+ case "struct_value":
1167
1218
  if key in self._value.struct_value.fields:
1168
1219
  del self._value.struct_value[key]
1169
- case 'Struct':
1220
+ case "Struct":
1170
1221
  if key in self._value.fields:
1171
1222
  del self._value[key]
1172
1223
  case _:
1173
- raise ValueError(f"Invalid key \"{key}\" for kind: {self._kind}")
1224
+ raise ValueError(f'Invalid key "{key}" for kind: {self._kind}')
1174
1225
  self._cache.pop(key, None)
1175
1226
  self._dependencies.pop(key, None)
1176
1227
  self._unknowns.pop(key, None)
1177
1228
  elif isinstance(key, int):
1178
1229
  match kind:
1179
- case 'list_value':
1230
+ case "list_value":
1180
1231
  values = self._value.list_value
1181
- case 'ListValue':
1232
+ case "ListValue":
1182
1233
  values = self._value
1183
1234
  case _:
1184
- raise ValueError(f"Invalid key \"{key}\" for kind: {self._kind}")
1235
+ raise ValueError(f'Invalid key "{key}" for kind: {self._kind}')
1185
1236
  if key < len(values.values):
1186
1237
  del values[key]
1187
1238
  self._cache.pop(key, None)
@@ -1209,14 +1260,14 @@ class Value:
1209
1260
  raise ValueError(f"{self._readOnly} is read only")
1210
1261
  key = self._validate_key(key)
1211
1262
  if isinstance(key, str):
1212
- if self._ensure_map() == 'struct_value':
1263
+ if self._ensure_map() == "struct_value":
1213
1264
  fields = self._value.struct_value.fields
1214
1265
  else:
1215
1266
  fields = self._value.fields
1216
1267
  fields[key].Clear()
1217
1268
  return fields[key]
1218
1269
  if isinstance(key, int):
1219
- if self._ensure_list() == 'list_value':
1270
+ if self._ensure_list() == "list_value":
1220
1271
  values = self._value.list_value.values
1221
1272
  else:
1222
1273
  values = self._value.values
@@ -1241,55 +1292,61 @@ class Value:
1241
1292
 
1242
1293
  def _ensure_map(self):
1243
1294
  kind = self._kind
1244
- if kind == 'Unknown':
1295
+ if kind == "Unknown":
1245
1296
  if self._parent is None:
1246
- self.__dict__['_value'] = google.protobuf.struct_pb2.Value()
1297
+ self.__dict__["_value"] = google.protobuf.struct_pb2.Value()
1247
1298
  else:
1248
- self.__dict__['_value'] = self._parent._create_child(self._key)
1249
- if isinstance(self._value, google.protobuf.struct_pb2.Value) and self._value.WhichOneof('kind') is None:
1299
+ self.__dict__["_value"] = self._parent._create_child(self._key)
1300
+ if (
1301
+ isinstance(self._value, google.protobuf.struct_pb2.Value)
1302
+ and self._value.WhichOneof("kind") is None
1303
+ ):
1250
1304
  self._value.struct_value.Clear()
1251
1305
  kind = self._kind
1252
- if kind not in ('struct_value', 'Struct'):
1306
+ if kind not in ("struct_value", "Struct"):
1253
1307
  raise ValueError(f"Invalid map kind: {kind}")
1254
1308
  return kind
1255
1309
 
1256
1310
  def _ensure_list(self):
1257
1311
  kind = self._kind
1258
- if kind == 'Unknown':
1312
+ if kind == "Unknown":
1259
1313
  if self._parent is None:
1260
- self.__dict__['_value'] = google.protobuf.struct_pb2.Value()
1314
+ self.__dict__["_value"] = google.protobuf.struct_pb2.Value()
1261
1315
  else:
1262
- self.__dict__['_value'] = self._parent._create_child(self._key)
1263
- if isinstance(self._value, google.protobuf.struct_pb2.Value) and self._value.WhichOneof('kind') is None:
1316
+ self.__dict__["_value"] = self._parent._create_child(self._key)
1317
+ if (
1318
+ isinstance(self._value, google.protobuf.struct_pb2.Value)
1319
+ and self._value.WhichOneof("kind") is None
1320
+ ):
1264
1321
  self._value.list_value.Clear()
1265
1322
  kind = self._kind
1266
- if kind not in ('list_value', 'ListValue'):
1323
+ if kind not in ("list_value", "ListValue"):
1267
1324
  raise ValueError(f"Invalid list kind: {kind}")
1268
1325
  return kind
1269
1326
 
1270
1327
  @property
1271
1328
  def _kind(self):
1272
1329
  if isinstance(self._value, google.protobuf.struct_pb2.Value):
1273
- return self._value.WhichOneof('kind') or 'Unknown'
1330
+ return self._value.WhichOneof("kind") or "Unknown"
1274
1331
  if isinstance(self._value, google.protobuf.struct_pb2.Struct):
1275
- return 'Struct'
1332
+ return "Struct"
1276
1333
  if isinstance(self._value, google.protobuf.struct_pb2.ListValue):
1277
- return 'ListValue'
1334
+ return "ListValue"
1278
1335
  if self._value is _Unknown:
1279
- return 'Unknown'
1336
+ return "Unknown"
1280
1337
  raise ValueError(f"Unexpected value type: {self._value.__class__}")
1281
1338
 
1282
1339
  @property
1283
1340
  def _isUnknown(self):
1284
- return self._kind == 'Unknown'
1341
+ return self._kind == "Unknown"
1285
1342
 
1286
1343
  @property
1287
1344
  def _isMap(self):
1288
- return self._kind in ('struct_value', 'Struct')
1345
+ return self._kind in ("struct_value", "Struct")
1289
1346
 
1290
1347
  @property
1291
1348
  def _isList(self):
1292
- return self._kind in ('list_value', 'ListValue')
1349
+ return self._kind in ("list_value", "ListValue")
1293
1350
 
1294
1351
  @property
1295
1352
  def _getUnknowns(self):
@@ -1330,13 +1387,21 @@ class Value:
1330
1387
  for key, value in self:
1331
1388
  if isinstance(value, Value) and len(value):
1332
1389
  patch = patches[key]
1333
- if isinstance(patch, Value) and patch._kind == value._kind and len(patch):
1390
+ if (
1391
+ isinstance(patch, Value)
1392
+ and patch._kind == value._kind
1393
+ and len(patch)
1394
+ ):
1334
1395
  value._patchUnknowns(patch)
1335
1396
  elif self._isList:
1336
1397
  for ix, value in enumerate(self):
1337
1398
  if isinstance(value, Value) and len(value):
1338
1399
  patch = patches[ix]
1339
- if isinstance(patch, Value) and patch._kind == value._kind and len(patch):
1400
+ if (
1401
+ isinstance(patch, Value)
1402
+ and patch._kind == value._kind
1403
+ and len(patch)
1404
+ ):
1340
1405
  value._patchUnknowns(patch)
1341
1406
 
1342
1407
  def _renderUnknowns(self, trimFullName):
@@ -1353,13 +1418,13 @@ class Value:
1353
1418
  value._renderUnknowns(trimFullName)
1354
1419
 
1355
1420
 
1356
- def _formatObject(object, spec='yaml'):
1421
+ def _formatObject(object, spec="yaml"):
1357
1422
  match spec:
1358
- case 'json':
1423
+ case "json":
1359
1424
  return json.dumps(object, indent=2, cls=_JSONEncoder)
1360
- case 'jsonc':
1361
- return json.dumps(object, separators=(',', ':'), cls=_JSONEncoder)
1362
- case 'protobuf':
1425
+ case "jsonc":
1426
+ return json.dumps(object, separators=(",", ":"), cls=_JSONEncoder)
1427
+ case "protobuf":
1363
1428
  if isinstance(object, Message):
1364
1429
  return str(object._message)
1365
1430
  if isinstance(object, (MapMessage, RepeatedMessage)):
@@ -1385,34 +1450,35 @@ class _JSONEncoder(json.JSONEncoder):
1385
1450
  return object._value
1386
1451
  if isinstance(object, Value):
1387
1452
  match object._kind:
1388
- case 'struct_value' | 'Struc':
1453
+ case "struct_value" | "Struc":
1389
1454
  return {key: value for key, value in object}
1390
- case 'list_value' | 'ListValue':
1455
+ case "list_value" | "ListValue":
1391
1456
  return [value for value in object]
1392
- case 'string_value':
1457
+ case "string_value":
1393
1458
  return object._value.string_value
1394
- case 'null_value':
1459
+ case "null_value":
1395
1460
  return None
1396
- case 'number_value':
1461
+ case "number_value":
1397
1462
  value = object._value.number_value
1398
1463
  if value.is_integer():
1399
1464
  value = int(value)
1400
1465
  return value
1401
- case 'bool_value':
1466
+ case "bool_value":
1402
1467
  return object._value.bool_value
1403
- case 'Unknown':
1404
- return '<<UNKNOWN>>'
1468
+ case "Unknown":
1469
+ return "<<UNKNOWN>>"
1405
1470
  case _:
1406
- return '<<UNEXPECTED>>'
1471
+ return "<<UNEXPECTED>>"
1407
1472
  if isinstance(object, datetime.datetime):
1408
1473
  return object.isoformat()
1409
- return super(_JSONEncoder, self).default(object)
1474
+ return super().default(object)
1410
1475
 
1411
1476
 
1412
1477
  class _Dumper(yaml.SafeDumper):
1413
-
1414
1478
  def represent_str(self, data):
1415
- return self.represent_scalar('tag:yaml.org,2002:str', data, '|' if '\n' in data else None)
1479
+ return self.represent_scalar(
1480
+ "tag:yaml.org,2002:str", data, "|" if "\n" in data else None
1481
+ )
1416
1482
 
1417
1483
  def represent_message_dict(self, message):
1418
1484
  return self.represent_dict({key: value for key, value in message})
@@ -1436,30 +1502,31 @@ class _Dumper(yaml.SafeDumper):
1436
1502
  if isinstance(field._value, bool):
1437
1503
  return self.represent_bool(field._value)
1438
1504
  if field._value is _Unknown:
1439
- return self.represent_str('<<UNKNOWN>>')
1440
- return self.represent_str('<<UNEXPECTED>>')
1505
+ return self.represent_str("<<UNKNOWN>>")
1506
+ return self.represent_str("<<UNEXPECTED>>")
1441
1507
 
1442
1508
  def represent_value(self, value):
1443
1509
  match value._kind:
1444
- case 'struct_value' | 'Struct':
1445
- return self.represent_dict({k:v for k,v in value})
1446
- case 'list_value' | 'ListValue':
1510
+ case "struct_value" | "Struct":
1511
+ return self.represent_dict({k: v for k, v in value})
1512
+ case "list_value" | "ListValue":
1447
1513
  return self.represent_list([v for v in value])
1448
- case 'string_value':
1514
+ case "string_value":
1449
1515
  return self.represent_str(value._value.string_value)
1450
- case 'null_value':
1516
+ case "null_value":
1451
1517
  return self.represent_none(None)
1452
- case 'number_value':
1518
+ case "number_value":
1453
1519
  value = value._value.number_value
1454
1520
  if value.is_integer():
1455
1521
  return self.represent_int(int(value))
1456
1522
  return self.represent_float(value)
1457
- case 'bool_value':
1523
+ case "bool_value":
1458
1524
  return self.represent_bool(value._value.bool_value)
1459
- case 'Unknown':
1460
- return self.represent_str('<<UNKNOWN>>')
1525
+ case "Unknown":
1526
+ return self.represent_str("<<UNKNOWN>>")
1461
1527
  case _:
1462
- return self.represent_str('<<UNEXPECTED>>')
1528
+ return self.represent_str("<<UNEXPECTED>>")
1529
+
1463
1530
 
1464
1531
  _Dumper.add_representer(str, _Dumper.represent_str)
1465
1532
  _Dumper.add_representer(Message, _Dumper.represent_message_dict)