
    DeG                       U d Z ddlmZ ddlmZmZ ddlmZmZm	Z	 ddl
mZmZmZmZmZ ddlmZ ddlmZmZ ddlmZmZmZ eeef         Ze	eef         Zee         Ze G d	 d
e                       Z!dSdZ"dSdZ#dTdZ$dUdZ%dVdZ&dVdZ'dWdZ( e)             e)             e)            fdXd!Z* e)             e)             e)            fdXd"Z+ e)             e)             e)            fdXd#Z, e)             e)             e)            fdXd$Z- e)             e)             e)            fdXd%Z. e)             e)             e)            fdXd&Z/ e)             e)             e)            fdXd'Z0 ed(e" e*h d)h d*h d+,          e% e.h d)h d*h d+,          -          Z1 ed.e" e+h d/h d0h d+,          e& e/h d/h d0h d+,          -          Z2 ed1e# e,h d2h d0h d3,          e' e0h d2h d0h d3,          -          Z3 ed4e# e,h d5h d0h d3,          e' e0h d5h d0h d3,          -          Z4 ed6e$ e-d7hh d0h d3,          e( e0h d8h d0h d3,          -          Z5 ed9e$ e-d:hh d3;          e( e0d<d=hd:hh d3,          -          Z6 ed> d?e1fd@e2fdAe3fdBe4fdCe5fdDe6ffD                       Z7dEe8dF<   	 dYdZdLZ9e G dM dN                      Z:d[dRZ;dGS )\zI
Referencing implementations for JSON Schema specs (historic & current).
    )annotations)SequenceSet)AnyIterableUnion)AnchorRegistryResourceSpecification
exceptions)frozen)ResolvedResolver)URIr	   Mappingc                      e Zd ZU dZded<   dS )UnknownDialectz
    A dialect identifier was found for a dialect unknown by this library.

    If it's a custom ("unofficial") dialect, be sure you've registered it.
    r   uriN)__name__
__module____qualname____doc____annotations__     6lib/python3.11/site-packages/referencing/jsonschema.pyr   r      s%           HHHHHr   r   contentsSchemareturn
URI | Nonec                Z    t          | t                    rd S |                     d          S )N$id)
isinstanceboolget)r   s    r   
_dollar_idr'   $   s+    (D!! <<r   c                    t          | t                    sd| v rd S |                     d          }||                    d          s|S d S d S )N$refr#   #)r$   r%   r&   
startswithr   ids     r   _legacy_dollar_idr.   *   sY    (D!! Vx%7%7	e		B	~bmmC00~	 ~~~r   ObjectSchemac                r    d| v rd S |                      d          }||                    d          s|S d S d S )Nr)   r-   r*   )r&   r+   r,   s     r   
_legacy_idr1   2   sH    	d		B	~bmmC00~	 ~~~r   specificationSpecification[Schema]Iterable[AnchorType[Schema]]c              #  0  K   t          |t                    rd S |                    d          }|&t          ||                     |                    V  |                    d          }|(t          ||                     |                    V  d S d S )N$anchornameresourcez$dynamicAnchor)r$   r%   r&   r	   create_resourceDynamicAnchor)r2   r   anchordynamic_anchors       r   _anchorr>   :   s       (D!! \\)$$F"228<<
 
 
 	
 	
 	

 \\"233N!"228<<
 
 
 	
 	
 	
 	
 	
 "!r   Iterable[Anchor[Schema]]c                    t          |t                    rg S |                    d          }|g S t          ||                     |                    gS )Nr6   r7   )r$   r%   r&   r	   r:   )r2   r   r<   s      r   _anchor_2019rA   O   sf     (D!! 	\\)$$F~	"228<<	
 	
 	
 r   c                    t          |t                    rg S |                    dd          }|                    d          sg S t	          |dd          |                     |                    gS )Nr#    r*      r7   )r$   r%   r&   r+   r	   r:   r2   r   r-   s      r   _legacy_anchor_in_dollar_idrF   `   s     (D!! 		eR	 	 B== 	ABB"228<<	
 	
 	
 r   Specification[ObjectSchema]Iterable[Anchor[ObjectSchema]]c                    |                     dd          }|                    d          sg S t          |dd          |                     |                    gS )Nr-   rC   r*   rD   r7   )r&   r+   r	   r:   rE   s      r   _legacy_anchor_in_idrJ   q   sh     
