o
    aT                     @   s   d 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mZm	Z	m
Z
 G dd dZdd	d
Zedkr>ee  dS dS )z@Simple command line interface to get/set password from a keyring    N   )core)backend)set_keyringget_passwordset_passworddelete_passwordc                   @   sl   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zedd Zedd ZdS )CommandLineToolc                 C   s   t  | _| jjdddd dd | jjdddd d	d | jjd
ddd | jjdddd | jjdddd | jjddd | jjddd d S )Nz-pz--keyring-pathkeyring_pathzPath to the keyring backend)destdefaulthelpz-bz--keyring-backendkeyring_backendzName of the keyring backendz--list-backends
store_truezList keyring backends and exit)actionr   z	--disablezDisable keyring and exit	operationzget|set|del?)r   nargsservice)r   username)argparseArgumentParserparseradd_argumentself r   -/usr/lib/python3/dist-packages/keyring/cli.py__init__   sH   

zCommandLineTool.__init__c                 C   s|   | j |}t| t| |jrt D ]}t| qd S |jr(t	  d S | 
  |   t| d| j | j}| S )Ndo_)r   
parse_argsvarsupdatelist_backendsr   get_all_keyringprintdisabler   _check_args_load_spec_backendgetattrr   
invalid_op)r   argvargskmethodr   r   r   run4   s   
zCommandLineTool.runc                 C   s:   | j r| jd u s| jd u r| j| j  d d S d S d S )Nz requires service and username)r   r   r   r   errorr   r   r   r   r'   F   s
   zCommandLineTool._check_argsc                 C   s*   t | j| j}|d u rtdt| d S )Nr   )r   r   r   
SystemExitr%   r   passwordr   r   r   do_getK   s   zCommandLineTool.do_getc                 C   s0   |  d| j d| j d}t| j| j| d S )NzPassword for 'z' in 'z': )input_passwordr   r   r   r2   r   r   r   do_setQ   s   zCommandLineTool.do_setc                 C   s   t | j| j d S N)r   r   r   r   r   r   r   do_delW   s   zCommandLineTool.do_delc                 C   s   | j d d S )Nz)Specify operation 'get', 'del', or 'set'.)r   r0   r   r   r   r   r*   Z   s   zCommandLineTool.invalid_opc              
   C   sv   | j d u rd S z| jrtjd| j tt| j  W d S  tfy: } z| j	
d|  W Y d }~d S d }~ww )Nr   z"Unable to load specified keyring: )r   r
   syspathinsertr   r   load_keyring	Exceptionr   r0   )r   excr   r   r   r(   ]   s   
 z"CommandLineTool._load_spec_backendc                 C   s   |   pt|S )zRetrieve password from input.)pass_from_pipegetpass)r   promptr   r   r   r5   m   s   zCommandLineTool.input_passwordc                 C   s    t j  }|o| t j S )z4Return password from pipe if not on TTY, else False.)r9   stdinisattystrip_last_newlineread)clsis_piper   r   r   r?   q   s   zCommandLineTool.pass_from_pipec                 C   s   | d|  d  S )z#Strip one last newline, if present.N
)endswith)strr   r   r   rD   w   s   z"CommandLineTool.strip_last_newlineN)__name__
__module____qualname__r   r/   r'   r4   r6   r8   r*   r(   r5   classmethodr?   staticmethodrD   r   r   r   r   r	      s    &
r	   c                 C   s&   | du rt jdd } t }|| S )zMain command line interface.Nr   )r9   r+   r	   r/   )r+   clir   r   r   main}   s   
rQ   __main__r7   )__doc__r@   r   r9    r   r   r   r   r   r   r	   rQ   rK   exitr   r   r   r   <module>   s   
p
