o
    ÞñÐa–  ã                   @   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.
é   )Úbackend)Ú
propertiesé   )Úfailc                   @   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   t | jƒdkr	dS tjjd S )zŸ
        If there are backends to chain, high priority
        Otherwise very low priority since our operation when empty
        is the same as null.
        r   é
   )ÚlenÚbackendsr   ÚKeyringÚpriority)Úcls© r   ú:/usr/lib/python3/dist-packages/keyring/backends/chainer.pyr      s   zChainerBackend.priorityc                 C   s&   dd„ }t |t ¡ ƒ}t|tjdd�S )z5
        Discover all keyrings for chaining.
        c                 S   s(   t jpt}t| tƒ o|| ƒo| jdkS )Né    )r   Ú_limitÚboolÚ
isinstancer   r   )ÚkeyringÚlimitr   r   r   Úallow&   s   
ÿýz&ChainerBackend.backends.<locals>.allowT)ÚkeyÚreverse)Úfilterr   Úget_all_keyringÚsortedÚby_priority)r   r   Úallowedr   r   r   r	      s   zChainerBackend.backendsc                 C   ó,   | j D ]}| ||¡}|d ur|  S qd S ©N)r	   Úget_password)ÚselfÚserviceÚusernamer   Úpasswordr   r   r   r   1   ó   
ÿþzChainerBackend.get_passwordc              	   C   s6   | j D ]}z
| |||¡W   S  ty   Y qw d S r   )r	   Úset_passwordÚNotImplementedError)r    r!   r"   r#   r   r   r   r   r%   7   s   
ÿýzChainerBackend.set_passwordc              	   C   s4   | j D ]}z	| ||¡W   S  ty   Y qw d S r   )r	   Údelete_passwordr&   )r    r!   r"   r   r   r   r   r'   >   s   
ÿýzChainerBackend.delete_passwordc                 C   r   r   )r	   Úget_credential)r    r!   r"   r   Ú
credentialr   r   r   r(   E   r$   zChainerBackend.get_credentialN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úviabler   ÚClassPropertyÚclassmethodr   r	   r   r%   r'   r(   r   r   r   r   r      s    r   N)r-   Ú r   Úutilr   r   ÚKeyringBackendr   r   r   r   r   Ú<module>   s
    