dB		B== 	ABB"228<<	
 	
 	
 r   in_valueSet[str]in_subvaluesin_subarrayc                     d fd}|S )z
    Create a callable returning JSON Schema specification-style subschemas.

    Relies on specifying the set of keywords containing subschemas in their
    values, in a subobject's values, or in a subarray.
    r   r   r    Iterable[ObjectSchema]c              3     K   t          | t                    rd S D ]}|| v r
| |         V  D ]}|| v r| |         E d {V  D ]&}|| v r | |                                         E d {V  'd S N)r$   r%   values)r   eachrN   rM   rK   s     r   subresources_ofz)_subresources_of.<locals>.subresources_of   s      h%% 	F 	% 	%Dxtn$$$ 	* 	*Dx#D>)))))))  	3 	3Dx#D>00222222222	3 	3r   r   r   r    rP   r   rK   rM   rN   rU   s   ``` r   _subresources_ofrX      s5    3 3 3 3 3 3 3 3 r   c                     d fd}|S )O
    Specifically handle older drafts where there are some funky keywords.
    r   r   r    rP   c              3  X  K   t          | t                    rd S D ]}|| v r
| |         V  D ]}|| v r| |         E d {V  D ]&}|| v r | |                                         E d {V  '|                     d          }|%t          |t                    r
|E d {V  d S |V  d S d S Nitems)r$   r%   rS   r&   r   )r   rT   r]   rN   rM   rK   s      r   rU   z:_subresources_of_with_crazy_items.<locals>.subresources_of   s     h%% 	F 	% 	%Dxtn$$$ 	* 	*Dx#D>)))))))  	3 	3Dx#D>00222222222W%%%**           	 r   rV   r   rW   s   ``` r   !_subresources_of_with_crazy_itemsr^      s5           ( r   c                     d fd}|S )rZ   r   r   r    rP   c              3  ,  K   t          | t                    rd S D ]}|| v r
| |         V  D ]}|| v r| |         E d {V  D ]&}|| v r | |                                         E d {V  '|                     d          }|"t          |t                    r	|E d {V  n|V  |                     d          }|Tt          |                                          }t          |d           }t          |t                    r|V  |E d {V  d S d S d S Nr]   dependencies)r$   r%   rS   r&   r   iternextr   	r   rT   r]   rb   rS   valuerN   rM   rK   s	         r   rU   zG_subresources_of_with_crazy_items_dependencies.<locals>.subresources_of   s     h%% 	F 	% 	%Dxtn$$$ 	* 	*Dx#D>)))))))  	3 	3Dx#D>00222222222W%%%**          ||N33#,--//00F&&E%)) "!!!!!!!!!! $#" "r   rV   r   rW   s   ``` r   ._subresources_of_with_crazy_items_dependenciesrg      s5    " " " " " " " "6 r   c                     d fd}|S )zT
    Specifically handle even older drafts where there are some funky keywords.
    r   r/   r    rP   c              3  \  K   D ]}|| v r
