
    
7                        S r SSKJr  SSKJr  SSKJr  SSKJr  SSKJr	  SSK
Jr  SSK
Jr  SS	K
Jr  SS
KJr  SSKJr  S rS rS rS r " S S\R,                  5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      rg)z?Utilities for creating/parsing update resource argument groups.    )absolute_import)division)unicode_literals)base)util)	arg_utils)update_args)yaml_command_schema_util)concept_parsers)	resourcesc                     U R                   R                  5        VVs/ s H  u  p[        R                  U;   d  M  UPM     nnnU(       d  gUS   $ s  snnf )z@Gets message field where the resource's relative name is mapped.Nr   )resource_method_paramsitemsr   REL_NAME_FORMAT_KEY)arg_datakeyvalue
api_fieldss       @lib/googlecloudsdk/command_lib/util/apis/update_resource_args.py_GetRelativeNameFieldr   &   sZ     !77==??*#		!	!U	* 
?  
 
	As
   AAc                    [        5       n[        S U R                   5       5      nU R                  R                  5        H1  u  pEXPR                  ;   d
  XQ;   d  XC;   a  M   UR                  U5        M3     [        U5      $ )z.Gets a list of all shared resource attributes.c              3   8   #    U  H  oR                   v   M     g 7fN)name).0attrs     r   	<genexpr>+_GetSharedAttributeFlags.<locals>.<genexpr>6   s     <+;4YY+;s   )setanchorsattribute_to_flag_mapr   ignored_flagsaddlist)r   shared_resource_flagsr"   anchor_names	attr_name	flag_names         r   _GetSharedAttributeFlagsr)   3   sr    %-<8+;+;<<,&<<BBDi+++*!i  E 
m	    c                    ^ ^^ U UU4S jnU$ )z+Gets a function to generate a resource arg.c                 t   > US-  nTR                   (       a  UTR                   -  nTR                  TU UTUS9$ )Nz

)presentation_flag_nameflag_name_overrider%   
group_help)r/   GenerateResourceArg)r   r/   r.   r   r"   resource_collections      r   ArgGen(_GetResourceArgGenerator.<locals>.ArgGenE   sM    &JH'''j''#-+ (  r*    )r   r1   r"   r2   s   ``` r   _GetResourceArgGeneratorr5   B   s    
 
-r*   c                     [        XS5      nU" SSS5      R                  S5      nUR                  5        Vs/ s H  nUR                  U;   d  M  UPM     sn$ s  snf )zHGenerates a list of flags needed to generate more than one resource arg.Nz	--current )r5   GetInfoGetAttributeArgsr   )r   r1   shared_flag_namesarg_genresource_arg_infoargs         r   _GenerateSharedFlagsr>   S   sp     %T+' 2t$W[1  '779
9c	&	& 
9
  
s   AAc                      ^  \ rS rSrSr\  SS j5       r        SU 4S jjrS rSS jr	S r
S rS	 rU 4S
 jrSrU =r$ )UpdateResourceArgumentGeneratorc   (Update flag generator for resource args.c                    UR                   (       a  UR                  (       a  [        nO6UR                   (       a  [        nOUR                  (       a  [        nO[
        nUR                  X#5      nUR                  U5      nU(       a%  [        R                  " SR                  U5      5      e[        U5      nU(       d%  [        R                  " SR                  U5      5      eU=(       d    / n	[        X5      n
X-   nU" U[        XU5      UUR                  UR                  U[        XU
5      UR                    Vs/ s H  oR"                  PM     snS9$ s  snf )Nz[{} is a primary resource. Primary resources are required and cannot be listed as clearable.z{} does not specify the message field where the relative name is mapped in resource_method_params. Message field name is needed in order add update args. Please update resource_method_params.)r-   r;   	api_fieldrepeatedcollections
is_primaryshared_attribute_flagsr&   )	multityperE   ,UpdateMultitypeListResourceArgumentGenerator(UpdateMultitypeResourceArgumentGenerator#UpdateListResourceArgumentGenerator&UpdateDefaultResourceArgumentGeneratorGetPresentationFlagNameIsPrimaryResourcer   InvalidSchemaErrorformatr   r)   r5   rF   r>   r    r   )clsr   method_resource_collectionis_list_methodr%   gen_clsr-   rG   rD   shared_flagsrH   all_shared_flagsr   s                r   FromArgData+UpdateResourceArgumentGenerator.FromArgDataf   sH   
 h//<g			8g			3g6g%=="4++,FGJ##++162H+I 
 &h/I##$ %+F+A$B	  ).BL5  .<5(2BD""((  42H J,4,<,<=,<Dii,<=  >s   >Ec
                    > [         [        U ]  5         [        R                  " U5      U l        X l        X0l        X@l        XPl	        U=(       d    / U l
        Xpl        U=(       d    / U l        U	=(       d    / U l        g r   )superr@   __init__format_utilNormalizeFormatarg_namer;   	is_hiddenrD   rE   rF   rG   rH   r&   )selfr-   r;   r`   rD   rE   rF   rG   rH   r&   	__class__s             r   r\   (UpdateResourceArgumentGenerator.__init__   sh     

)49;// DMLNNM"(bD O"8">BD$*Dr*   c                 z    [        U R                  5      S:  a  UnOU R                  n[        R                  " X2S9$ )N   flag_prefix)lenr&   r_   r   GetFlagName)ra   r'   flag_prefix_value	base_names       r   _GetAnchorFlag.UpdateResourceArgumentGenerator._GetAnchorFlag   s4    
4!i--i  JJr*   c                     U=(       a    UR                   n[        R                  " U R                  US9nU R                   Vs0 s H  nXPR                  XS5      _M     nnU R                  XBUS9$ s  snf )Nrf   )r/   r.   )r   r   ri   r_   r&   rl   r;   )ra   rg   r/   prefixr(   anchor_namer.   s          r   _CreateResourceFlag3UpdateResourceArgumentGenerator._CreateResourceFlag   s    .[..F%%I  ,,,K 	((==,  
 <<=O  Q Qs   A0c                     S nU R                    H7  n [        R                  R                  UUR                  UR
                  S9nM9     U$ ! [        R                   a     MT  f = f)N)api_version)rF   r   REGISTRYParseRelativeName	full_namert   Error)ra   r   resource
