§
    ¥”jM"  ã                   ób  — d Z ddlZddlZddlmZmZmZmZ ddlm	Z	m
Z
 ddlmZ g d¢Z ed¦  «        Zdee         fd	„Zd
ej        fd„Z ej        d¬¦  «         G d„ d¦  «        ¦   «         Zd„ Zd„ Zd„ Z ej        d¦  «        Zdee
         fd„Zd„ Zdee
         fd„Zdee	         fd„ZdS )zû
This module contains utilities for allowing dataclasses to be populated by
user-provided configuration (e.g. from a Yaml file).

.. note::
    On naming conventions: this module converts hyphens in key names to
    underscores as a matter of course.
é    N)ÚOptionalÚSetÚTypeÚUnion)Ú	BitStringÚObjectIdentifieré   )ÚConfigurationError)Ú	OID_REGEXÚConfigurableMixinÚcheck_config_keysÚprocess_bit_string_flagsÚprocess_oidÚprocess_oidsÚreturnc                 ó  — t          | t          ¦  «        r| }nQddlm}m}  || ¦  «        t
          urd S 	  || ¦  «        \  }}|t          urd S n# t          t          f$ r Y d S w xY w|}t          |t          ¦  «        r|nd S )Nr   )Úget_argsÚ
get_origin)	Ú
isinstanceÚtypeÚtypingr   r   r   Ú	_noneTypeÚ
ValueErrorÚ	TypeError)ÚthingÚthe_typer   r   Útype1Útype2s         úa/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/pyhanko/config/api.pyÚ_unwrap_type_annotr       s¿   € Ý�%�ÑÔð Øˆˆà/Ð/Ð/Ð/Ð/Ð/Ð/Ð/ð ˆ:�eÑÔ¥EÐ)Ð)Ø�4ð	Ø#˜8 E™?œ?‰LˆE�5Ø�IÐ%Ð%Ø�tð &øå�IÐ&ð 	ð 	ð 	Ø�4�4ð	øøøàˆÝ! (­DÑ1Ô1Ð;ˆ8ˆ8°tÐ;s   ¶A ÁA%Á$A%Úfc                 óN   — | j         t          j        up| j        t          j        uS ©N)Údefault_factoryÚdataclassesÚMISSINGÚdefault)r!   s    r   Ú_has_defaultr(   2   s'   € à	Ô¥Ô!4Ð4ð 	0ØŒ9�KÔ/Ð/ðó    T)Úfrozenc                   ó|   — e Zd ZdZed„ ¦   «         Zed„ ¦   «         Zedee         fd„¦   «         Z	ed„ ¦   «         Z
dS )r   z+General configuration mixin for dataclassesc                 ó   — dS )a$  
        Hook method that can modify the configuration dictionary
        to overwrite or tweak some of their values (e.g. to convert string
        parameters into more complex Python objects)

        Subclasses that override this method should call
        ``super().process_entries()``, and leave keys that they do not
        recognise untouched.

        :param config_dict:
            A dictionary containing configuration values.
        :raises ConfigurationError:
            when there is a problem processing a relevant entry.
        N© )ÚclsÚconfig_dicts     r   Úprocess_entriesz!ConfigurableMixin.process_entries=   s	   € ð  	ˆr)   c                 óf  — t          j        | ¦  «        D ]›}t          |j        ¦  «        }|�t	          |t
          ¦  «        sŒ.	 ||j                 }n# t          $ r Y ŒIw xY w	 |                     |¦  «        }n-# t          $ r }t          d|j        › d|›�¦  «        |‚d }~ww xY w|||j        <   Œœd S )Nz+Error while processing configurable field 'z': )
r%   Úfieldsr    r   Ú
issubclassr   ÚnameÚKeyErrorÚfrom_configr
   )r.   r/   r!   Ú
field_typeÚfield_config_dictÚfield_valueÚes          r   Ú_process_configurable_fieldsz.ConfigurableMixin._process_configurable_fieldsO   s  € õ Ô# CÑ(Ô(ð 	.ð 	.ˆAÝ+¨A¬FÑ3Ô3ˆJØÐ!­ØÕ-ñ*ô *Ð!ð ðØ$/°´Ô$7Ð!Ð!øÝð ð ð Ø�ðøøøðØ(×4Ò4Ð5FÑGÔG��øÝ%ð ð ð Ý(ðÀ!Ä&ð ð Øðð ñô ð ðøøøøðøøøð
 #.ˆK˜œÑÐð%	.ð 	.s*   ÁAÁ
AÁAÁ#A9Á9
B#ÂBÂB#Úkeys_suppliedc                 ój   — t          | j        d„ t          j        | ¦  «        D ¦   «         |¦  «         dS )zá
        Check whether all supplied keys are meaningful.

        :param keys_supplied:
            The keys supplied in the configuration.
        :raises ConfigurationError: if at least one key does not make sense.
        c                 ó   — h | ]	}|j         ’Œ
