o
    Õl>jh  ã                   @   s@   d dl Z d dlmZ d dlmZ d dlmZ G dd„ deƒZdS )é    N)Ú
properties)Úerrors)ÚKeyringBackendc                   @   s@   e Zd ZdZddd„Zejdd„ ƒZdd„ Zd	d
„ Z	dd„ Z
dS )ÚMultipartKeyringWrapperz¾A wrapper around an existing keyring that breaks the password into
    smaller parts to handle implementations that have limits on the maximum
    length of passwords i.e. Windows Vault
    é   c                 C   s   || _ || _d S )N)Ú_keyringÚ_max_password_size)ÚselfÚkeyringÚmax_password_size© r   úG/home/thesage/.local/lib/python3.10/site-packages/keyrings/alt/multi.pyÚ__init__   s   
z MultipartKeyringWrapper.__init__c                 C   s   dS )Nr   r   )Úclsr   r   r   Úpriority   s   z MultipartKeyringWrapper.priorityc                 C   s^   | j  ||¡}|r-|g}d}	 | j  |d||f ¡}|r&| |¡ |d7 }nnqd |¡S dS )z,Get password of the username for the serviceé   Tz%s{{part_%d}}Ú N)r   Úget_passwordÚappendÚjoin)r	   ÚserviceÚusernameÚ	init_partÚpartsÚiÚ	next_partr   r   r   r      s   ÿ

ø
	z$MultipartKeyringWrapper.get_passwordc           	         sd   t dtˆ ƒˆjƒ}‡ ‡fdd„|D ƒ}t|ƒD ]\}}|}|dkr'|d| 7 }ˆj |||¡ qdS )z,Set password for the username of the servicer   c                    s   g | ]}ˆ ||ˆj  … ‘qS r   )r   )Ú.0r   ©Úpasswordr	   r   r   Ú
<listcomp>+   s    z8MultipartKeyringWrapper.set_password.<locals>.<listcomp>z{{part_%d}}N)ÚrangeÚlenr   Ú	enumerater   Úset_password)	r	   r   r   r   ÚsegmentsÚpassword_partsr   Úpassword_partÚcurr_usernamer   r   r   r#   (   s   üz$MultipartKeyringWrapper.set_passwordc                 C   sb   | j  ||¡ t d¡}	 dtddt|ƒitƒ ¤Ž }z	| j  ||¡ W n tjy/   Y d S w q)Nr   Tz%(username)s{{part_%(index)d}}Úindexr   )	r   Údelete_passwordÚ	itertoolsÚcountÚdictÚnextÚvarsr   ÚPasswordDeleteError)r	   r   r   r+   Ú	part_namer   r   r   r)   2   s   
ÿÿÿúz'MultipartKeyringWrapper.delete_passwordN)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Úclasspropertyr   r   r#   r)   r   r   r   r   r      s    


r   )r*   Újaraco.classesr   r
   r   Úkeyring.backendr   r   r   r   r   r   Ú<module>   s
    