collections       r   _RelativeName-UpdateResourceArgumentGenerator._RelativeName   sk    H&&
%%77  ".. 8 0 ' O __ s   3AA$#A$c                    [        U[        R                  5      (       a   [        R                  " XR
                  5      $ [        U[        R                  5      (       a  [        UR                  R                  5       5      n[        U5      S:w  a.  [        SR                  U[        U 5      R                  5      5      eUS   n[        R                  " UR                   U5      nU(       a  UR#                  5       nU$ g)zRetrieves namespace value associated with flag.

Args:
  namespace: The parsed command line argument namespace.
  arg: base.Argument|concept_parsers.ConceptParser|None, used to get
    namespace value

Returns:
  value parsed from namespace
re   zConceptParser must contain exactly one spec for clearable but found specs {}. {} cannot parse the namespace value if more than or less than one spec is added to the ConceptParser.r   N)
isinstancer   Argumentr   GetFromNamespacer   r   ConceptParserr$   specskeysrh   
ValueErrorrQ   type__name__CONCEPTSParse)ra   	namespacer=   all_anchorsr   r   s         r   GetArgFromNamespace3UpdateResourceArgumentGenerator.GetArgFromNamespace   s     #t}}%%''	88<<#4455)*k	[	Q	 $VKd1D1DE	G 	G
 ^d((););TBe	lr*   c                    ^  [         R                  " UT R                  5      nU(       d  g [        U[        5      (       a'  U 4S jU 5       nU Vs/ s H  oD(       d  M  UPM     sn$ T R                  U5      $ s  snf )Nc              3   F   >#    U  H  nTR                  U5      v   M     g 7fr   )r{   )r   vra   s     r   r   KUpdateResourceArgumentGenerator.GetFieldValueFromMessage.<locals>.<genexpr>   s     =u!**1--us   !)r   GetFieldValueFromMessagerD   r~   r$   r{   )ra   existing_messager   relative_namesr   s   `    r   r   8UpdateResourceArgumentGenerator.GetFieldValueFromMessage   sd    ../?PE%=u=n-6~td~66&& 7s   
A8A8c                 >   > [         [        U ]  U R                  5      $ r   )r[   r@   GeneraterH   )ra   rb   s    r   r   (UpdateResourceArgumentGenerator.Generate   s!    0$@##% %r*   )	r&   rD   r;   r_   rF   r`   rG   rE   rH   )FN)NFNFNNNN)NN)r   
__module____qualname____firstlineno____doc__classmethodrX   r\   rl   rq   r{   r   r   r   __static_attributes____classcell__)rb   s   @r   r@   r@   c   sc    0@E 2 2n !+0KQ<	'% %r*   r@   c                   T    \ rS rSrSr\S 5       r\S 5       r\S 5       rS r	S r
Srg	)
rM   i  rB   c                     g r   r4   ra   s    r   _empty_value3UpdateDefaultResourceArgumentGenerator._empty_value      r*   c                 R    U R                  SR                  U R                  5      S9$ NzSet {} to new value.r/   rq   rQ   r_   r   s    r   set_arg.UpdateDefaultResourceArgumentGenerator.set_arg
  .    ##)00? $ A Ar*   c                     U R                  U R                  [        R                  R                  SSU R                   SU R                  U R                  5       S3S9$ N
store_truezClear z value and set to .)rg   action	help_text_CreateFlagr_   r	   PrefixCLEAR_GetTextFormatOfEmptyValuer   r   s    r   	clear_arg0UpdateDefaultResourceArgumentGenerator.clear_arg  b    &&,,T]]O $11$2C2CDEQH   r*   c                     U(       a  U$ U$ r   r4   ra   outputset_vals      r   ApplySetFlag3UpdateDefaultResourceArgumentGenerator.ApplySetFlag      nMr*   c                 ,    U(       a  U R                   $ U$ r   r   ra   r   
clear_flags      r   ApplyClearFlag5UpdateDefaultResourceArgumentGenerator.ApplyClearFlag      Mr*   r4   Nr   r   r   r   r   propertyr   r   r   r   r   r   r4   r*   r   rM   rM     sK    0  A A  
r*   rM   c                   T    \ rS rSrSr\S 5       r\S 5       r\S 5       rS r	S r
Srg	)
rK   i%  z2Update flag generator for multitype resource args.c                     g r   r4   r   s    r   r   5UpdateMultitypeResourceArgumentGenerator._empty_value(  r   r*   c                 R    U R                  SR                  U R                  5      S9$ r   r   r   s    r   r   0UpdateMultitypeResourceArgumentGenerator.set_arg,  r   r*   c                     U R                  U R                  [        R                  R                  SSU R                   SU R                  U R                  5       S3S9$ r   r   r   s    r   r   2UpdateMultitypeResourceArgumentGenerator.clear_arg1  r   r*   c                 B    U=(       a    UR                   =n(       a  U$ U$ r   result)ra   r   r   r   s       r   r   5UpdateMultitypeResourceArgumentGenerator.ApplySetFlag<  s     ,gnn-v-mmr*   c                 ,    U(       a  U R                   $ U$ r   r   r   s      r   r   7UpdateMultitypeResourceArgumentGenerator.ApplyClearFlagB      mr*   r4   Nr   r4   r*   r   rK   rK   %  sK    :  A A  r*   rK   c                       \ rS rSrSr\S 5       r\S 5       r\S 5       r\S 5       r	\S 5       r
S rS	 rS
 rS rSrg)rL   iI  z-Update flag generator for list resource args.c                     / $ r   r4   r   s    r   r   0UpdateListResourceArgumentGenerator._empty_valueL      Ir*   c                 <    U R                  SU R                   S3S9$ NzSet z to new value.r   rq   r_   r   s    r   r   +UpdateListResourceArgumentGenerator.set_argP  *    ##$--7 $ 9 9r*   c                     U R                  U R                  [        R                  R                  SSU R                   SU R                  U R                  5       S3S9$ r   r   r   s    r   r   -UpdateListResourceArgumentGenerator.clear_argU  r   r*   c                 n    U R                  [        R                  R                  SU R                   S3S9$ NzAdd new value to  list.rg   r/   rq   r	   r   ADDr_   r   s    r   
update_arg.UpdateListResourceArgumentGenerator.update_arg`  9    ##&&**&t}}oV< $ > >r*   c                 n    U R                  [        R                  R                  SU R                   S3S9$ NzRemove value from r   r   rq   r	   r   REMOVEr_   r   s    r   
remove_arg.UpdateListResourceArgumentGenerator.remove_argf  9    ##&&--'f= $ ? ?r*   c                     U(       a  U$ U$ r   r4   r   s      r   r   0UpdateListResourceArgumentGenerator.ApplySetFlagl  r   r*   c                 ,    U(       a  U R                   $ U$ r   r   r   s      r   r   2UpdateListResourceArgumentGenerator.ApplyClearFlagq  r   r*   c                 |    U=(       d    U R                   nU(       a  U Vs/ s H  oDU;  d  M
  UPM     sn$ U$ s  snf r   r   )ra   existing_val
remove_valr   xs        r   ApplyRemoveFlag3UpdateListResourceArgumentGenerator.ApplyRemoveFlagv  s9    -D--E6A:"5a66l 7s   	99c                     U=(       d    U R                   nU(       a  X Vs/ s H  oDU;  d  M
  UPM     sn-   $ U$ s  snf r   r   ra   r   
update_valr   r   s        r   ApplyUpdateFlag3UpdateListResourceArgumentGenerator.ApplyUpdateFlag}  s>    -D--E
E
1unQ
EEEl Fs   	;;r4   Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r4   r*   r   rL   rL   I  s{    5  9 9   > >
 ? ?


r*   rL   c                       \ rS rSrSr\S 5       r\S 5       r\S 5       r\S 5       r	\S 5       r
S rS	 rS
 rS rSrg)rJ   i  z7Update flag generator for multitype list resource args.c                     / $ r   r4   r   s    r   r   9UpdateMultitypeListResourceArgumentGenerator._empty_value  r   r*   c                 <    U R                  SU R                   S3S9$ r   r   r   s    r   r   4UpdateMultitypeListResourceArgumentGenerator.set_arg  r   r*   c                     U R                  U R                  [        R                  R                  SSU R                   SU R                  U R                  5       S3S9$ r   r   r   s    r   r   6UpdateMultitypeListResourceArgumentGenerator.clear_arg  r   r*   c                 n    U R                  [        R                  R                  SU R                   S3S9$ r   r   r   s    r   r   7UpdateMultitypeListResourceArgumentGenerator.update_arg  r   r*   c                 n    U R                  [        R                  R                  SU R                   S3S9$ r   r   r   s    r   r   7UpdateMultitypeListResourceArgumentGenerator.remove_arg  r   r*   c                 ~    U Vs/ s H!  o3R                   (       d  M  UR                   PM#     nnU(       a  U$ U$ s  snf r   r   )ra   r   r   valresource_lists        r   r   9UpdateMultitypeListResourceArgumentGenerator.ApplySetFlag  s4    +2A7CjjZSZZ7MAm	 Bs   ::c                 ,    U(       a  U R                   $ U$ r   r   r   s      r   r   ;UpdateMultitypeListResourceArgumentGenerator.ApplyClearFlag  r   r*   c                     U=(       d    U R                   n[        S U 5       5      =n(       a  U Vs/ s H  oUU;  d  M
  UPM     sn$ U$ s  snf )Nc              3   ^   #    U  H#  oR                   (       d  M  UR                   v   M%     g 7fr   r   )r   r  s     r   r   OUpdateMultitypeListResourceArgumentGenerator.ApplyRemoveFlag.<locals>.<genexpr>  s     NZc::zszzZs   --)r   r   )ra   r   r   r   remove_resourcesr   s         r   r   <UpdateMultitypeListResourceArgumentGenerator.ApplyRemoveFlag  sN    -D--ENZNNNN<A+;";a<<l =s   	A Ac                     U=(       d    U R                   nU(       a1  UU Vs/ s H   oDR                  U;  d  M  UR                  PM"     sn-   $ U$ s  snf r   )r   r   r   s        r   r   <UpdateMultitypeListResourceArgumentGenerator.ApplyUpdateFlag  sY    -D--E&A&q((%*?(!((JA A A lAs
   AAr4   Nr  r4   r*   r   rJ   rJ     s{    ?  9 9   > >
 ? ?
r*   rJ   N)r   
__future__r   r   r   googlecloudsdk.callioper    googlecloudsdk.calliope.conceptsr   r]   $googlecloudsdk.command_lib.util.apisr   r	   r
   (googlecloudsdk.command_lib.util.conceptsr   googlecloudsdk.corer   r   r)   r5   r>   UpdateArgumentGeneratorr@   rM   rK   rL   rJ   r4   r*   r   <module>r"     s     F &  ' ( @ : < Q D )
" ]%k&I&I ]%@-L D!/N !H9*I 9x>#>r*   