o
    ?8¾\³  ã                	   @   s€   d Z ddlmZ zddlZW n ey   dZdd„ ZY dS w dZddlZej	ej
ejejejejejejejf	Zd	dd„ZdS )
z&An implementation of RFC4013 SASLprep.é    )Ú	text_typeNFc                 C   s   t | tƒr	tdƒ‚| S )zSASLprep dummyzVThe stringprep module is not available. Usernames and passwords must be ASCII strings.)Ú
isinstanceÚ
_text_typeÚ	TypeError)Údata© r   úB/var/www/html/env/lib/python3.10/site-packages/pymongo/saslprep.pyÚsaslprep   s
   
ÿr	   Tc                    sÂ   t | tƒs| S |rttjf }nt}tj‰tj‰d ‡‡fdd„| D ƒ¡} tj	 
d| ¡} tj}|| d ƒrF|| d ƒs?tdƒ‚|tjf }n||f }| D ]‰ t‡ fdd	„|D ƒƒr^td
ƒ‚qM| S )aŒ  An implementation of RFC4013 SASLprep.

        :Parameters:
          - `data`: The string to SASLprep. Unicode strings
            (python 2.x unicode, 3.x str) are supported. Byte strings
            (python 2.x str, 3.x bytes) are ignored.
          - `prohibit_unassigned_code_points`: True / False. RFC 3454
            and RFCs for various SASL mechanisms distinguish between
            `queries` (unassigned code points allowed) and
            `stored strings` (unassigned code points prohibited). Defaults
            to ``True`` (unassigned code points are prohibited).

        :Returns:
        The SASLprep'ed version of `data`.
        Ú c                    s$   g | ]}ˆ |ƒsˆ|ƒrd n|‘qS )ú r   )Ú.0Úelt)Úin_table_b1Úin_table_c12r   r   Ú
<listcomp>O   s    ÿzsaslprep.<locals>.<listcomp>ÚNFKCr   éÿÿÿÿz$SASLprep: failed bidirectional checkc                 3   s   � | ]}|ˆ ƒV  qd S )Nr   )r   Úin_table)Úcharr   r   Ú	<genexpr>h   s   € zsaslprep.<locals>.<genexpr>z+SASLprep: failed prohibited character check)r   r   Ú_PROHIBITEDÚ
stringprepÚin_table_a1r   r   ÚjoinÚunicodedataÚ	ucd_3_2_0Ú	normalizeÚin_table_d1Ú
ValueErrorÚin_table_d2Úany)r   Úprohibit_unassigned_code_pointsÚ
prohibitedr   r   )r   r   r   r   r	   0   s4   
ÿÿ
ÿÿ)T)Ú__doc__Úbson.py3compatr   r   r   ÚImportErrorÚHAVE_STRINGPREPr	   r   r   Úin_table_c21_c22Úin_table_c3Úin_table_c4Úin_table_c5Úin_table_c6Úin_table_c7Úin_table_c8Úin_table_c9r   r   r   r   r   Ú<module>   s*   þ
ô