|
25 | 25 |
|
26 | 26 |
|
27 | 27 | def Map(**kwargs): |
28 | | - return Values(None, None, None, Values.Type.MAP)(**kwargs) |
| 28 | + map = Values(None, None, None, Values.Type.MAP) |
| 29 | + for name, value in kwargs.items(): |
| 30 | + map[name] = value |
| 31 | + return map |
29 | 32 |
|
30 | 33 | def List(*args): |
31 | | - return Values(None, None, None, Values.Type.LIST)(*args) |
| 34 | + list = Values(None, None, None, Values.Type.LIST) |
| 35 | + for ix, value in enumerate(args): |
| 36 | + list[ix] = value |
| 37 | + return list |
32 | 38 |
|
33 | 39 | def Unknown(): |
34 | 40 | return Values(None, None, None, Values.Type.UNKNOWN) |
@@ -683,36 +689,16 @@ def _create_child(self, key, type): |
683 | 689 | def __call__(self, *args, **kwargs): |
684 | 690 | if self._readOnly: |
685 | 691 | raise ValueError(f"{self._readOnly} is read only") |
| 692 | + self.__dict__['_values'] = None |
| 693 | + self.__dict__['_type'] = self.Type.UNKNOWN |
686 | 694 | self._cache.clear() |
687 | 695 | self._unknowns.clear() |
688 | 696 | if len(kwargs): |
689 | | - if not self._isMap: |
690 | | - if not self._isUnknown: |
691 | | - raise ValueError('Cannot specify kwargs on lists') |
692 | | - self.__dict__['_type'] = self.Type.MAP |
693 | 697 | if len(args): |
694 | | - raise ValueError('Connect specify args on maps') |
695 | | - if self._values is None: |
696 | | - if self._parent is None: |
697 | | - self.__dict__['_values'] = google.protobuf.struct_pb2.Struct() |
698 | | - else: |
699 | | - self.__dict__['_values'] = self._parent._create_child(self._key, self._type) |
700 | | - self._values.Clear() |
| 698 | + raise ValueError('Connect specify both kwargs and args') |
701 | 699 | for key, value in kwargs.items(): |
702 | 700 | self[key] = value |
703 | 701 | elif len(args): |
704 | | - if not self._isList: |
705 | | - if not self._isUnknown: |
706 | | - raise ValueError('Cannot specify args on maps') |
707 | | - self.__dict__['_type'] = self.Type.LIST |
708 | | - if len(kwargs): |
709 | | - raise ValueError('Connect specify kwargs on lists') |
710 | | - if self._values is None: |
711 | | - if self._parent is None: |
712 | | - self.__dict__['_values'] = google.protobuf.struct_pb2.ListValue() |
713 | | - else: |
714 | | - self.__dict__['_values'] = self._parent._create_child(self._key, self._type) |
715 | | - self._values.Clear() |
716 | 702 | for key in range(len(args)): |
717 | 703 | self[key] = args[key] |
718 | 704 | return self |
@@ -767,17 +753,21 @@ def __setitem__(self, key, value): |
767 | 753 | values[key].number_value = value |
768 | 754 | elif isinstance(value, dict): |
769 | 755 | values[key].struct_value.Clear() |
770 | | - self[key](**value) |
| 756 | + for k, v in value.items(): |
| 757 | + self[key][k] = v |
771 | 758 | elif isinstance(value, (list, tuple)): |
772 | 759 | values[key].list_value.Clear() |
773 | | - self[key](*value) |
| 760 | + for ix, v in enumerate(value): |
| 761 | + self[key][ix] = v |
774 | 762 | elif isinstance(value, Values): |
775 | 763 | if value._isMap: |
776 | 764 | values[key].struct_value.Clear() |
777 | | - self[key](**{k:v for k,v in value}) |
| 765 | + for k, v in value: |
| 766 | + self[key][k] = v |
778 | 767 | elif value._isList: |
779 | 768 | values[key].list_value.Clear() |
780 | | - self[key](*[v for v in value]) |
| 769 | + for ix, v in enumerate(value): |
| 770 | + self[key][ix] = v |
781 | 771 | else: |
782 | 772 | self._unknowns[key] = value |
783 | 773 | if self._isMap: |
|
0 commit comments