Ë
    :vžjo  ã                   ó®   — d Z ddl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  ed ej                  «       dz  «      Zd	„ Zd
„ Zd„ Zd„ Z G d„ d«      Zy)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é   )ÚJsonSchemaDefinitionExceptioniô  é   c                 óF   — | j                  d| j                  dd«      «      S )z9
    Originally ID was `id` and since v7 it's `$id`.
    ú$idÚidÚ )Úget)Úschemas    úl/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/fastjsonschema/ref_resolver.pyÚget_idr      s    € ð �:‰:�e˜VŸZ™Z¨¨bÓ1Ó2Ð2ó    c                 ó:  — |j                  d«      }|rt        |«      j                  d«      ng }|D ]f  }|j                  dd«      j                  dd«      }t	        | t
        «      r| t        |«         } ŒD|| v r| |   } ŒNt        dj                  |«      «      ‚ | S )zk
    Return definition from path.

    Path is unescaped according https://tools.ietf.org/html/rfc6901
    Ú/ú~1ú~0Ú~úUnresolvable ref: {})	Úlstripr   ÚsplitÚreplaceÚ
isinstanceÚlistÚintr   Úformat)r   ÚfragmentÚpartsÚparts       r   Úresolve_pathr!      s˜   € ð �‰˜sÓ#€HÙ,4ŒG�HÓ×#Ñ# CÔ(¸"€EÛˆØ�|‰|˜D #Ó&×.Ñ.¨t°SÓ9ˆÜ�fœdÔ#ØœC ›IÑ&‰FØ�V‰^Ø˜D‘\‰Fä/Ð0F×0MÑ0MÈdÓ0SÓTÐTð ð €Mr   c                 óH   — t        j                  | «      j                  «       S ©N)ÚurlparseÚurlsplitÚgeturl)Úuris    r   Ú	normalizer(   1   s   € Ü×Ñ˜SÓ!×(Ñ(Ó*Ð*r   c                 ó²  — t        j                  | «      j                  }||v r ||   | «      }|S ddlm}  || «      5 }|j                  «       j                  «       xs d}	 t        j                  |j                  «       j                  |«      «      }	 ddd«       |S # t        $ r }t        dj                  | «      «      |‚d}~ww xY w# 1 sw Y   S xY w)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 decodeN)r$   r%   ÚschemeÚurllib.requestr*   ÚinfoÚget_content_charsetÚjsonÚloadsÚreadÚdecodeÚ
ValueErrorr   r   )r'   Úhandlersr+   Úresultr*   ÚresponseÚencodingÚexcs           r   Úresolve_remoter9   5   sÎ   € ô ×Ñ˜sÓ#×*Ñ*€FØ�ÑØ!�˜&Ñ! #Ó&ˆð €Mõ 	+á�SŒ\˜XØ—}‘}“×:Ñ:Ó<ÒGÀˆHð`ÜŸ™ H§M¡M£O×$:Ñ$:¸8Ó$DÓF‘÷ ð €Møô ò `Ü3Ð4I×4PÑ4PÐQTÓ4UÓVÐ\_Ð_ûð`ú÷	 ð €Mús)   ¿#CÁ#2B Â 	C	Â)CÃC	Ã	CÃC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„ Zddefd„Zy)ÚRefResolverz"
    Resolve JSON References.
    Tc                 óò   — || _         || _        || _        || _        || _        || _        t        «       | _        | j                  |«       | j                  j                  |rt        |«      «       yd«       y)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)
        r   N)Úbase_uriÚresolution_scoper   ÚstoreÚcacher4   ÚsetÚ_walked_urisÚwalkÚaddr(   )Úselfr=   r   r?   r@   r4   s         r   Ú__init__zRefResolver.__init__S   se   € ð !ˆŒØ (ˆÔØˆŒØˆŒ
ØˆŒ
Ø ˆŒÜ›EˆÔØ�	‰	�&ÔØ×Ñ×Ñ±Xœi¨Ó1ÕFÀ2ÕFr   c                 óP   —  | t        |t        «      rt        |«      nd|fd|i|¤ŽS )zA
        Construct a resolver from a JSON schema object.
        r   r4   )r   Údictr   )Úclsr   r4   Úkwargss       r   Úfrom_schemazRefResolver.from_schemag   s:   € ñ
 Ü(¨´Ô6ŒF�6ŒN¸BØñ
ð ð
ð ñ	
ð 	
r   Úscopec              #   óŠ   K  — | j                   }t        j                  ||«      | _         	 d–— || _         y# || _         w xY w­w)z:
        Context manager to handle current scope.
        N)r>   r$   Úurljoin)rE   rL   Ú	old_scopes      r   Úin_scopezRefResolver.in_scopes   s@   è ø€ ð
 ×)Ñ)ˆ	Ü (× 0Ñ 0°¸EÓ BˆÔð	.Ûà$-ˆDÕ!ø IˆDÕ!üs   ‚(A«7 ¯A·	A Á AÚrefc              #   óà  K  — t        j                  | j                  |«      }t        j                  |«      \  }}|xs | j                  }|r0t        |«      | j                  v r| j                  t        |«         }nX|r|| j                  k(  r| j                  }n:t        || j                  «      }| j                  r|| j                  t        |«      <   | j                  | j                  }}||c| _        | _        	 | j                  |«      5  | j                  ||«       |r…|j                  d«      stt        t        j                  |d|z   «      «      }	|	| j                  v r*| j                  |	   –— 	 ddd«       ||c| _        | _        yt        dj                  |«      «      ‚t!        ||«      –— ddd«       ||c| _        | _        y# 1 sw Y   ŒxY w# ||c| _        | _        w xY w­w)zt
        Context manager which resolves a JSON ``ref`` and enters the
        resolution scope of this ref.
        r   Ú#Nr   )r$   rN   r>   Ú	urldefragr=   r(   r?   r   r9   r4   r@   rP   Ú_ensure_walkedÚ
startswithr   r   r!   )
rE   rQ   Únew_urir'   r   Údocument_urir   Úold_base_uriÚ
old_schemaÚ
plain_names
             r   Ú	resolvingzRefResolver.resolving   s£  è ø€ ô ×"Ñ" 4×#8Ñ#8¸#Ó>ˆÜ ×*Ñ*¨7Ó3‰ˆˆXàÒ+˜dŸm™mˆá”9˜S“> T§Z¡ZÑ/Ø—Z‘Z¤	¨#£Ñ/‰FÙ˜˜tŸ}™}Ò,Ø—[‘[‰Fä# C¨¯©Ó7ˆFØ�zŠzØ-3�—
‘
œ9 S›>Ñ*à#'§=¡=°$·+±+�jˆØ%1°6Ð"ˆŒ�t”{ð	BØ—‘˜|Õ,Ø×#Ñ# L°&Ô9Ù H×$7Ñ$7¸Ô$<Ü!*¬8×+;Ñ+;¸LÈ#ÐPXÉ.Ó+YÓ!Z�JØ! T§Z¡ZÑ/Ø"Ÿj™j¨Ñ4Ò4Ø÷ -ð *6°zÐ&ˆDŒM˜4�;ô 8Ð8N×8UÑ8UÐV^Ó8_Ó`Ð`Ü" 6¨8Ó4Ò4÷ -ð *6°zÐ&ˆDŒM˜4�;÷ -Ð,ûð *6°zÐ&ˆDŒM˜4�;üsI   ‚C:G.Ã=G ÄA(GÅ6G Å>G.Æ(GÆ6G Æ>G.ÇGÇG ÇG+Ç+G.c                 ó˜   — |rt        |«      nd}|| j                  v ry | j                  |«       | j                  j                  |«       y )Nr   )r(   rB   rC   rD   )rE   r'   r   Ú
normalizeds       r   rU   zRefResolver._ensure_walked¢   s@   € Ù'*”Y˜s”^°ˆ
Ø˜×*Ñ*Ñ*ØØ�	‰	�&ÔØ×Ñ×Ñ˜jÕ)r   c                 ó,   — t        | j                  «      S r#   )r(   r>   )rE   s    r   Úget_urizRefResolver.get_uri©   s   € Ü˜×.Ñ.Ó/Ð/r   c                 ó  — dt        | j                  «      j                  dd«      j                  dd«      j                  dd«      z   }t        j                  dd|«      }|j                  «       j                  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)rE   Únames     r   Úget_scope_namezRefResolver.get_scope_name¬   sr   € ð œW T×%:Ñ%:Ó;×CÑCÀDÈ#ÓN×VÑVÐW[Ð]`Óa×iÑiÐjmÐoqÓrÑrˆÜ�v‰vÐ2°C¸Ó>ˆØ�z‰z‹|×"Ñ" 3Ó'ˆØˆr   Únodec                 óÔ  — |t         k\  rt        dj                  t         «      «      ‚t        |t        «      ryd|v r<t        |d   t
        «      r)|d   }t        j                  | j                  |«      |d<   yd|v sd|v ržt        t        |«      t
        «      r…| j                  t        |«      «      5  || j                  t        | j                  «      <   |j                  «       D ]+  \  }}t        |t        «      sŒ| j                  ||dz   «       Œ- 	 ddd«       y|j                  «       D ]+  \  }}t        |t        «      sŒ| j                  ||dz   «       Œ- y# 1 sw Y   yxY w)zR
        Walk thru schema and dereferencing ``id`` and ``$ref`` instances
        z1Schema is too deeply nested (maximum depth is {})z$refr	   r
   r   N)ÚMAX_SCHEMA_WALK_DEPTHr   r   r   ÚboolÚstrr$   rN   r>   r   rP   r?   r(   ÚitemsrH   rC   )rE   rk   ÚdepthrQ   rc   Úitems         r   rC   zRefResolver.walkµ   s'  € ð Ô)Ò)Ü/ØC×JÑJÔK`Óaóð ô �dœDÔ!ØØ�t‰^¤
