@@ -37,21 +37,29 @@ def Unknown():
3737
3838def Yaml (string , readOnly = None ):
3939 if isinstance (string , (FieldMessage , Value )):
40+ if not string :
41+ return string
4042 string = str (string )
4143 return Value (None , None , yaml .safe_load (string ), readOnly )
4244
4345def Json (string , readOnly = None ):
4446 if isinstance (string , (FieldMessage , Value )):
47+ if not string :
48+ return string
4549 string = str (string )
4650 return Value (None , None , json .loads (string ), readOnly )
4751
4852def B64Encode (string ):
4953 if isinstance (string , (FieldMessage , Value )):
54+ if not string :
55+ return string
5056 string = str (string )
5157 return base64 .b64encode (string .encode ('utf-8' )).decode ('utf-8' )
5258
5359def B64Decode (string ):
5460 if isinstance (string , (FieldMessage , Value )):
61+ if not string :
62+ return string
5563 string = str (string )
5664 return base64 .b64decode (string .encode ('utf-8' )).decode ('utf-8' )
5765
@@ -684,10 +692,11 @@ def __getattr__(self, key):
684692
685693 def __getitem__ (self , key ):
686694 key = self ._validate_key (key )
687- if key in self ._cache :
688- return self ._cache [key ]
689- if key in self ._unknowns :
690- return self ._unknowns [key ]
695+ if key != append :
696+ if key in self ._cache :
697+ return self ._cache [key ]
698+ if key in self ._unknowns :
699+ return self ._unknowns [key ]
691700 if isinstance (key , str ):
692701 match self ._kind :
693702 case 'struct_value' :
@@ -701,14 +710,26 @@ def __getitem__(self, key):
701710 elif isinstance (key , int ):
702711 match self ._kind :
703712 case 'list_value' :
713+ if key < 0 :
714+ key = len (self ._value .list_value .values ) + key
715+ if key < 0 :
716+ key = 0
704717 if key < len (self ._value .list_value .values ):
705718 value = self ._value .list_value .values [key ]
706719 else :
720+ if key == append :
721+ key = len (self ._value .list_value .values )
707722 value = _Unknown
708723 case 'ListValue' :
724+ if key < 0 :
725+ key = len (self ._value .values ) + key
726+ if key < 0 :
727+ key = 0
709728 if key < len (self ._value .values ):
710729 value = self ._value .values [key ]
711730 else :
731+ if key == append :
732+ key = len (self ._value .values )
712733 value = _Unknown
713734 case 'Unknown' :
714735 value = _Unknown
0 commit comments