
                         j   d Z ddlmZ ddlmZ ddlmZ ddlZddlZddlZddl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Z G d
 de      Z G d d ej(                  ej*                  e            Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      ZddZd Zy)zTools for launching a browser.    )absolute_import)division)unicode_literalsN)parser)log)encoding)filesc                       e Zd Zd Zy)FakeSubprocessModulec                     t        j                  t        j                        5 }|j	                  ||d       t        j                  |fi |cd d d        S # 1 sw Y   y xY w)N)stderrstdout)r	   
FileWriterosdevnullupdate
subprocessPopen)selfargskwargsr   s       5lib/googlecloudsdk/command_lib/interactive/browser.pyr   zFakeSubprocessModule.Popen%   sF    			"**	%mmw':;d-f- 
&	%	%s   *AA!N)__name__
__module____qualname__r        r   r   r   #   s    .r   r   c                   ^    e Zd ZdZd Zej                  d        Zej                  d        Zy)CommandReferenceMapperz7Command to URL or man page reference mapper base class.c                      || _         || _        y )N)clir   )r   r!   r   s      r   __init__zCommandReferenceMapper.__init__.   s    DHDIr   c                      y)z6Returns the man-style command for the command in args.Nr   r   s    r   GetManzCommandReferenceMapper.GetMan2        r   c                      y)z1Returns the help doc URL for the command in args.Nr   r$   s    r   GetURLzCommandReferenceMapper.GetURL7   r&   r   N)	r   r   r   __doc__r"   abcabstractmethodr%   r(   r   r   r   r   r   +   s>    ?    r   r   c                       e Zd ZdZd Zd Zy)GcloudReferenceMapperzgcloud help reference mapper.c                 @    dj                  | j                  dgz         S )N z--helpjoinr   r$   s    r   r%   zGcloudReferenceMapper.GetMan@   s    88DII
*++r   c                 F    dj                  dg| j                  dd  z         S )N/z-https://cloud.google.com/sdk/gcloud/reference   r0   r$   s    r   r(   zGcloudReferenceMapper.GetURLC   s*    88	89DIIabMIK Kr   Nr   r   r   r)   r%   r(   r   r   r   r-   r-   =   s    %,Kr   r-   c                       e Zd ZdZd Zd Zy)BqReferenceMapperzbq help reference mapper.c                 &    | j                   d   dz   S )Nr   z help | less)r   r$   s    r   r%   zBqReferenceMapper.GetManK   s    99Q<.((r   c                      y)Nz6https://cloud.google.com/bigquery/bq-command-line-toolr   r$   s    r   r(   zBqReferenceMapper.GetURLN   s    Cr   Nr5   r   r   r   r7   r7   H   s    !)Dr   r7   c                   .     e Zd ZdZ fdZd Zd Z xZS )GsutilReferenceMapperzgsutil help reference mapper.c                 r    t         t        |   ||       t        |      dkD  r|d   nd| _        dg| _        y )Nr4    z,https://cloud.google.com/storage/docs/gsutil)superr;   r"   len
subcommandrefr   r!   r   	__class__s      r   r"   zGsutilReferenceMapper.__init__U   s6    	
/T:!$TQd1gBDO>?DHr   c                     dg}| j                   r|j                  | j                          |j                  d       dj                  |      S )Nzgsutil help| lessr/   r@   appendr1   r   cmds     r   r%   zGsutilReferenceMapper.GetManZ   s:    /C	jj!JJx88C=r   c                     | j                   r@| j                  j                  d       | j                  j                  | j                          dj                  | j                        S )Ncommandsr3   r@   rA   rG   r1   r$   s    r   r(   zGsutilReferenceMapper.GetURLa   s@    
hhooj!
hhoodoo&88DHHr   r   r   r   r)   r"   r%   r(   __classcell__rC   s   @r   r;   r;   R   s    %@
r   r;   c                   .     e Zd ZdZ fdZd Zd Z xZS )KubectlReferenceMapperzkubectl help reference mapper.c                 R   t         t        |   ||       t        |      dkD  r|d   nd| _        	 |j
                  t        j                     |d      t        j                     }dj                  |j                  d      dd       }d|g| _        y # t        t        f$ r d}Y w xY w)Nr4   r=   r   .   zv1.8z-https://kubernetes.io/docs/user-guide/kubectl)r>   rQ   r"   r?   r@   rootr   LOOKUP_COMMANDSLOOKUP_CLI_VERSIONr1   split