¨4°©<¼Ô =Ø�v‘,ˆCÜ#×+Ñ+¨D×,AÑ,AÀ3ÓGˆD�ŠLØ�t‰m˜t t™|´¼FÀ4»LÌ#Ô1NØ—‘œv d›|Õ,Ø?C�—
‘
œ9 T×%:Ñ%:Ó;Ñ<Ø#Ÿz™zž|‘G�A�tÜ! $¬Õ-ØŸ	™	 $¨°©	Õ2ñ  ,÷ -Ð,ð  Ÿ:™:ž<‘��4Ü˜d¤DÕ)Ø—I‘I˜d E¨A¡IÕ.ñ (÷ -Ð,ús   Â4A	EÃ>EÅE'N)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rF   ÚclassmethodrK   Ú
contextlibÚcontextmanagerro   rP   r\   rU   r`   rj   rH   rC   © r   r   r;   r;   M   sŽ   „ ñð
 02¸Èó Gð( Ø*,ò 	
ó ð	
ð ×Ñð	.˜cò 	.ó ð	.ð ×Ñð B˜Sò  Bó ð BòD*ò0òñ/˜ô /r   r;   )rv   rx   r/   re   ÚsysÚurllibr   r$   Úurllib.parser   Ú
exceptionsr   ÚminÚgetrecursionlimitrm   r   r!   r(   r9   r;   rz   r   r   Ú<module>r�      s_   ðñó Û Û 	Û 
Ý $Ý  å 5á˜CÐ!6 ×!6Ñ!6Ó!8¸AÑ!=Ó>Ð ò3òò&+ò÷0/ò /r   