§
    ŠŸjÉ  ã                   óx   — d Z ddlZddlZddlZddlmZ ddlmZ ddl	m
Z
 d„ Zd„ Zd	„ Zd
„ Z G d„ d¦  «        ZdS )z´
JSON Schema URI resolution scopes and dereferencing

https://tools.ietf.org/id/draft-zyp-json-schema-04.html#rfc.section.7

Code adapted from https://github.com/Julian/jsonschema
é    N)Úparse)Úunquoteé   )ÚJsonSchemaDefinitionExceptionc                 óV   — |                       d|                       dd¦  «        ¦  «        S )z9
    Originally ID was `id` and since v7 it's `$id`.
    ú$idÚidÚ )Úget)Úschemas    úh/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/fastjsonschema/ref_resolver.pyÚget_idr      s&   € ð �:Š:�e˜VŸZšZ¨¨bÑ1Ô1Ñ2Ô2Ð2ó    c                 óŒ  — |                      d¦  «        }|r"t          |¦  «                             d¦  «        ng }|D ]…}|                     dd¦  «                             dd¦  «        }t	          | t
          ¦  «        r| t          |¦  «                 } ŒW|| v r	| |         } Œdt          d                     |¦  «        ¦  «        ‚| S )zk
    Return definition from path.

    Path is unescaped according https://tools.ietf.org/html/rfc6901
    ú/ú~1ú~0ú~zUnresolvable ref: {})	Úlstripr   ÚsplitÚreplaceÚ
isinstanceÚlistÚintr   Úformat)r   ÚfragmentÚpartsÚparts       r   Úresolve_pathr      sÉ   € ð �Š˜sÑ#Ô#€HØ,4Ð<�G�HÑÔ×#Ò# CÑ(Ô(Ð(¸"€EØð Uð UˆØ�|Š|˜D #Ñ&Ô&×.Ò.¨t°SÑ9Ô9ˆÝ�f�dÑ#Ô#ð 	UØ�C ™IœIÔ&ˆFˆFØ�Vˆ^ˆ^Ø˜D”\ˆFˆFå/Ð0F×0MÒ0MÈdÑ0SÔ0SÑTÔTÐTØ€Mr   c                 óN   — t          j        | ¦  «                             ¦   «         S ©N)ÚurlparseÚurlsplitÚgeturl)Úuris    r   Ú	normalizer&   ,   s   € ÝÔ˜SÑ!Ô!×(Ò(Ñ*Ô*Ð*r   c                 ó  — t          j        | ¦  «        j        }||v r ||         | ¦  «        }nØddlm}  || ¦  «        }|                     ¦   «                              ¦   «         pd}	 t          j        | 	                    ¦   «          
                    |¦  «        ¦  «        }n5# t          $ r(}t          d                     | |¦  «        ¦  «        ‚d}~ww xY w	 |                     ¦   «          n# |                     ¦   «          w xY w|S )zª
    Resolve a remote ``uri``.

    .. note::

        urllib library is used to fetch requests from the remote ``uri``
        if handlers does notdefine otherwise.
    r   )Úurlopenzutf-8z{} failed to decode: {}N)r"   r#   ÚschemeÚurllib.requestr(   ÚinfoÚget_content_charsetÚjsonÚloadsÚreadÚdecodeÚ