S r-   )r4   ©Ú.0r!   s     r   ú	<setcomp>z6ConfigurableMixin.check_config_keys.<locals>.<setcomp>r   s   € Ð5Ð5Ð5˜ˆQŒVÐ5Ð5Ð5r)   N)r   Ú__name__r%   r2   )r.   r<   s     r   r   z#ConfigurableMixin.check_config_keysf   sD   € õ 	ØŒLØ5Ð5�[Ô/°Ñ4Ô4Ð5Ñ5Ô5Øñ	
ô 	
ð 	
ð 	
ð 	
r)   c                 ó  — t          |t          ¦  «        st          | j        › d�¦  «        ‚|                      t          |                     ¦   «         ¦  «        ¦  «         d„ |                     ¦   «         D ¦   «         }|                      |¦  «         |  	                    |¦  «         t          | j        d„ t          j        | ¦  «        D ¦   «         |¦  «         	  | di |¤ŽS # t          $ r}t          d¦  «        |‚d}~ww xY w)a=  
        Attempt to instantiate an object of the class on which it is called,
        by means of the configuration settings passed in.

        First, we check that the keys supplied in the dictionary correspond
        to data fields on the current class.
        Then, the dictionary is processed using the :meth:`process_entries`
        method. The resulting dictionary is passed to the initialiser
        of the current class as a kwargs dict.

        :param config_dict:
            A dictionary containing configuration values.
        :return:
            An instance of the class on which it is called.
        :raises ConfigurationError:
            when an unexpected configuration key is encountered or left
            unfilled, or when there is a problem processing one of the config
            values.
        z% requires a dictionary to initialise.c                 óB   — i | ]\  }}|                      d d¦  «        |“ŒS )ú-Ú_©Úreplace)r@   ÚkeyÚvs      r   ú
<dictcomp>z1ConfigurableMixin.from_config.<locals>.<dictcomp>‘   s9   € ð 
ð 
ð 
Ù)/¨¨aˆC�KŠK˜˜SÑ!Ô! 1ð
ð 
ð 
r)   c                 ó:   — h | ]}t          |¦  «        °|j        ’ŒS r-   )r(   r4   r?   s     r   rA   z0ConfigurableMixin.from_config.<locals>.<setcomp>›   s%   € ÐLÐLÐL˜½LÈ¹O¼OÐLˆQŒVÐLÐLÐLr)   z!Failed to instantiate from configNr-   )r   Údictr
   rB   r   ÚsetÚkeysÚitemsr0   r;   Úenforce_required_keysr%   r2   r   )r.   r/   r:   s      r   r6   zConfigurableMixin.from_configv   s:  € õ* ˜+¥tÑ,Ô,ð 	Ý$Ø”<ÐFÐFÐFñô ð ð 	×Ò�c +×"2Ò"2Ñ"4Ô"4Ñ5Ô5Ñ6Ô6Ð6ð
ð 
Ø3>×3DÒ3DÑ3FÔ3Fð
ñ 
ô 
ˆð 	×Ò˜KÑ(Ô(Ð(à×(Ò(¨Ñ5Ô5Ð5åØŒLØLÐL�[Ô/°Ñ4Ô4ÐLÑLÔLØñ	
ô 	
ð 	
ð
	Qà�3Ð%Ð%˜Ð%Ð%Ð%øÝð 	Qð 	Qð 	QÝ$Ð%HÑIÔIÈqÐPøøøøð	Qøøøs   ÃC$ Ã$
DÃ.C>Ã>DN)rB   Ú
__module__Ú__qualname__Ú__doc__Úclassmethodr0   r;   r   Ústrr   r6   r-   r)   r   r   r   9   s™   € € € € € à5Ð5àðð ñ „[ðð" ð.ð .ñ „[ð.ð, ð
¨c°#¬hð 
ð 
ð 
ñ „[ð
ð ð+Qð +Qñ „[ð+Qð +Qð +Qr)   r   c           
      ó¬   — t          ||¦  «        }|rAt          dt          |¦  «        dk    rdnd› d| › dd                     |¦  «        › d�¦  «        ‚d S )	NzUnexpected r	   rI   rO   ú in configuration for ú: ú, ú.)Ú_check_subsetr
   ÚlenÚjoin)Úconfig_nameÚexpected_keysÚsupplied_keysÚunexpected_keyss       r   r   r   ¥   s‰   € õ $ M°=ÑAÔA€OØð 
å ð-¥3 Ñ#7Ô#7¸1Ò#<Ð#<˜%˜%À&ð -ð -Ø$/ð-ð -à�yŠy˜Ñ)Ô)ð-ð -ð -ñ
ô 
ð 	
ð
ð 
r)   c                 ó<   — d„ | D ¦   «         } d„ |D ¦   «         }| |z
  S )Nc                 ó:   — h | ]}|                      d d¦  «        ’ŒS ©rF   rE   rG   ©r@   rI   s     r   rA   z _check_subset.<locals>.<setcomp>·   ó&   € ÐBÐBÐB¨c�C—K’K  SÑ)Ô)ÐBÐBÐBr)   c                 ó:   — h | ]}|                      d d¦  «        ’ŒS re   rG   rf   s     r   rA   z _check_subset.<locals>.<setcomp>¸   rg   r)   r-   )Úexpected_subÚexpected_sups     r   r\   r\   µ   s3   € àBÐB°\ÐBÑBÔB€LØBÐB°\ÐBÑBÔB€LØ˜,Ñ&Ð&r)   c           
      óÐ   — t          ||                     ¦   «         ¦  «        }|rAt          dt          |¦  «        dk    rdnd› d| › dd                     |¦  «        › d�¦  «        ‚d S )	NzMissing required r	   rI   rO   rX   rY   rZ   r[   )r\   rO   r
   r]   r^   )r_   Úrequired_keysr/   Úmissing_keyss       r   rQ   rQ   ¼   s“   € Ý  °×0@Ò0@Ñ0BÔ0BÑCÔC€LØð 
