
                            S r SSKJr  SSKJr  SSKJ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rSrS	rS
rSrSrSrSrSrSrSrSrSrSrSrSr " S S\5      rS rS rS rS r S r!S r"S r#S%S  jr$S! r%S" r&S# r'S$ r(g)&z<Methods for looking up completions from the static CLI tree.    )absolute_import)division)unicode_literalsN)encoding)	platforms	COMP_LINE
COMP_POINT_ARGCOMPLETE_IFS   z--booldynamicvalueenv_varcommandsflags = c                       \ rS rSrSrSrg)CannotHandleCompletionError3   z-Error for when completions cannot be handled. N)__name__
__module____qualname____firstlineno____doc____static_attributes__r       :lib/googlecloudsdk/command_lib/static_completion/lookup.pyr   r   3   s    5r    r   c                      [         R                  " [        R                  [        5      n [        [         R                  " [        R                  [        5      5      nU SU n U $ )zKGets the command line from the environment.

Returns:
  str, Command line.
N)r   GetEncodedValueosenvironLINE_ENV_VARintPOINT_ENV_VAR)cmd_linecompletion_points     r!   _GetCmdLineFromEnvr+   8   sI     %%bjj,?(11"**mLM''((	/r    c                     [         R                  " U 5      SS nU S   [        :X  a  UR                  [        5        UR                  5         U$ )zConverts the given cmd_line to a queue of command line words.

Args:
  cmd_line: str, full command line before parsing.

Returns:
  [str], Queue of command line words.
   N)shlexsplit_SPACEappend_EMPTY_STRINGreverse)r)   	cmd_wordss     r!   _GetCmdWordQueuer6   D   sI     kk(#AB') b\V]# 	r    c                  P    [         R                  R                  5       (       a  S$ S$ )N%$)r   OperatingSystem	IsWindowsr   r    r!   GetEnvVarPrefixr<   X   s!    ))3355>3>r    c                     / nU SS nU Hk  nUR                  U5      (       d  M  [        R                  R                  5       (       a  UR	                  SU-   S-   5        MW  UR	                  SU-   5        Mm     U$ )a  Returns environment variables beginning with `word`.

Args:
  word: The word that is being compared to environment variables.
  env_vars: The list of environment variables.

Returns:
  []: No completions.
  [completions]: List, all possible sorted completions.
r-   Nr8   r9   )
startswithr   r:   r;   r2   )wordenv_varscompletionsprefixchilds        r!   MatchEnvVarsrD   ]   su     +8&e		"	"	,	,	.	.3;,-3;'  
r    c                    [        U5      nU nU[           n/ n[        n[        5       n[        R
                  nU(       Ga%  UR                  5       n	U	R                  [        5      (       a]  Sn
UR                  [        0 5      nUR                  U5        [        U	;   a)  U	R                  [        S5      u  pUR                  U5        O9U	R                  U5      (       a  Sn
Un[        nOSn
UR                  [        0 5      nU(       ai  X;   a  U
(       a  X   nGOB[        nX   nGO6U[        :X  a  M  U[        :w  a	  [        nGM  U
(       d#  UR                  [        5      (       d	  [        nGM6  / $ U[         :X  a  [#        S5      eU[$        :X  a  / $ U[        :X  a  U['        X5      -  nOU[        :w  a3  U H,  nUR                  U	5      (       d  M  UR                  U5        M.     OtU(       d  [#        S5      e[(        R*                  " U5       HH  u  pUR                  U	5      (       d  M  U
(       a  U[        :w  a	  U[        -  nUR                  U5        MJ     U(       a  GM%  [-        U5      $ )aa  Try to perform a completion based on the static CLI tree.

Args:
  root: The root of the tree that will be traversed to find completions.
  cmd_line: [str], original command line.

Raises:
  CannotHandleCompletionError: If FindCompletions cannot handle completion.

Returns:
  []: No completions.
  [completions]: List, all possible sorted completions.
Tr-   Fz2Dynamic completions are not handled by this modulez5Positional completions are not handled by this module)r6   LOOKUP_FLAGSFLAG_BOOLEANr<   r$   r%   popr>   FLAG_PREFIXgetupdate
_VALUE_SEPr0   r2   ENV_VARLOOKUP_COMMANDSFLAG_DYNAMICr   
FLAG_VALUErD   six	iteritemssorted)rootr)   wordsnodeglobal_flagsrA   	flag_modeenv_var_prefixr@   r?   is_flag_wordchild_nodes
flag_valuer   rC   s                  r!   _FindCompletionsr]   s   s    8
$%	$l#,+)"$.ZZ(99;D{##lHH\2.k&	t	::j!4 	Z 		(	(lkilHH_b1k 		!')")"$$ 	DHH_$=$= !		 
l	")@B 	B
"	|D66$Ed##u%  )CE 	E  MM+6LE!!$''e|3ZE


U
# 7w 	B 
	r    c                      [         R                  R                  R                  [        R                  [         R                  R                  5      SS 5      $ )z&Returns the SDK installation root dir.N)r$   pathsepjoin__file__r0   r   r    r!   _GetInstallationRootDirrd      s5     
		(..5cr:	;;r    c                  T    [         R                  R                  [        5       SS5      $ )z/Returns the SDK static completion CLI tree dir.datacli)r$   r`   rb   rd   r   r    r!   _GetCompletionCliTreeDirrh      s     
-/	??r    c                 d    [         R                  R                  U =(       d
    [        5       S5      $ )z0Returns the SDK static completion CLI tree path.zgcloud_completions.py)r$   r`   rb   rh   )	directorys    r!   CompletionCliTreePathrk      s*     
-+-/F
H Hr    c                      [         R                  SS n [         R                  R                  [        5       5        SSKnUR
                  n U [         l        U$ ! [         a    [        S5      ef = f! W [         l        f = f)z1Loads and returns the static completion CLI tree.Nr   z.Cannot find static completion CLI tree module.)sysr`   r2   rh   gcloud_completionsSTATIC_COMPLETION_CLI_TREEImportErrorr   )sys_pathrn   trees      r!   LoadCompletionCliTreers      so    	xx{HHHOO,./88D
 CH	+ 
 :
%8: :: CHs   A
A A00A3 3B c                  8    [         R                  " [        S5      $ )z&Returns the completions output stream.wb)r$   fdopenCOMPLETIONS_OUTPUT_FDr   r    r!   _OpenCompletionsOutputStreamrx      s    	($	//r    c                  @    [        5       n [        5       n[        X5      $ )z7Returns the static completions, None if there are none.)rs   r+   r]   )rT   r)   s     r!   _GetCompletionsrz      s    		 $!(	$	))r    c                  d   [        5       n U (       a  [        R                  " [        R                  [
        [        5      nSn [        5       nUR                  UR                  U 5      R                  5       5        U(       a  UR                  5         ggg! U(       a  UR                  5         f f = f)z>Attempts completions and writes them to the completion stream.N)rz   r   r#   r$   r%   IFS_ENV_VARIFS_ENV_DEFAULTrx   writerb   encodeclose)rA   ifsfs      r!   Completer      s    !+

"
"2::{O
LCA
&
(aggchh{#**,-	
		 
  
		 
s   8B B/)N))r   
__future__r   r   r   r$   r/   rm   googlecloudsdk.core.utilr   r   rQ   r&   r(   r|   r}   rw   rI   rG   rO   rP   rM   rN   rF   r3   rL   r1   	Exceptionr   r+   r6   r<   rD   r]   rd   rh   rk   rs   rx   rz   r   r   r    r!   <module>r      s     C &  ' 	  
 - . 
   


	) 
	(?
,Yx<@H0
*r    