ValueErrorr   r   Úclose)r%   Úhandlersr)   Úresultr(   ÚreqÚencodingÚexcs           r   Úresolve_remoter8   0   s  € õ Ô˜sÑ#Ô#Ô*€FØ�ÐÐØ!�˜&Ô! #Ñ&Ô&ˆˆà*Ð*Ð*Ð*Ð*Ð*àˆg�c‰lŒlˆØ—8’8‘:”:×1Ò1Ñ3Ô3Ð>°wˆð	Ý”Z §¢¡
¤
× 1Ò 1°(Ñ ;Ô ;Ñ=Ô=ˆFˆFøÝð 	\ð 	\ð 	\Ý/Ð0I×0PÒ0PÐQTÐVYÑ0ZÔ0ZÑ[Ô[Ð[øøøøð	\øøøð ð �IŠI‰KŒKˆKˆKøˆC�IŠI‰KŒKˆKˆKøøøØ€Ms*   Á*9B$ Â#C/ Â$
CÂ.#CÃCÃC/ Ã/Dc                   óž   — e Zd ZdZi di fd„Zei fd„¦   «         Zej        de	fd„¦   «         Z
ej        de	fd„¦   «         Zd	„ Zd
„ Zdefd„ZdS )ÚRefResolverz"
    Resolve JSON References.
    Tc                 ó„   — || _         || _        || _        || _        || _        || _        |                      |¦  «         dS )a   
        `base_uri` is URI of the referring document from the `schema`.
        `store` is an dictionary that will be used to cache the fetched schemas
        (if `cache=True`).

        Please notice that you can have caching problems when compiling schemas
        with colliding `$ref`. To force overwriting use `cache=False` or
        explicitly pass the `store` argument (with a brand new dictionary)
        N)Úbase_uriÚresolution_scoper   ÚstoreÚcacher3   Úwalk)Úselfr<   r   r>   r?   r3   s         r   Ú__init__zRefResolver.__init__P   sG   € ð !ˆŒØ (ˆÔØˆŒØˆŒ
ØˆŒ
Ø ˆŒØ�	Š	�&ÑÔÐÐÐr   c                 ób   —  | t          |t          ¦  «        rt          |¦  «        nd|fd|i|¤ŽS )zA
        Construct a resolver from a JSON schema object.
        r
   r3   )r   Údictr   )Úclsr   r3   Úkwargss       r   Úfrom_schemazRefResolver.from_schemab   sP   € ð
 ˆsÝ(¨µÑ6Ô6Ð>�F�6‰NŒNˆN¸BØð
ð 
ð ð
ð ð	
ð 
ð 	
r   Úscopec              #   ó|   K  — | j         }t          j        ||¦  «        | _         	 dV — || _         dS # || _         w xY w)z:
        Context manager to handle current scope.
        N)r=   r"   Úurljoin)rA   rH   Ú	old_scopes      r   Úin_scopezRefResolver.in_scopen   sU   è è € ð
 Ô)ˆ	Ý (Ô 0°¸EÑ BÔ BˆÔð	.ØˆEˆEˆEà$-ˆDÔ!Ð!Ð!ø IˆDÔ!Ð-Ð-Ð-Ð-s   ¥2 ²	;Úrefc              #   ób  K  — t          j        | j        |¦  «        }t          j        |¦  «        \  }}|r1t	          |¦  «        | j        v r| j        t	          |¦  «                 }nH|r|| j        k    r| j        }n3t          || j	        ¦  «        }| j
        r|| j        t	          |¦  «        <   | j        | j        }}||c| _        | _        	 |                      |¦  «        5  t          ||¦  «        V — ddd¦  «         n# 1 swxY w Y   ||c| _        | _        dS # ||c| _        | _        w xY w)zt
        Context manager which resolves a JSON ``ref`` and enters the
        resolution scope of this ref.
        N)r"   rJ   r=   Ú	urldefragr&   r>   r<   r   r8   r3   r?   rL   r   )rA   rM   Únew_urir%   r   r   Úold_base_uriÚ
