
    q                     d    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	  G d d      Z
y)    N   )	constants)errors)create_environment_dictc                   2    e Zd ZddZd Zd Zd Zd Zd Zy)	StoreNc                     t         j                  |z   | _        t        j                  | j                        | _        || _        | j
                  /t        j                  dj                  | j                               yy)z Create a store object that acts as an interface to
            perform the basic operations for storing, retrieving
            and erasing credentials using `program`.
        N){} not installed or not available in PATH)
r   PROGRAM_PREFIXprogramshutilwhichexeenvironmentwarningswarnformat)selfr   r   s      +lib/third_party/docker/credentials/store.py__init__zStore.__init__   sb    
 !//'9<<-&88MM;BBLL     c                    t        |t              s|j                  d      }| j                  d|      }t	        j
                  |j                  d            }|d   dk(  r*|d   dk(  r"t        j                  d| j                         |S )zt Retrieve credentials for `server`. If no credentials are found,
            a `StoreError` will be raised.
        utf-8getUsername SecretzNo matching credentials in )

isinstancebytesencode_executejsonloadsdecoder   CredentialsNotFoundr   )r   serverdataresults       r   r   z	Store.get   s     &%(]]7+F}}UF+DKK01 *#x(8B(>,,-dll^<  r   c                 v    t        j                  |||d      j                  d      }| j                  d|      S )z_ Store credentials for `server`. Raises a `StoreError` if an error
            occurs.
        )	ServerURLr   r   r   store)r"   dumpsr    r!   )r   r&   usernamesecret
data_inputs        r   r+   zStore.store0   sA     ZZ !
  6'?	 	
 }}Wj11r   c                 j    t        |t              s|j                  d      }| j                  d|       y)z_ Erase credentials for `server`. Raises a `StoreError` if an error
            occurs.
        r   eraseN)r   r   r    r!   )r   r&   s     r   r1   zStore.erase;   s*     &%(]]7+Fgv&r   c                 n    | j                  dd      }t        j                  |j                  d            S )zB List stored credentials. Requires v0.4.0+ of the helper.
        listNr   )r!   r"   r#   r$   )r   r'   s     r   r3   z
Store.listC   s,     }}VT*zz$++g.//r   c                    | j                   .t        j                  dj                  | j                              d }t        | j                        }	 t        j                  | j                   |g||      }|S # t        j                  $ r%}t        j                  || j                        d }~wt        $ r}|j                  t        j                  k(  r.t        j                  dj                  | j                              t        j                  dj                  |j                  |j                              d }~ww xY w)Nr
   )inputenvz"Unexpected OS error "{}", errno={})r   r   
StoreErrorr   r   r   r   
subprocesscheck_outputCalledProcessErrorprocess_store_errorOSErrorerrnoENOENTstrerror)r   subcmdr/   outputr6   es         r   r!   zStore._executeI   s   88##?FF 
 %d&6&67	,,6"*#F$  ,, 	>,,Q== 	ww%,,&''?FF  ''8??

AGG 	s%   $A9 9E B,,E8BD<<E)N)	__name__
__module____qualname__r   r   r+   r1   r3   r!    r   r   r   r      s     (	2'0r   r   )r=   r"   r   r8   r   r   r   r   utilsr   r   rF   r   r   <module>rH      s)           *Y Yr   