U
    [e                     @   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   ZKeyringpriority)cls r   Z/var/www/html/services/stratfitenv/lib/python3.8/site-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   Zget_all_keyringsortedZby_priority)r   r   allowedr   r   r   r	      s    zChainerBackend.backendsc                 C   s,   | j D ] }|||}|d k	r|  S qd S N)r	   get_password)selfserviceusernamer   passwordr   r   r   r   1   s    
zChainerBackend.get_passwordc              	   C   s:   | j D ].}z||||W   S  tk
r2   Y qX qd S r   )r	   set_passwordNotImplementedError)r   r   r   r   r   r   r   r   r    7   s
    
zChainerBackend.set_passwordc              	   C   s8   | j D ],}z|||W   S  tk
r0   Y qX qd S r   )r	   delete_passwordr!   )r   r   r   r   r   r   r   r"   >   s
    
zChainerBackend.delete_passwordc                 C   s,   | j D ] }|||}|d k	r|  S qd S r   )r	   get_credential)r   r   r   r   Z
credentialr   r   r   r#   E   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'    r   utilr   r   ZKeyringBackendr   r   r   r   r   <module>   s   