å ð*­¨\Ñ):Ô):¸aÒ)?Ð)?  ÀVð *ð *Ø$/ð*ð *à�yŠy˜Ñ&Ô&ð*ð *ð *ñ
ô 
ð 	
ð
ð 
r)   z
\d(\.\d+)+Úasn1crypto_classc           	      ó>  — t          |t          ¦  «        st          d|›d|› d�¦  «        ‚t                               |¦  «        r|                      |¦  «        S 	 |                      |¦  «         n+# t          $ r t          d|› d|› d| j        › �¦  «        ‚w xY w|S )NzIdentifier 'z' in 'ú' is not a string.ú'ú' is not a valid )	r   rV   r
   r   Ú	fullmatchÚmapÚunmapr   rB   )rn   Ú	id_stringÚ
param_names      r   r   r   Ê   sì   € õ �i¥Ñ%Ô%ð 
Ý ØL˜9ÐLÐL¨jÐLÐLÐLñ
ô 
ð 	
õ ×Ò˜9Ñ%Ô%ð ð  ×#Ò# IÑ.Ô.Ð.ð	ð ×"Ò" 9Ñ-Ô-Ð-Ð-øÝð 	ð 	ð 	Ý$ð/�Ið /ð / Zð /ð /Ø#Ô,ð/ð /ñô ð ð	øøøð
 Ðs   ÁA2 Á2(Bc                 óš   — d|› d�}t          | t          ¦  «        r| f} n+t          | t          t          f¦  «        st	          |¦  «        ‚| S )Nrq   z6' must be specified as a list of strings, or a string.)r   rV   ÚlistÚtupler
   )Ústringsrw   Úerr_msgs      r   Ú_ensure_stringsr}   â   s[   € àNˆJÐNÐNÐNð õ �'�3ÑÔð *Ø�*ˆˆÝ˜¥$­ Ñ/Ô/ð *Ý  Ñ)Ô)Ð)à€Nr)   c              #   óZ   K  — t          ||¦  «        }|D ]}t          | ||¦  «        V — Œd S r#   )r}   r   )rn   r{   rw   Úusage_strings       r   r   r   î   sN   è è € Ý˜g zÑ2Ô2€GØð Fð FˆÝÐ*¨L¸*ÑEÔEÐEÐEÐEÐEðFð Fr)   c              #   óü   K  — t          ||¦  «        }| j                             ¦   «         }|D ]M}t          |t          ¦  «        st          d|›d�¦  «        ‚||vrt          d|›d| j        › d�¦  «        ‚|V — ŒNd S )NzFlag identifier 'rp   rq   rr   z flag name.)r}   Ú_mapÚvaluesr   rV   r
   rB   )rn   r{   rw   Úvalid_valuesÚflag_strings        r   r   r   ô   sÌ   è è € õ ˜g zÑ2Ô2€GØ#Ô(×/Ò/Ñ1Ô1€LØð ð ˆÝ˜+¥sÑ+Ô+ð 	Ý$ØE KÐEÐEÐEñô ð ð  Ð,Ð,Ý$ð:�Kð :ð :Ø#Ô,ð:ð :ð :ñô ð ð ÐÐÐÐðð r)   )rT   r%   Úrer   r   r   r   r   Úasn1crypto.corer   r   Úerrorsr
   Ú__all__r   r   r    ÚFieldr(   Ú	dataclassr   r   r\   rQ   Úcompiler   r   r}   r   r   r-   r)   r   ú<module>rŒ      sè  ððð ð Ð Ð Ð Ø 	€	€	€	Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -à 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7à &Ð &Ð &Ð &Ð &Ð &ðð ð €ð ˆD�‰JŒJ€	ð< ¨$¤ð <ð <ð <ð <ð(�KÔ%ð ð ð ð ð €Ô˜dÐ#Ñ#Ô#ðhQð hQð hQð hQð hQñ hQô hQñ $Ô#ðhQðV
ð 
ð 
ð 'ð 'ð 'ð
ð 
ð 
ð ˆBŒJ�}Ñ%Ô%€	ðØÐ+Ô,ðð ð ð ð0	ð 	ð 	ðF 4Ð(8Ô#9ð Fð Fð Fð FðØ˜9”oðð ð ð ð ð r)   