o
    l>ju                     @   sT   d Z ddlZddlZeeddpejej ZdZdd Zdd Z	d	d
 Z
dd ZdS )zn
escape/unescape routines available for backends which need
alphanumeric usernames, services, or other values
    Nlettersz_%02Xc                 C   s*   t | tr	t| } | tv r| S tt|  S )zASingle char escape. Return the char, escaped if not already legal)
isinstanceintchrLEGAL_CHARS
ESCAPE_FMTord)c r
   H/home/thesage/.local/lib/python3.10/site-packages/keyrings/alt/escape.py_escape_char   s   
r   c                 C   s   d dd | dD S )zd
    Escapes given string so the result consists of alphanumeric chars and
    underscore only.
     c                 s   s    | ]}t |V  qd S )N)r   ).0r	   r
   r
   r   	<genexpr>   s    zescape.<locals>.<genexpr>utf-8)joinencode)valuer
   r
   r   escape   s   r   c                 C   s   t | dd}t|gS )Ncode   )r   groupbytes)regex_matchordinalr
   r
   r   _unescape_code    s   
r   c                 C   s8   t dd}|d}t|}|t| ddS )z
    Inverse of escape.
    z%02Xz(?P<code>[0-9A-Fa-f]{2})asciir   )r   replacer   recompilesubr   decode)r   patternpattern_bytesre_escr
   r
   r   unescape%   s   

r%   )__doc__r   stringgetattrascii_lettersdigitsr   r   r   r   r   r%   r
   r
   r
   r   <module>   s    