B
    oh\                 @   s>   d Z ddlmZ ddlmZ ddlmZ G dd dejZdS )	zV
Keyring Chainer - iterates over other viable backends to
discover passwords in each.
    )absolute_import   )backend)
propertiesc               @   sX   e Zd ZdZdZejedd Zejedd Z	dd Z
d	d
 Zdd Zdd ZdS )ChainerBackendzZ
    >>> ChainerBackend()
    <keyring.backends.chainer.ChainerBackend object at ...>
    Tc             C   s   dt | jdk S )zL
        High-priority if there are backends to chain, otherwise 0.
        
      )lenbackends)cls r   7lib/python3.7/site-packages/keyring/backends/chainer.pypriority   s    zChainerBackend.priorityc             C   s*   dd t tjt D }t|tjddS )z5
        Discover all keyrings for chaining.
        c             s   s&   | ]}t |ts|jd kr|V  qdS )r   N)
isinstancer   r   ).0keyringr   r   r   	<genexpr>%   s   
z*ChainerBackend.backends.<locals>.<genexpr>T)keyreverse)filterr   Z_limitZget_all_keyringsortedZby_priority)r   Zallowedr   r   r   r
      s    zChainerBackend.backendsc             C   s,   x&| j D ]}|||}|d k	r|S qW d S )N)r
   get_password)selfserviceusernamer   passwordr   r   r   r   ,   s    zChainerBackend.get_passwordc          	   C   s8   x2| j D ](}y||||S  tk
r.   Y qX qW d S )N)r
   set_passwordNotImplementedError)r   r   r   r   r   r   r   r   r   2   s
    zChainerBackend.set_passwordc          	   C   s6   x0| j D ]&}y|||S  tk
r,   Y qX qW d S )N)r
   delete_passwordr   )r   r   r   r   r   r   r   r   9   s
    zChainerBackend.delete_passwordc             C   s,   x&| j D ]}|||}|d k	r|S qW d S )N)r
   get_credential)r   r   r   r   Z
credentialr   r   r   r   @   s    zChainerBackend.get_credentialN)__name__
__module____qualname____doc__Zviabler   ZClassPropertyclassmethodr   r
   r   r   r   r   r   r   r   r   r      s   r   N)	r#   Z
__future__r    r   utilr   ZKeyringBackendr   r   r   r   r   <module>   s   