
    S                         S r SSKrSSKrSSKrSSKrSSKJr  SSKJr  SSKJ	r	  SSKJ
r
  \R                  " SS5      r " S	 S
\5      rg)zMessage registry for apitools.    N)
descriptor)messages)extended_descriptor)utilTypeInfo	type_namevariantc                      \ rS rSrSr\" S\R                  R                  S9\" S\R                  R                  S9\" S\R                  R                  S9\" S\R                  R                  S9\" S\R                  R                  S9S	.r\" S\R                  R                  S9\" S\R                  R                   S9\" S\R                  R"                  S9\" S\R                  R$                  S9\" S\R                  R&                  S9\" S\R                  R(                  S9\" S
\R*                  R                  S9\" S\R                  R,                  S9\" S\R                  R                  S9S.	rS r\S 5       rS rS rS rS rS rS r S r!S r"S r#S r$S r%\&RN                  S 5       r(S r)S r*S r+S r,S  r-S! r.S" r/\0S# 5       r1S$ r2S% r3S& r4S' r5S( r6S)r7g*)+MessageRegistry!   zRegistry for message types.

This closely mirrors a messages.FileDescriptor, but adds additional
attributes (such as message and field descriptions) and some extra
code for validation and cycle detection.
stringr   integerbooleannumberextra_types.JsonValue)r   r   r   r   anybytezextra_types.DateFieldz8apitools.base.protorpclite.message_types.DateTimeMessage)	int32uint32int64uint64doublefloatr   datez	date-timec                    X l         Xl        UR                  U l        [        R
                  " U5      U l        X@l        XPl        X`l	        [        R                  " U R                  U R                  S9U l        SU R                  -  /U R                  l        [        R                  " 5       U l        [#        5       U l        [#        5       U l        / U l        U R                  U l        g )N)packagedescriptionz$from %s import messages as _messages)_MessageRegistry__names_MessageRegistry__client_infor   _MessageRegistry__packager   CleanDescription_MessageRegistry__description"_MessageRegistry__root_package_dir$_MessageRegistry__base_files_package"_MessageRegistry__protorpc_packager   ExtendedFileDescriptor!_MessageRegistry__file_descriptoradditional_importscollectionsOrderedDict"_MessageRegistry__message_registryset_MessageRegistry__nascent_types_MessageRegistry__unknown_types_MessageRegistry__current_path_MessageRegistry__current_env)selfclient_infonamesr   root_package_dirbase_files_packageprotorpc_packages          0lib/third_party/apitools/gen/message_registry.py__init__MessageRegistry.__init__P   s    ($,,!22;?"2$6!"2!4!K!KNN0B0B"D 3T5L5LL5
1 #."9"9";"u  #u !33    c                 :    U R                  5         U R                  $ N)Validater(   )r2   s    r8   file_descriptorMessageRegistry.file_descriptorl   s    %%%r;   c                     U R                  5         [        R                  " U R                  U R                  U R
                  R                  U5        g)z(Write the messages file to out as proto.N)r>   r   WriteMessagesFiler(   r!   r    versionr2   printers     r8   WriteProtoFileMessageRegistry.WriteProtoFileq   s9    --""DNND4F4F4N4N	r;   c                     U R                  5         [        R                  " U R                  U R                  U R
                  R                  U5        g)zWrite the messages file to out.N)r>   r   WritePythonFiler(   r!   r    rC   rD   s     r8   	WriteFileMessageRegistry.WriteFilex   s9    ++""DNND4F4F4N4N	r;   c                 l    U R                   =(       d    U R                  nU(       a  [        SU-  5      eg )NzMalformed MessageRegistry: %s)r.   r/   
ValueError)r2   	mysteriess     r8   r>   MessageRegistry.Validate   s1    ((@D,@,@	<yHII r;   c                 v    SR                  [        [        R                  U R                  S S  U/-   5      5      $ )N.)joinmapsix	text_typer0   r2   names     r8   __ComputeFullName!MessageRegistry.__ComputeFullName   s.    xxCMM4+>+>q+ATF+JKLLr;   c                     XR                   R                  ;  a&  U R                   R                  R                  U5        g g r=   )r(   r)   append)r2   
new_imports     r8   __AddImportMessageRegistry.__AddImport   s4    33FFF""55<<ZH Gr;   c                 X    U R                   R                  U R                  U5      5        g r=   )r.   add!_MessageRegistry__ComputeFullNamerV   s     r8   __DeclareDescriptor#MessageRegistry.__DeclareDescriptor   s!      !7!7!=>r;   c                    [        U[        R                  [        R                  45      (       d  [	        S[        U5      < 35      eU R                  UR                  5      nX R                  ;   a  [	        SU-  5      eX R                  ;  a  [	        S5      eX!l
        XR                  U'   [        U[        R                  5      (       a&  U R                  R                  R                  U5        OD[        U[        R                  5      (       a%  U R                  R                  R                  U5        U R                  R!                  U5        U R                  R#                  U5        g)z/Register the given descriptor in this registry.zCannot add descriptor of type z$Attempt to re-register descriptor %sz&Directly adding types is not supportedN)
isinstancer   ExtendedMessageDescriptorExtendedEnumDescriptorrM   typera   rW   r,   r.   	full_namer1   message_typesr[   
enum_typesr/   discardremove)r2   new_descriptorri   s      r8   __RegisterDescriptor$MessageRegistry.__RegisterDescriptor   s9   .#==#::+< = = ^$' ( (**>+>+>?	///6BD D000EFF#, -;	*n)CCE E,,33NC+BBD D))00@$$Y/##I.r;   c                 $    U R                  U5      $ r=   )%_MessageRegistry__GetDescriptorByNamerV   s     r8   LookupDescriptor MessageRegistry.LookupDescriptor   s    ))$//r;   c                 J    U R                  U5      nUc  [        SU-  5      eU$ )Nz No message descriptor named "%s")rs   rM   )r2   rW   message_descriptors      r8   LookupDescriptorOrDie%MessageRegistry.LookupDescriptorOrDie   s0    !2248%?$FGG!!r;   c                 B    U R                  U R                  U5      5      $ r=   )rr   ra   rV   s     r8   __GetDescriptorMessageRegistry.__GetDescriptor   s    ))$*@*@*FGGr;   c                 z    XR                   ;   a  U R                   U   $ XR                  ;   a  [        SU-  5      eg )Nz0Cannot retrieve type currently being created: %s)r,   r.   rM   rV   s     r8   __GetDescriptorByName%MessageRegistry.__GetDescriptorByName   sE    *****400'''BTIK Kr;   c              #      #    U R                   nU R                  R                  UR                  5        Xl         S v   U R                  R	                  5         X l         g 7fr=   )r1   r0   r[   rW   pop)r2   rv   previous_envs      r8   __DescriptorEnvMessageRegistry.__DescriptorEnv   sN      ))""#5#:#:;/!)s   AAc                    [         R                  " 5       nU R                  R                  U5      Ul        [
        R                  " U5      Ul        U R                  UR                  5        [        [        X45      5       H  u  nu  px[         R                  " 5       n	U R                  R                  U5      U	l        U	R                  U:w  a_  UR                  R                  [         R                  R                  U	R                  US95        U R!                  SU R"                  -  5        Xil        [
        R                  " U=(       d    S5      U	l        UR&                  R                  U	5        M     U R)                  U5        g)z?Add a new EnumDescriptor named name with the given enum values.python_name	json_namefrom %s import encodingz<no description>N)r   rg   r   	ClassNamerW   r   r"   r   #_MessageRegistry__DeclareDescriptor	enumeratezipExtendedEnumValueDescriptorNormalizeEnumNameenum_mappingsr[   JsonEnumMapping_MessageRegistry__AddImportr%   r   values$_MessageRegistry__RegisterDescriptor)
r2   rW   r   enum_valuesenum_descriptionsmessageindex	enum_nameenum_description
enum_values
             r8   AddEnumDescriptor!MessageRegistry.AddEnumDescriptor   s:    &<<>||--d3"33K@  .4=K3550E0I,HHJJ"ll<<YGJO)+%%,,'>>NN$.OOy O JK   !:!%!:!:"; < %%)%:%: 6$6&8J"NN!!*-55 	!!'*r;   c                    [         R                  " 5       nU R                  R                  US   5      Ul        X#l        U R                  UR                  5        U R                  SU R                  -  5        U R                  U5        g)z)Declare schema as an alias for alias_for.idfrom %s import extra_typesN)
r   rf   r   r   rW   	alias_forr   r   r%   r   )r2   schemar   r   s       r8   __DeclareMessageAlias%MessageRegistry.__DeclareMessageAlias   sq     &??A||--fTl;%  .5223 	4!!'*r;   c                    US   nU R                  UR                  U5      n[        R                  " UR	                  S5      5      nUc  SUR                  -  nSU0USS.nSnUR
                  R                  U R                  U[        U5      S-   U5      5        U R                  S	U R                  -  5        UR                  R                  S
U-  5        g)z-Add an additionalProperties field to message.additionalPropertiesr   Nz Additional properties of type %s$refarray)itemsr   rh      r   z"encoding.MapUnrecognizedFields(%r))+_MessageRegistry__AddAdditionalPropertyTyperW   r   r"   getfieldsr[   /_MessageRegistry__FieldDescriptorFromPropertieslenr   r%   
decorators)	r2   r   r   
propertiesadditional_properties_infoentries_type_namer   attrs
field_names	            r8   __AddAdditionalProperties)MessageRegistry.__AddAdditionalProperties   s    %+,B%C" <<LL46++&**=9;<w||KK ) '
 ,
