2222
2323
2424def Map (** kwargs ):
25- values = Values (None , None , google .protobuf .struct_pb2 .Struct (), Values .Type .MAP )
26- for key , value in kwargs .items ():
27- values [key ] = value
28- return values
25+ return Values (None , None , google .protobuf .struct_pb2 .Struct (), Values .Type .MAP )(** kwargs )
2926
3027def List (* args ):
31- values = Values (None , None , google .protobuf .struct_pb2 .ListValue (), Values .Type .LIST )
32- for ix , value in enumerate ( args ):
33- values [ ix ] = value
34- return values
28+ return Values (None , None , google .protobuf .struct_pb2 .ListValue (), Values .Type .LIST )( * args )
29+
30+ def Unknown ():
31+ return Values ( None , None , None , Values . Type . UNKNOWN )
3532
3633def Yaml (string , readOnly = None ):
3734 return _Object (yaml .safe_load (string ), readOnly )
@@ -618,15 +615,21 @@ def _create_child(self, key, type):
618615 raise ValueError ('Invalid key, must be a str for maps' )
619616 self .__dict__ ['_type' ] = self .Type .MAP
620617 if self ._values is None :
621- self .__dict__ ['_values' ] = self ._parent ._create_child (self ._key , self ._type )
618+ if self ._parent is None :
619+ self .__dict__ ['_values' ] = google .protobuf .struct_pb2 .Struct ()
620+ else :
621+ self .__dict__ ['_values' ] = self ._parent ._create_child (self ._key , self ._type )
622622 struct_value = self ._values .fields [key ]
623623 elif isinstance (key , int ):
624624 if not self ._isList :
625625 if not self ._isUnknown :
626626 raise ValueError ('Invalid key, must be an int for lists' )
627627 self .__dict__ ['_type' ] = self .Type .LIST
628628 if self ._values is None :
629- self .__dict__ ['_values' ] = self ._parent ._create_child (self ._key , self ._type )
629+ if self ._parent is None :
630+ self .__dict__ ['_values' ] = google .protobuf .struct_pb2 .ListValue ()
631+ else :
632+ self .__dict__ ['_values' ] = self ._parent ._create_child (self ._key , self ._type )
630633 while key >= len (self ._values .values ):
631634 self ._values .values .add ()
632635 struct_value = self ._values .values [key ]
@@ -671,13 +674,6 @@ def __call__(self, *args, **kwargs):
671674 self ._values .Clear ()
672675 for key in range (len (args )):
673676 self [key ] = args [key ]
674- else :
675- if not self ._isMap :
676- if not self ._isUnknown :
677- self .__dict__ ['_type' ] = self .Type .MAP # Assume a map is wanted
678- if self ._values is None :
679- self .__dict__ ['_values' ] = self ._parent ._create_child (self ._key , self ._type )
680- self ._values .Clear ()
681677 return self
682678
683679 def __setattr__ (self , key , value ):
@@ -692,15 +688,21 @@ def __setitem__(self, key, value):
692688 raise ValueError ('Invalid key, must be a str for maps' )
693689 self .__dict__ ['_type' ] = self .Type .MAP
694690 if self ._values is None :
695- self .__dict__ ['_values' ] = self ._parent ._create_child (self ._key , self ._type )
691+ if self ._parent is None :
692+ self .__dict__ ['_values' ] = google .protobuf .struct_pb2 .Struct ()
693+ else :
694+ self .__dict__ ['_values' ] = self ._parent ._create_child (self ._key , self ._type )
696695 values = self ._values .fields
697696 elif isinstance (key , int ):
698697 if not self ._isList :
699698 if not self ._isUnknown :
700699 raise ValueError ('Invalid key, must be an int for lists' )
701700 self .__dict__ ['_type' ] = self .Type .LIST
702701 if self ._values is None :
703- self .__dict__ ['_values' ] = self ._parent ._create_child (self ._key , self ._type )
702+ if self ._parent is None :
703+ self .__dict__ ['_values' ] = google .protobuf .struct_pb2 .ListValue ()
704+ else :
705+ self .__dict__ ['_values' ] = self ._parent ._create_child (self ._key , self ._type )
704706 values = self ._values .values
705707 while key >= len (values ):
706708 values .add ()
0 commit comments