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 )NZdo_)r   
parse_argsvarsupdateZlist_backendsr   Zget_all_keyringprintZ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   Z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   r.   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   r,   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   Zload_keyring	Exceptionr   r,   )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   r0   m   s   zCommandLineTool.input_passwordc                 C   s    t j  }|o| t j S )z4Return password from pipe if not on TTY, else False.)r4   stdinisattystrip_last_newlineread)clsZis_piper   r   r   r9   q   s   zCommandLineTool.pass_from_pipec                 C   s   | d|  d  S )z#Strip one last newline, if present.N
)endswith)strr   r   r   r>   w   s   z"CommandLineTool.strip_last_newlineN)__name__
__module____qualname__r   r+   r#   r/   r1   r3   r&   r$   r0   classmethodr9   staticmethodr>   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   )r4   r'   r	   r+   )r'   Zclir   r   r   main}   s   
rI   __main__r2   )__doc__r:   r   r4    r   r   r   r   r   r   r	   rI   rD   exitr   r   r   r   <module>   s   
p