old_schemas           r   Ú	resolvingzRefResolver.resolvingz   s{  è è € õ Ô" 4Ô#8¸#Ñ>Ô>ˆÝ Ô*¨7Ñ3Ô3‰ˆˆXàð 	4•9˜S‘>”> T¤ZÐ/Ð/Ø”Z¥	¨#¡¤Ô/ˆFˆFØð 	4˜˜tœ}Ò,Ð,Ø”[ˆFˆFå# C¨¬Ñ7Ô7ˆFØŒzð 4Ø-3�”
�9 S™>œ>Ñ*à#'¤=°$´+�jˆØ%(¨&Ð"ˆŒ�t”{ð	BØ—’˜sÑ#Ô#ð 5ð 5Ý" 6¨8Ñ4Ô4Ð4Ð4Ð4ð5ð 5ð 5ñ 5ô 5ð 5ð 5ð 5ð 5ð 5ð 5øøøð 5ð 5ð 5ð 5ð *6°zÐ&ˆDŒM˜4œ;˜;˜;ø¨°zÐ&ˆDŒM˜4œ;ÐAÐAÐAÐAs0   ÃD Ã"DÃ5D ÄDÄD ÄDÄ	D ÄD.c                 ó*   — t          | j        ¦  «        S r!   )r&   r=   )rA   s    r   Úget_urizRefResolver.get_uri”   s   € Ý˜Ô.Ñ/Ô/Ð/r   c                 ó&  — dt          | j        ¦  «                             dd¦  «                             dd¦  «                             dd¦  «        z   }t          j        dd|¦  «        }|                     ¦   «                              d¦  «        }|S )zK
        Get current scope and return it as a valid function name.
        Ú	validate_r   Ú_r   ú"r
   z($[^a-zA-Z]|[^a-zA-Z0-9]))r   r=   r   ÚreÚsubÚlowerÚrstrip)rA   Únames     r   Úget_scope_namezRefResolver.get_scope_name—   s�   € ð �W TÔ%:Ñ;Ô;×CÒCÀDÈ#ÑNÔN×VÒVÐW[Ð]`ÑaÔa×iÒiÐjmÐoqÑrÔrÑrˆÝŒvÐ2°C¸Ñ>Ô>ˆØ�zŠz‰|Œ|×"Ò" 3Ñ'Ô'ˆØˆr   Únodec                 óØ  — t          |t          ¦  «        rdS d|v rBt          |d         t          ¦  «        r'|d         }t          j        | j        |¦  «        |d<   dS d|v sd|v rÀt          t          |¦  «        t          ¦  «        rž|                      t          |¦  «        ¦  «        5  || j        t          | j        ¦  «        <   | 
                    ¦   «         D ]/\  }}t          |t          ¦  «        r|                      |¦  «         Œ0	 ddd¦  «         dS # 1 swxY w Y   dS | 
                    ¦   «         D ]/\  }}t          |t          ¦  «        r|                      |¦  «         Œ0dS )zR
        Walk thru schema and dereferencing ``id`` and ``$ref`` instances
        z$refr   r	   N)r   ÚboolÚstrr"   rJ   r=   r   rL   r>   r&   ÚitemsrD   r@   )rA   r`   rM   rX   Úitems        r   r@   zRefResolver.walk    sŸ  € õ �d�DÑ!Ô!ð 	$ØˆDØ�tˆ^ˆ^¥
¨4°¬<½Ñ =Ô =ˆ^Ø�v”,ˆCÝ#Ô+¨DÔ,AÀ3ÑGÔGˆD�‰LˆLˆLØ�tˆmˆm˜t t˜|˜|µ½FÀ4¹L¼LÍ#Ñ1NÔ1N˜|Ø—’�v d™|œ|Ñ,Ô,ð (ð (Ø?C�”
�9 TÔ%:Ñ;Ô;Ñ<Ø#Ÿzšz™|œ|ð (ð (‘G�A�tÝ! $­Ñ-Ô-ð (ØŸ	š	 $™œ˜øð(ð(ð (ð (ñ (ô (ð (ð (ð (ð (ð (ð (ð (øøøð (ð (ð (ð (ð (ð (ð  Ÿ:š:™<œ<ð $ð $‘��4Ý˜d¥DÑ)Ô)ð $Ø—I’I˜d‘O”O�Oøð$ð $s   Â*A!DÄDÄ DN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rB   ÚclassmethodrG   Ú
contextlibÚcontextmanagerrc   rL   rS   rU   r_   rD   r@   © r   r   r:   r:   J   sò   € € € € € ðð ð
 02¸Èð ð ð ð ð$ Ø*,ð 	
ð 	
ð 	
ñ „[ð	
ð Ôð	.˜cð 	.ð 	.ð 	.ñ Ôð	.ð ÔðB˜Sð Bð Bð Bñ ÔðBð20ð 0ð 0ðð ð ð$˜ð $ð $ð $ð $ð $ð $r   r:   )ri   rk   r-   rZ   Úurllibr   r"   Úurllib.parser   Ú
exceptionsr   r   r   r&   r8   r:   rm   r   r   ú<module>rq      sÝ   ððð ð Ð Ð Ð Ø €€€Ø 	€	€	€	Ø $Ð $Ð $Ð $Ð $Ð $Ø  Ð  Ð  Ð  Ð  Ð  à 5Ð 5Ð 5Ð 5Ð 5Ð 5ð3ð 3ð 3ðð ð ð&+ð +ð +ðð ð ð4h$ð h$ð h$ð h$ð h$ñ h$ô h$ð h$ð h$ð h$r   