| |         V  D ]}|| v r| |         E d {V  D ]&}|| v r | |                                          E d {V  '|                     d          }|"t          |t                    r	|E d {V  n|V  |                     d          }|Rt	          |                                           }t          |d           }t          |t                    r|V  |E d {V  dD ]0}|                     |          }t          |t                    r|V  1d S )Nr]   rb   )additionalItemsadditionalProperties)rS   r&   r$   r   rc   rd   r   re   s	         r   rU   zJ_subresources_of_with_crazy_aP_items_dependencies.<locals>.subresources_of   s      	% 	%Dxtn$$$ 	* 	*Dx#D>)))))))  	3 	3Dx#D>00222222222W%%%**          ||N33#,--//00F&&E%)) "!!!!!!!!= 	 	DLL&&E%)) 	 	r   )r   r/   r    rP   r   rW   s   ``` r   1_subresources_of_with_crazy_aP_items_dependenciesrl      s5           < r   c                "     ||z  d	 fd}|S )
NsegmentsSequence[int | str]resolver_Resolver[Any]subresourceResource[Any]r    c                    t          |           }|D ]}|vr|vst          |d           |c S |                    |          S rR   )rc   rd   in_subresourcern   rp   rr   	_segmentssegmentin_childrK   s        r   maybe_in_subresourcez3_maybe_in_subresource.<locals>.maybe_in_subresource  sb    
 NN	  	  	 Gh&&x''4	4+@+@+H&&{333r   rn   ro   rp   rq   rr   rs   r    rq   r   rK   rM   rN   rz   ry   s   `   @r   _maybe_in_subresourcer}     s;    
 k)H4 4 4 4 4 4 4  r   c                "     ||z  d	 fd}|S )
Nrn   ro   rp   rq   rr   rs   r    c                    t          |           }|D ]U}|dk    r1t          |j        t                    r|                    |          c S |vr|vst          |d           |c S V|                    |          S r\   rc   r$   r   r   ru   rd   rv   s        r   rz   z?_maybe_in_subresource_crazy_items.<locals>.maybe_in_subresource+  s    
 NN	  		  		 G'!!j$' '!  ..{;;;;;h&&x''4	4+@+@+H&&{333r   r{   r   r|   s   `   @r   !_maybe_in_subresource_crazy_itemsr   $  s;    
 k)H4 4 4 4 4 4 4$  r   c                "     ||z  d	 fd}|S )
Nrn   ro   rp   rq   rr   rs   r    c                   t          |           }|D ][}|dk    s|dk    r1t          |j        t                    r|                    |          c S |vr|vst          |d           |c S \|                    |          S ra   r   rv   s        r   rz   zL_maybe_in_subresource_crazy_items_dependencies.<locals>.maybe_in_subresourceG  s    
 NN	  	  	 G7""g&?&?[17;; '@..{;;;;;h&&x''4	4+@+@+H&&{333r   r{   r   r|   s   `   @r   ._maybe_in_subresource_crazy_items_dependenciesr   @  s;    
 k)H4 4 4 4 4 4 4"  r   zdraft2020-12>   ifnotelsethenr]   containscontentSchemapropertyNamesunevaluatedItemsrk   unevaluatedProperties>   allOfanyOfoneOfprefixItems>   $defs
propertiesdependentSchemaspatternProperties)rK   rN   rM   )r8   id_ofrU   
anchors_inrz   zdraft2019-09>   r   r   r   r   r   r   r   rj   r   rk   r   >   r   r   r   zdraft-07>   r   r   r   r   r   r   rj   rk   >   r   definitionsr   zdraft-06>   r   r   r   rj   rk   zdraft-04r   >   r   rj   rk   zdraft-03extends)rN   rM   rj   rk   c                >    i | ]\  }}|t          j        |          S r   )r   opaque).0
dialect_idr2   s      r   
<dictcomp>r     s8     
 
 
%J 	HOM22
 
 
r   z,https://json-schema.org/draft/2020-12/schemaz,https://json-schema.org/draft/2019-09/schemaz&http://json-schema.org/draft-07/schemaz&http://json-schema.org/draft-06/schemaz&http://json-schema.org/draft-04/schemaz&http://json-schema.org/draft-03/schemazRegistry[Specification[Schema]]_SPECIFICATIONSNr   r   defaultSpecification[Any]c                    t                               |                     d                    }||j        S |t	          |           |S )z
    Retrieve the `Specification` with the given dialect identifier.

    Raises:

        `UnknownDialect`

            if the given ``dialect_id`` isn't known
    r*   )r   r&   rstripr   r   )r   r   r9   s      r   specification_withr   -  sL     "":#4#4S#9#9::H  Z(((Nr   c                  0    e Zd ZU dZded<   ded<   dd