IndexErrorKeyErrorrA   )r   r!   r   full_versionversionrC   s        r   r"   zKubectlReferenceMapper.__init__k   s    	
 $0d;!$TQd1gBDOhhv556tAw?002l++C0156g @IDH ! gs   AB B&%B&c                     dg}| j                   r|j                  | j                          |j                  d       dj                  |      S )Nzkubectl helprE   r/   rF   rH   s     r   r%   zKubectlReferenceMapper.GetManv   s;    
C	jj!JJx88C=r   c                     | j                   r(| j                  j                  d| j                   z          dj                  | j                        S )N#r3   rL   r$   s    r   r(   zKubectlReferenceMapper.GetURL}   s5    
hhoocDOO+,88DHHr   rM   rO   s   @r   rQ   rQ   h   s    &	Jr   rQ   c                   .     e Zd ZdZ fdZd Zd Z xZS )UnknownReferenceMapperz&Unkmown command help reference mapper.c                 h    t         t        |   ||       t        j                  |d         | _        y )Nr   )r>   ra   r"   r	   FindExecutableOnPathknownrB   s      r   r"   zUnknownReferenceMapper.__init__   s+    	
 $0d;++DG4DJr   c                 @    | j                   sy d| j                  d   z   S )Nzman r   )rd   r   r$   s    r   r%   zUnknownReferenceMapper.GetMan   s    ::DIIaL  r   c                     | j                   sy dt        j                  v rddg}ndg}|j                  | j                  d   dz          dj                  |      S )Ndarwinz8https://developer.apple.com/legacy/library/documentationzDarwin/Reference/ManPages/man1z$http://man7.org/linux/man-pages/man1r   z.1.htmlr3   )rd   sysplatformrG   r   r1   )r   rA   s     r   r(   zUnknownReferenceMapper.GetURL   sV    ::3<<G-/c 44cJJtyy|i'(88C=r   rM   rO   s   @r   ra   ra      s    .5!
	r   ra   c                 V   t         t        t        t        d}|t	        |      }g }| j
                  j                  |      D ]  }|j                  |k  s|rj|j                  j                  t
        j                        sA|j                  t
        j                  j                  t
        j                  j                  fv s|j                  |j                           |s|ryg d}|j                  |d   t"              } || |      }|r|j%                         S |j'                         S )a_  Determine the reference url of the command/group preceding the pos.

  Args:
    cli: the prompt CLI object
    line: a string with the current string directly from the shell.
    pos: the position of the cursor on the line.
    man_page: Return help/man page command line if True.

  Returns:
    A string containing the URL of the reference page.
  )bqgcloudgsutilkubectlN)rl   alphainteractiver   )r7   r-   r;   rQ   r?   r   ParseCommandstarttreegetrV   
token_typeArgTokenTypeCOMMANDGROUPrG   valuera   r%   r(   )	r!   lineposman_pagemappersr   argmapper_classmappers	            r   _GetReferenceURLr      s     %%'	' 	[
d)C	$ZZ$$T*c
yy3V++,6..66!..446 	6
kk#)) + 
-DT!W&<=,T"&$9&--/9r   c                    t        t        j                  t        j                  d            }t        | |||      }|sy|r| j                  |d       yt               t        _	        	 t        j                         }|j                  |       y# t        j                  $ r| j                  fd       Y dydww xY w)z;Opens a web browser or local help/man page for line at pos.
SSH_CLIENTNT)alternate_screenc                  0    t        j                  d       S )Nzfailed to open browser: %s)r   error)es   r   <lambda>z#OpenReferencePage.<locals>.<lambda>   s    		6:r   )boolr   GetEncodedValuer   environr   Runr   
webbrowserr   rt   open_new_tabErrorrun_in_terminal)r!   rz   r{   r|   rA   browserr   s         @r   OpenReferencePager      s    (**2::|DE(dC2#	
GGC$G'
.0*<nnG			 <:< <<s   *%B C#B<<C)NF)r)   
__future__r   r   r   r*   r   r   rh   r   &googlecloudsdk.command_lib.interactiver   googlecloudsdk.corer   googlecloudsdk.core.utilr   r	   sixobjectr   with_metaclassABCMetar   r-   r7   r;   rQ   ra   r   r   r   r   r   <module>r      s     % &  ' 
 	  
  9 # - * 
.6 ./S//VD $K2 KD. D2 ,3 63 0$:N<r   