dBBJ!+U4 	52T5N5NNO!!0:=	?r;   c           	         U R                  U5      (       a  gUR                  S5      (       a  U R                  X5        gUR                  S5      S:X  a  U R                  US5        gUR                  S5      S:w  a  [	        SUR                  S5      -  5      e[
        R                  " 5       nU R                  R                  US   5      Ul	        [        R                  " UR                  S	S
UR                  -  5      5      Ul        U R                  UR                  5        U R                  U5         UR                  S0 5      n[        [!        UR#                  5       5      5       H  u  nu  pgU R%                  XeS-   U5      nUR&                  R)                  U5        UR                  U:w  d  MJ  UR*                  R)                  [-        U5      R/                  UR                  US95        U R1                  SU R2                  -  5        M     SU;   a  U R5                  X2U5        SSS5        U R7                  U5        g! , (       d  f       N = f)z>Add a new MessageDescriptor named schema_name based on schema.Nenumrh   r   r   objectz-Cannot create message descriptors for type %sr   r   zA %s object.r   r   r   r   r   )_MessageRegistry__GetDescriptorr   _MessageRegistry__DeclareEnum%_MessageRegistry__DeclareMessageAliasrM   r   rf   r   r   rW   r   r"   r   r   _MessageRegistry__DescriptorEnvr   sortedr   r   r   r[   field_mappingsrh   JsonFieldMappingr   r%   )_MessageRegistry__AddAdditionalPropertiesr   )	r2   schema_namer   r   r   r   rW   r   fields	            r8   AddDescriptorFromSchema'MessageRegistry.AddDescriptorFromSchema   s    ,,::f{3::f&&&v/FG::f)L#ZZ/0 1 1%??A||--fTl;"33FJJ>GLL85: ;  .!!'*L"5J(1&9I9I9K2L(M$}<<!)U,%%e,::%**11W66(-

d 7 DE $$1D4M4MMO )N &/..w
K + 	!!'* +*s   6A;I5A6I
Ic                     Sn[        U5      nUR                  SS5        SU-  nUSUSSS.US	.S
.nU R                  X55        U$ )z,Add a new nested AdditionalProperty message.AdditionalPropertyr   Nz'An additional property for a %s object.r   r   z Name of the additional property.)rh   r   )keyvaluer   rh   r   r   )dictr   r   )r2   rW   property_schemanew_type_namer   r   s         r8   __AddAdditionalPropertyType+MessageRegistry.__AddAdditionalPropertyType   sj    ,/ 	M40?$F& %#E )	
 	$$];r;   c                 n    UR                  SS5        SU-  nUSUSSUS.0S.nU R                  X5        U$ )	zAdd a type for a list entry.r   NzSingle entry in a %s.r   entryr   )rh   r   r   )r   r   )r2   entry_type_nameentry_schemaparent_namer   r   s         r8   __AddEntryTypeMessageRegistry.__AddEntryType7  sU    --;!&#)	

 	$$_=r;   c                    [         R                  " 5       nU R                  R                  U5      Ul        X$l        U R                  U5      Ul        U R                  R                  SU R                  R                  U5      -  5      nU R                  X55      nUR                  Ul
        UR                  Ul        SU;   a  US   nUR                  S:X  dG  UR                  [        R                  R                  :X  d  [        [         R"                  " U5      5      nUR                  [        R                  R                  :X  a  U R                  R%                  U5      nXtl        [(        R*                  " 5       nUR                  Ul        [,        R.                  " UR1                  SSUR                  -  5      5      Ul        XHl        U$ )z*Create a field descriptor for these attrs.z%sValuedefaultr   r   zA %s attribute.)r   FieldDescriptorr   	CleanNamerW   r   _MessageRegistry__ComputeLabellabelr   _MessageRegistry__GetTypeInfor	   r
   r   VariantENUMstrjsonloadsr   default_valuer   ExtendedFieldDescriptorr   r"   r   r   field_descriptor)	r2   rW   r   r   r   new_type_name_hint	type_infor   extended_fields	            r8   __FieldDescriptorFromProperties/MessageRegistry.__FieldDescriptorFromPropertiesI  s`   **,\\++D1
))%0!\\33..t446&&uA	#--!))I&GOOx/MMX%5%5%:%::djj12}} 0 0 5 55,,88A"),DDF#jj%)%:%:IIm%6%HI&K"*/'r;   c                    U R                  SS5      (       a$  [        R                  R                  R                  $ U R                  S5      S:X  a$  [        R                  R                  R
                  $ U R                  S5      (       a$  [        R                  R                  R
                  $ [        R                  R                  R                  $ )NrequiredFrh   r   repeated)r   r   r   LabelREQUIREDREPEATEDOPTIONAL)r   s    r8   __ComputeLabelMessageRegistry.__ComputeLabeld  s    99Z''--33<<<YYv')--33<<<YYz""--33<<<))//888r;   c                     [         R                  " UR                  SS5      5      nUS   nUR                  SS/[        U5      -  5      nU R	                  XXE5        U R                  U5        [        U[        R                  R                  S9$ )Nr    r   enumDescriptionsr   )
r   r"   r   r   r   _MessageRegistry__AddIfUnknownr   r   r   r   )r2   r   r   r   r   r   s         r8   __DeclareEnumMessageRegistry.__DeclareEnumn  s    ++EIImR,HIFm!IIs;'7 79y*	?I&)X5E5E5J5JKKr;   c                 
   U R                   R                  U5      nU R                  U5      nX R                  R	                  5       ;  a:  XR                  R	                  5       ;  a  U R
                  R                  U5        g g g r=   )r   r   ra   r,   keysr/   r`   )r2   r	   full_type_names      r8   __AddIfUnknownMessageRegistry.__AddIfUnknownx  sp    LL**95	//	:"9"9">">"@@!8!8!=!=!??  $$Y/ @ Ar;   c                     U R                   R                  UR                  S5      5      nUR                  S5      nU(       d  U(       d  [        SU-  5      eU(       a3  U R	                  U5        [        U[        R                  R                  S9$ SU;   a  SU-  nU R                  XQ5      $ SU;   a  U R                  R                  US   5      nUb~  UR                  R                  S5      (       a  U R                  S	U R                  -  5        UR                  R                  S
5      (       a  U R                  SU R                  -  5        U$ X@R                   ;   aO  U R                   U   nUR                  R                  S
5      (       a  U R                  SU R                  -  5        U$ US:X  Ga  UR                  S5      nU(       d  [        SU-  5      eU R                   R                  UR                  S5      =(       d    SU-  5      nU R#                  U5      n	U	[$        R&                  R(                  R*                  :X  av  U R                   R                  UR                  S5      =(       d    U5      n
U R-                  XR                  S5      U
5      n[        U[        R                  R                  S9$ U R/                  Xx5      $ US:X  a-  U R                  SU R                  -  5        U R                   S   $ US:X  ae  U(       d  [        S5      e[1        U5      nX,S'   U R3                  X,5        U R	                  U5        [        U[        R                  R                  S9$ [        SU-  5      e)z;Return a TypeInfo object for attrs, creating one if needed.r   rh   zNo type found for %sr   r   z%sValuesEnumformat)z)apitools.base.protorpclite.message_types.zmessage_types.z.from %s import message_types as _message_typeszextra_types.r   r   r   z Array type with no item type: %stitlez%sListEntryr   r   z,Cannot create subtype without some name hintr   zUnknown type: %s)r   r   r   rM   r   r   r   r   MESSAGEr   PRIMITIVE_FORMAT_MAPr	   
startswithr   r&   r%   PRIMITIVE_TYPE_INFO_MAPr   r   r   r   r   _MessageRegistry__AddEntryTyper   r   r   )r2   r   	name_hinttype_refr	   r   r   r   entry_name_hintentry_labelr   r   r   s                r8   __GetTypeInfoMessageRegistry.__GetTypeInfo  s?    <<))%))F*;<IIf%	I3e;<<) "H,<,<,D,DF F U?&2I%%i77u1155eHoFI $&&11 3* + + $$H//01 &&11.AA$$4t7P7PPR  44444Y?I""--n==  043L3LLNIIg&E !Ce!KLL"ll44		'"?mi&?AO--e4Kj88>>GGG"ll44IIg&3)5"&"5"5#YYw%7#F/(0(8(8(@(@B B%%e==%9!667 8//66(" BD D%[F$4L((;	*#X-=-=-E-EG G +i788r;   c                 `    U R                   R                   H  nU R                  U5        M     g r=   )r?   rj   _FixupMessage)r2   message_types     r8   FixupMessageFields"MessageRegistry.FixupMessageFields  s&     00>>L|, ?r;   c                    U R                  U5         UR                   H  nUR                  R                  [        R
                  R                  :X  d  M7  UR                  R                  nU R                  U5      n[        U[        R                  5      (       d  M  [        R
                  R                  UR                  l        M     UR                   H  nU R                  U5        M     S S S 5        g ! , (       d  f       g = fr=   )r   r   r   r
   r   r   r  r	   rs   re   r   rg   r   rj   r  )r2   r  r   field_type_name
field_typesubmessage_types         r8   r  MessageRegistry._FixupMessage  s    !!,/%,,))11X5E5E5M5MM&+&<&<&F&FO!%!6!6!GJ!*"5"L"LN N9A9I9I9N9N..6 - $0#=#=""?3 $> 0//s   A C8AC8AC88
D)__base_files_package__client_info__current_env__current_path__description__file_descriptor__message_registry__names__nascent_types	__package__protorpc_package__root_package_dir__unknown_typesN)8__name__
__module____qualname____firstlineno____doc__r   r   StringFieldDEFAULT_VARIANTIntegerFieldBooleanField
FloatFieldr   r  r  INT32UINT32INT64UINT64DOUBLEFLOAT
BytesFieldSTRINGr  r9   propertyr?   rF   rJ   r>   ra   r   r   r   rs   rw   r   rr   
contextlibcontextmanagerr   r   r   r   r   r   r  r   staticmethodr   r   r   r   r  r  __static_attributes__ r;   r8   r   r   !   sE    X#+#7#7#G#GIi$,$9$9$I$IKi$,$9$9$I$IKX#+#6#6#F#FH"9 ( 0 0 8 8: I"*"2"2"8"8:Y#+#3#3#:#:<H"*"2"2"8"8:X#+#3#3#:#:<X#+#3#3#:#:<H"*"2"2"8"8:6!)!4!4!D!DF#:!)!1!1!8!8:)$$,,.#.48 & &J
MI?/00"H * *+.	+?.!+F.$6 9 9L0J9X-
4r;   r   )r(  r*   r7  r   rT   apitools.base.protorpcliter   r   apitools.genr   r   
namedtupler   r   r   r;  r;   r8   <module>r?     sC   " %    
 1 / , !!*.FGx4f x4r;   