ZdS )r;   z4
    Dynamic anchors, introduced in draft 2020.
    strr8   zResource[Schema]r9   rp   _Resolver[Schema]r    _Resolved[Schema]c                <   | j         }|                                D ]X\  }}	 |                    || j                  j        }n# t
          j        $ r Y 8w xY wt          |t                    r|j         }Yt          |j
        |                    |                    S )z2
        Resolve this anchor dynamically.
        )r   rp   )r9   dynamic_scoper<   r8   rf   r   NoSuchAnchorr$   r;   	_Resolvedr   ru   )selfrp   lastr   registryr<   s         r   resolvezDynamicAnchor.resolveK  s     }%3355 	' 	'MC!di88>*   &-00 '],,T22
 
 
 	
s    AAANrp   r   r    r   )r   r   r   r   r   r   r   r   r   r;   r;   B  sK           III
 
 
 
 
 
r   r;   rp   r   r   c                f   |                      d          }t          |j        t                    r|j                            d          rg|                                 D ]R\  }}|                      |          }t          |j        t                    r|j                            d          s n|}S|S )u   
    Recursive references (via recursive anchors), present only in draft 2019.

    As per the 2019 specification (§ 8.2.4.2.1), only the ``#`` recursive
    reference is supported (and is therefore assumed to be the relevant
    reference).
    r*   z$recursiveAnchor)lookupr$   r   r   r&   r   )rp   resolvedr   _next_resolveds        r   lookup_recursive_refr   ]  s     s##H(#W-- 
%(2C2G2G3 3 
% ,,.. 	% 	%FC$OOC00M&   #+//0BCC $HHOr   )r   r   r    r!   )r   r/   r    r!   )r2   r3   r   r   r    r4   )r2   r3   r   r   r    r?   )r2   rG   r   r/   r    rH   )rK   rL   rM   rL   rN   rL   rR   )r   r   r   r   r    r   r   )<r   
__future__r   collections.abcr   r   typingr   r   r   referencingr	   r
   r   r   r   referencing._attrsr   referencing._corer   r   r   	_Resolverreferencing.typingr   
AnchorTyper   r   r/   r%   r   SchemaRegistry	Exceptionr   r'   r.   r1   r>   rA   rF   rJ   	frozensetrX   r^   rg   rl   r}   r   r   DRAFT202012DRAFT201909DRAFT7DRAFT6DRAFT4DRAFT3r   r   r   r;   r   r   r   r   <module>r      s{     # " " " " " ) ) ) ) ) ) ) ) ' ' ' ' ' ' ' ' ' ' M M M M M M M M M M M M M M % % % % % % J J J J J J J J A A A A A A A A A A sCx  
t\!	" &!     Y            
 
 
 
*   "   "     #&Y[[%IKK    : #&Y[[%IKK    B #&Y[[%IKK$ $ $ $ $P #&Y[[%IKK' ' ' ' 'V #&Y[[%IKK         0 #&Y[[%IKK         : #&Y[[%IKK         8 m	
$$
 
 
 ?>>
 
 
  , ..
 
 
 ?>>
 
 
  50 0 0d m	
55
 
 
 0//
 
 
  , ::
 
 
 0//
 
 
  50 0 0d 
	
BB	
 	
 	
 0//GGG   +GG	
 	
 	
 0//GGG  % 
  
  
D 
	
BB
 
 
 0//GGG
 
 
 +GG
 
 
 0//GGG
 
 

 
 
8 
	
EE///GGG  
 $GGCCC///GGG  
 
 
  
	
EEKGGG   $GG#%;<KGGG  
 
 
  4<8
 
 <[I;[I5v>5v>5v>5v>*

 
 
4 4    " #'    * 
 
 
 
 
 
 
 
4     r   