
    Dj>	                        d Z ddlZddlZddlZddlmZ ddlZdZej        	                                fde
dee
         fdZde
defdZde
dee
         fd	Zde
d
e
ddfdZde
ddfdZdde
dede
fdZde
de
fdZde
defdZdede
fdZdS )zUtils.    N)Optionalzpyicloud://icloud-passwordusernamereturnc                 `    t          |           }|r|S |rt          j        d|  d          S dS )zGet the password from a username.
    Returns the password if found in keyring or if interactive is True.
    Returns None if no password is found and interactive is False.zEnter iCloud password for z: N)get_password_from_keyringgetpass)r   interactiveresults      I/home/thesage/.hermes/venv/lib/python3.11/site-packages/pyicloud/utils.pyget_passwordr      sO     6h??F  JHHHHHIIIJ J    c                 $    t          |           duS )z@Return true if the password of a username exists in the keyring.N)r   r   s    r   password_exists_in_keyringr      s    $X..d::r   c                 6    t          j        t          |           S )z!Get the password from a username.)keyringr   KEYRING_SYSTEMr   s    r   r   r      s    999r   passwordc                 8    t          j        t          | |          S )z!Store the password of a username.)r   set_passwordr   )r   r   s     r   store_password_in_keyringr   #   s       r   c                 6    t          j        t          |           S )z"Delete the password of a username.)r   delete_passwordr   r   s    r   delete_password_in_keyringr   ,   s    "  r   Fwordinitial_capitalc                     d |                      d          D             }|s|d                                         |d<   d                    |          S )zTransform a word to camelCase.c                 :    g | ]}|                                 pd S )_)
capitalize).0xs     r   
<listcomp>z+underscore_to_camelcase.<locals>.<listcomp>6   s%    GGG!-#GGGr   r   r    )splitlowerjoin)r   r   wordss      r   underscore_to_camelcaser)   4   sN    GGtzz#GGGE $8>>##a775>>r   	camel_strc                    g }t          |           D ][\  }}|                                r|dk    r|                    d           |                    |                                           \d                    |          S )z
    Convert camelCase string to snake_case.

    Examples:
        startDate -> start_date
        localStartDate -> local_start_date
        hasAttachments -> has_attachments
    r   r   r$   )	enumerateisupperappendr&   r'   )r*   r
   ichars       r   camelcase_to_underscorer1   =   s{     FY'' $ $4<<>> 	a!eeMM#djjll####776??r   sc                 X    t          j        | dt          |            dz  z  z             S )z"Decode a base64url encoded string.=   )base64urlsafe_b64decodelen)r2   s    r   b64url_decoder9   N   s)    #AAw{(;$;<<<r   bc                 N    t          j        |                                           S )z(Encode bytes to a base64 encoded string.)r6   	b64encodedecode)r:   s    r   
b64_encoder>   S   s    A%%'''r   )F)__doc__r6   r   systypingr   r   r   stdoutisattystrr   boolr   r   r   r   r)   r1   bytesr9   r>    r   r   <module>rH      s      



       - -0J,=,=,?,? 	J 	J3 	JHSM 	J 	J 	J 	J; ; ; ; ; ;
: : : : : :
 s t          #      s s    "=S =U = = = =
(% (C ( ( ( ( ( (r   