
    /d_                     t   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j        e          Zdad Zdej        fd	Zd
 Zdededej        e         fdZdedededdfdZdededdfdZdedej        e         dej        ej                 fdZd ZddZddZd Z d Z!d Z"d Z#d Z$dS )z1
Core API functions and initialization routines.
    N   )backendcredentials)	platform_)failc                 \    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)keyrings    ,lib/python3.11/site-packages/keyring/core.pyset_keyringr      s5     gw566 MKLLL    returnc                  t    t           t                       t          j        t          j        t                     S )zGet current keyring backend.)r   init_backendtypingcastr   r
    r   r   get_keyringr      s)     ;w-/?@@@r   c                     t          j                    } 	 t          j        |            n# t          $ r Y nw xY wt          j                            | d          }t          j                            |          rd| }t          |          t          |d          5 }|
                    d           ddd           dS # 1 swxY w Y   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files       r   disabler*   $   s'    !!D
D   w||D/22H	w~~h  1x113	h		 O

MNNNO O O O O O O O O O O O O O O O O Os   * 
77C  CCservice_nameusernamec                 F    t                                          | |          S )z(Get password from the specified service.)r   get_passwordr+   r,   s     r   r.   r.   5   s    ==%%lH===r   passwordc                 L    t                                          | ||           dS )z3Set password for the user in the specified service.N)r   set_password)r+   r,   r0   s      r   r2   r2   :   s$    MM|Xx@@@@@r   c                 J    t                                          | |           dS )z:Delete the password for the user in the specified service.N)r   delete_passwordr/   s     r   r4   r4   ?   s"    MM!!,99999r   c                 F    t                                          | |          S )z+Get a Credential for the specified service.)r   get_credentialr/   s     r   r6   r6   D   s     ==''h???r   c                     | j         dk    S )Nr   )priority)r   s    r   recommendedr9   K   s    q  r   c                 >    t          t          |                      dS )z"
    Load a detected backend.
    N)r   _detect_backendlimits    r   r   r   O   s      &&'''''r   c                     | t           _        t                      pYt                      pKt	          t          | t          j                              t          j                    t           j	                  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filterget_all_keyringr   Keyringby_priorityr<   s    r   r;   r;   V   s_     GN

 	
==	
5'13344LNN#	
 
 
	r   c                     |                      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modules        r   _load_keyring_classrU   l   sH     $0#:#:3#?#? Kj{[%F6:&&&r   c                 B    t          |           }|j          |            S )z
    Load the specified keyring by name (a fully-qualified name to the
    keyring, such as 'keyring.backends.file.PlaintextKeyring')
    )rU   r8   )rP   class_s     r   load_keyringrX      s#    
 !..F
OO688Or   c                  d    	 t          t          j        d                   S # t          $ r Y dS w xY w)z6Load a keyring configured in the environment variable.PYTHON_KEYRING_BACKENDN)rX   r   environKeyErrorr   r   r   rB   rB      s?    BJ'?@AAA   s   ! 
//c                  x   d} t           j                            t          j                    |           }t           j                            |          sdS t          j                    }|                    |           t          |           	 |
                    d          r)|                    dd                                          }nt          j        dd          nL# t          j        t          f$ r3 t          j        d          }|                    dd|z  z              Y dS w xY w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warningrX   )r'   keyring_cfgconfigrP   loggers        r   rC   rC      s;    H',,x355x@@K7>>+&& )++F
KKvi(( 	K!::i1BCCIIKKLL,Y8IJJJ  &4   "9-->+-.	
 	
 	
 	 %%%s   AC! !AD*)D*c                     	 |                      dd                                          }t          j                            d|           dS # t
          j        t
          j        f$ r Y dS w xY w)z)load the keyring-path option (if present)r   zkeyring-pathr   N)rc   rd   rM   r    insertr^   re   NoSectionError)rk   r    s     r   ra   ra      so    zz)^44::<<4     &(CD   s   AA A+*A+)N)%__doc__r^   r   rM   rg   r    r   r   utilr   r   backendsr   rh   __name__logr   r   r
   r   r*   strOptionalr.   r2   r4   
Credentialr6   r9   r   r;   rU   rX   rB   rC   ra   r   r   r   <module>ry      s=        				 



   " " " " " " " " ' ' ' ' ' '       g!!   AW+ A A A AO O O">s >c >foc6J > > > >
As Ac AS AT A A A A
:# : : : : : :
@@!'!5@_[+,@ @ @ @! ! !( ( ( (   ,' ' '*    & & &@    r   