
    W                         d Z ddlmZ ddlmZ ddlmZ ddlZddlmZ ddl	m
Z
 ddl	mZ dd	lmZ dd
lmZ ddlmZ d Zd Zd Zd Zd Zd Zd Zd Zy)z$Console Prompter for compute scopes.    )absolute_import)division)unicode_literalsNscope)log)
properties)
console_io)gce)textc                 j   |}t        |      dk(  r|d   }|rt        |      }|t        | |||      r||fS |sy |t        |t	        j
                  d            |      }t        |      \  }}	t        |	      dk(  r"|	d   d   }
|	d   d   }t        | ||
|       |
|fS t        | ||||	      \  }}||fS )a  Prompt user to specify a scope.

  Args:
    resource_name: str, human readable name of the resource.
    underspecified_names: list(str), names which lack scope context.
    scopes: list(compute_scope.ScopeEnum), scopes to query for.
    default_scope: compute_scope.ScopeEnum, force this scope to be used.
    scope_lister: func(scopes, underspecified_names)->[str->[str]], callback to
        provide possible values for each scope.
  Returns:
    tuple of chosen scope_enum and scope value.
     r   NNnamekey)	len_GetSuggestedScopeValue_PromptDidYouMeanScopesortedoperator
attrgetter_FormatScopeValueChoices_PromptSuggestedScopeChoice_PromptWithScopeChoices)resource_nameunderspecified_namesscopesdefault_scopescope_listerimplicit_scopesuggested_valuescope_value_choiceschoice_nameschoice_mappingsuggested_resource_scope_enumsuggested_resourceresource_scope_enumscope_values                 8lib/googlecloudsdk/command_lib/compute/scope_prompter.pyPromptForScoper+       s    !.[AAYN-n=O"	/C .
A..	$V,,V45
 "::M!N,A$21$5a$8!'*1-/C = 24 )*<<<%<)+>&"{ 
k	))    c                     |t         j                  j                  k(  r-dj                  |j                  | dj                  |            }n-dj                  |j                  || dj                  |            }t        j                  |dd      S )z5Prompts "did you mean <scope>".  Returns str or None.z!Did you mean [{0}] for {1}: [{2}], z%Did you mean {0} [{1}] for {2}: [{3}]T)prompt_stringdefaultthrow_if_unattended)compute_scope	ScopeEnumGLOBALformat	flag_namejoinr
   PromptContinue)r   r   
scope_enumr'   messages        r*   r   r   R   s     =**111188mTYY7K-LNG 6<<0tyy!568G 
	"	"$7;
= =r,   c                    |t         j                  j                  k(  rgt        j                  j                  dj                  |j                  t        j                  t        |      |       dj                  |                   y t        j                  j                  dj                  |j                  |t        j                  t        |      |       dj                  |                   y )Nz/No scope specified. Using [{0}] for {1}: [{2}].r.   z1No {0} specified. Using {0} [{1}] for {2}: [{3}].)r2   r3   r4   r   statusPrintr5   r6   r   	Pluralizer   r7   )r   r   r9   r'   s       r*   r   r   `   s    =**111JJFMMs/0-@		&') *
 JJHOO0s/0-@		&') *r,   c                 ,   g g }}t        t        | j                               t        j                  d            D ]  }t        | |   t        j                  d            D ]  }t        |dd      }|'dj                  |j                  |j                        }n|j                  }t        |       dkD  r+|rdj                  |j                  |      }n|j                  }|j                  ||j                  f       |j                  |         ||fS )	zFFormats scope value choices for prompting and adds deprecation states.r6   r   r   
deprecatedNz	{0} ({1})r   z{0}: {1})r   listkeysr   r   getattrr5   r   stater   r6   append)r#   r$   r%   r   choice_resourcer@   choice_names          r*   r   r   n   s   !#R,d.3356"--k:<e!"5e"<&.&9&9&&AC?L$?j		!((  *"2"24 &**	 	!A	%"))%//;G++UO$8$89:+&!C<( 
~	%%r,   c           	         dj                  t        j                  t        |      |       dj	                  d t        |      D                    }dj	                  t        |j                         D cg c]  }|j                  |j                  z    c}            }t        j                  |dj                  ||            }|y||   S c c}w )z+Queries user to choose scope and its value.zFor the following {0}:
 {1}
z
 c              3   >   K   | ]  }d j                  |        yw)z- [{0}]N)r5   ).0ns     r*   	<genexpr>z*_PromptWithScopeChoices.<locals>.<genexpr>   s$      E'C! (..q1'Cs   z or z{0}choose {1}:)optionsr:   r   )r5   r   r>   r   r7   r   rB   prefixr6   r
   PromptChoice)	r   r   r#   r$   r%   titlesflagsidxs	            r*   r   r      s     ,F4>>#&:";]K:: E'-.B'CE EF  ++.A.F.F.HI.Hahh$.HIJL% 	$4$;$;E5$I	K#[# Js   1 Cc                     | t         j                  j                  k(  r
t               S | t         j                  j                  k(  r
t               S y)NT)r2   r3   ZONE_GetGCEZoneREGION_GetGCERegionr   s    r*   r   r      s=    
m%%***=
m%%,,,?	r,   c                      t         j                  j                  j                  j	                         r"t        j                         j                         S y N)r	   VALUEScorecheck_gce_metadataGetBoolc_gceMetadataRegion r,   r*   rX   rX      s9    ..668>>""$$	r,   c                      t         j                  j                  j                  j	                         r"t        j                         j                         S y rZ   )r	   r[   r\   r]   r^   r_   r`   Zonerb   r,   r*   rV   rV      s9    ..668>>  ""	r,   )__doc__
__future__r   r   r   r   "googlecloudsdk.command_lib.computer   r2   googlecloudsdk.corer   r	   googlecloudsdk.core.consoler
   googlecloudsdk.core.credentialsr   r_   googlecloudsdk.core.utilr   r+   r   r   r   r   r   rX   rV   rb   r,   r*   <module>rl      sQ     + &  '  E # * 2 8 )/*d=*&4$r,   