U
    [e_                     @   s(  d Z 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mZ ddl	m
Z ddlmZ eeZdadd Zejd	d
dZdd Zeeeje dddZeeeddddZeeddddZeeje ejej dddZdd Zd(ddZd)ddZdd Z d d! Z!d"d# Z"d$d% Z#d&d' Z$dS )*z1
Core API functions and initialization routines.
    N   )backendcredentials)	platform_)failc                 C   s   t | tjstd| adS )zSet current keyring backend.z1The keyring must be an instance of KeyringBackendN)
isinstancer   KeyringBackend	TypeError_keyring_backend)keyring r   N/var/www/html/services/stratfitenv/lib/python3.8/site-packages/keyring/core.pyset_keyring   s    r   )returnc                   C   s   t dkrt  ttjt S )zGet current keyring backend.N)r
   init_backendtypingcastr   r   r   r   r   r   get_keyring   s    r   c               	   C   s|   t  } zt|  W n tk
r*   Y nX tj| d}tj|rXd| }t|t	|d}|
d W 5 Q R X dS )z4
    Configure the null keyring as the default.
    keyringrc.cfgzRefusing to overwrite wz7[backend]
default-keyring=keyring.backends.null.KeyringN)platformconfig_rootosmakedirsOSErrorpathjoinexistsRuntimeErroropenwrite)rootfilenamemsgfiler   r   r   disable$   s    
r%   )service_nameusernamer   c                 C   s   t  | |S )z(Get password from the specified service.)r   get_passwordr&   r'   r   r   r   r(   5   s    r(   )r&   r'   passwordr   c                 C   s   t  | || dS )z3Set password for the user in the specified service.N)r   set_password)r&   r'   r*   r   r   r   r+   :   s    r+   c                 C   s   t  | | dS )z:Delete the password for the user in the specified service.N)r   delete_passwordr)   r   r   r   r,   ?   s    r,   c                 C   s   t  | |S )z+Get a Credential for the specified service.)r   get_credentialr)   r   r   r   r-   D   s    r-   c                 C   s
   | j dkS )Nr   )priority)r   r   r   r   recommendedK   s    r/   c                 C   s   t t|  dS )z"
    Load a detected backend.
    N)r   _detect_backendlimitr   r   r   r   O   s    r   c                 C   s0   | t _t p.t p.tt| t  t t j	dS )z
    Return a keyring specified in the config file or infer the best available.

    Limit, if supplied, should be a callable taking a backend and returning
    True if that backend should be included for consideration.
    )defaultkey)
r   _limitload_envload_configmaxfilterZget_all_keyringr   ZKeyringZby_priorityr1   r   r   r   r0   V   s    	r0   c                 C   s,   |  d\}}}t| tj| }t||S )a  
    Load the keyring class indicated by name.

    These popular names are tested to ensure their presence.

    >>> popular_names = [
    ...      'keyring.backends.Windows.WinVaultKeyring',
    ...      'keyring.backends.macOS.Keyring',
    ...      'keyring.backends.kwallet.DBusKeyring',
    ...      'keyring.backends.SecretService.Keyring',
    ...  ]
    >>> list(map(_load_keyring_class, popular_names))
    [...]
    .)
rpartition
__import__sysmodulesgetattr)keyring_namemodule_namesep
class_namemoduler   r   r   _load_keyring_classl   s    
rE   c                 C   s   t | }|j | S )z
    Load the specified keyring by name (a fully-qualified name to the
    keyring, such as 'keyring.backends.file.PlaintextKeyring')
    )rE   r.   )r@   class_r   r   r   load_keyring   s    rG   c                   C   s*   zt tjd W S  tk
r$   Y nX dS )z6Load a keyring configured in the environment variable.ZPYTHON_KEYRING_BACKENDN)rG   r   environKeyErrorr   r   r   r   r6      s    r6   c               	   C   s   d} t jt | }t j|s&dS t }|| t	| z,|
dr^|dd }ntddW n8 tjtfk
r   td}|dd|   Y dS X t|S )z8Load a keyring using the config file in the config root.r   Nr   zdefault-keyringr   z/Keyring config file contains incorrect values.
zConfig file: %s)r   r   r   r   r   r   configparserRawConfigParserread_load_keyring_pathhas_sectiongetstripNoOptionErrorImportErrorlogging	getLoggerwarningrG   )r"   Zkeyring_cfgconfigr@   loggerr   r   r   r7      s(    


r7   c              	   C   sD   z"|  dd }tjd| W n tjtjfk
r>   Y nX dS )z)load the keyring-path option (if present)r   zkeyring-pathr   N)rO   rP   r=   r   insertrJ   rQ   NoSectionError)rV   r   r   r   r   rM      s
    rM   )N)N)%__doc__rJ   r   r=   rS   r    r   r   utilr   r   backendsr   rT   __name__logr
   r   r   r   r%   strOptionalr(   r+   r,   Z
Credentialr-   r/   r   r0   rE   rG   r6   r7   rM   r   r   r   r   <module>   s8   
 


 