
    QEe~                       d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZmZ ddlZddlZddlZddlZddlZddlZdd	lmZmZ dd
lmZ ddlZerddlZddlmZ ddlZ ej        d          Z d Z!e G d d                      Z"e G d d                      Z#e G d d                      Z$ ed           G d d                      Z%d Z&dS )z=
Python representations of the JSON Schema Test Suite tests.
    )annotations)IterableMapping)suppress)partial)Path)TYPE_CHECKINGAnyN)fieldfrozen)Registry)_VALIDATORSz[\W\- ]+c                     t           j                            d          } | t          |           S t          t          j                  j        j        dz  } |                                 st          d          | S )NJSON_SCHEMA_TEST_SUITEjsonzCan't find the JSON-Schema-Test-Suite directory. Set the 'JSON_SCHEMA_TEST_SUITE' environment variable or run the tests from alongside a checkout of the suite.)	osenvirongetr   
jsonschema__file__parentis_dir
ValueError)roots    7lib/python3.11/site-packages/jsonschema/tests/_suite.py_find_suiter      sq    :>>233DDzz
#$$+2V;D;;== 
 
 
 	
 K    c                  j    e Zd ZU  ee          Zded<    ed          Zded<   d ZddZ	ddZ
dS )Suite)factoryr   _rootF)init%referencing.jsonschema.SchemaRegistry_remotesc           	        | j                             dd          }t          j        t	          |          dg}t          j        |                              d          }t          j	        |          }d}d}t                                          |t          j        j                            |                    |                    f|t          j        j                            |                    |                    fg                              |                                t          j        j                  }t*                              | d	|           d S )
Nbinjsonschema_suiteremotesutf-8z?http://localhost:1234/locationIndependentIdentifierPre2019.jsonz>http://localhost:1234/locationIndependentIdentifierDraft4.json)contents)default_specificationr$   )r!   joinpathsys
executablestr
subprocesscheck_outputdecoder   loadsr   with_resourcesreferencingr   DRAFT7create_resourcepopDRAFT4with_contentsitemsDRAFT202012object__setattr__)selfr'   argvr(   	resourceslili4registrys           r   __attrs_post_init__zSuite.__attrs_post_init__7   sF   :..u6HII$4 5 5yA)$//66w??Jw''	NN::,, *1AA!*r!2!2 B   *1AA!*s!3!3 B  
 
 -OO"-"8"D  
 
 	& 	4X66666r   runnerpyperf.Runnerc                    t          j                    D ]0\  }}|                     |                              ||           1d S )N)name)rF   	Validator)r   r;   version	benchmark)r?   rF   rI   rJ   s       r   rL   zSuite.benchmarkV   s^    *022 	 	OD)LLdL##--# .    	 	r   returnVersionc                F    t          || j        dz  |z  | j                  S )Ntests)rI   pathr(   )rN   r!   r$   r?   rI   s     r   rK   zSuite.version]   s0    g%,M
 
 
 	
r   NrF   rG   )rM   rN   )__name__
__module____qualname__r   r   r!   __annotations__r$   rE   rL   rK    r   r   r   r   1   s          %,,,E,,,,6;e6G6G6GHGGGG7 7 7>   
 
 
 
 
 
r   r   c                  Z    e Zd ZU ded<   ded<   ded<   d Zdd
ZddZddZd ZddZ	dS )rN   r   _pathr#   r$   r/   rI   c                N    |                                  D ]} |j        di | d S NrX   )casesrL   )r?   kwargscases      r   rL   zVersion.benchmarkm   s>    JJLL 	% 	%DDN$$V$$$$	% 	%r   rM   Iterable[_Case]c                ^    |                      | j                            d                    S )Nz*.jsonpaths	_cases_inrZ   globr?   s    r   r]   zVersion.casesq   s$    ~~DJOOH$=$=~>>>r   c                ^    |                      | j                            d                    S )Nzoptional/format/*.jsonrb   rd   rg   s    r   format_caseszVersion.format_casest   s%    ~~DJOO4L$M$M~NNNr   c                L    |                      | j        dz  | dz  g          S )Noptionalz.jsonrb   )re   rZ   rR   s     r   optional_cases_ofzVersion.optional_cases_ofw   s+    ~~TZ*%<$~~~%M$N~OOOr   c                v                        dd| j                                                            dd          z             }d fd|D             D             }t	          |t
          j        f|          }t          t                    5  t                      |_
        d d d            n# 1 swxY w Y   |S )NrI   Test- c                    i | ]
}|j         |S rX   )rT   ).0methods     r   
<dictcomp>z0Version.to_unittest_testcase.<locals>.<dictcomp>|   s,     
 
 
 OV
 
 
r   c              3  P   K   | ] }|D ]}|j         D ]} |j        di V  !d S r\   )rP   to_unittest_method)rr   groupr_   testr^   s       r   	<genexpr>z/Version.to_unittest_testcase.<locals>.<genexpr>~   sz        !   J	   ('11&11       r   )r8   rI   titlereplacetypeunittestTestCaser   	Exception)_someone_save_us_the_module_of_the_callerrU   )r?   groupsr^   rI   methodsclss     `   r   to_unittest_testcasezVersion.to_unittest_testcasez   s   zz&&49??+<+<+D+DS"+M+M"MNN
 
   #  
 
 
 4(+-w77
 i   	I 	IFHHCN	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 
s   B..B25B2rc   Iterable[Path]c              #     K   |D ]W}t          j        |                    d                    D ],}t                              || |j        | j                  V  -Xd S )Nr)   )encoding)rK   subjectr(   )r   r3   	read_text_Case	from_dictstemr$   )r?   rc   rQ   r_   s       r   re   zVersion._cases_in   s       	 	D
4>>7>#C#CDD  oo  I M	 &      	 	r   N)rM   r`   )rI   r/   rM   r`   )rc   r   rM   r`   )
rT   rU   rV   rW   rL   r]   ri   rl   r   re   rX   r   r   rN   rN   e   s          KKK3333III% % %? ? ? ?O O O OP P P P  *     r   rN   c                  n    e Zd ZU ded<   ded<   ded<   ded<   ded	<   d
Zded<   ed             ZddZd
S )r   rN   rK   r/   r   descriptionMapping[str, Any] | boolschemazlist[_Test]rP   N
str | Nonecommentc                                         |           fd                    d          D             } | dd|iS )Nc                d    g | ],}t          dd          d         d         d         d|-S )rK   r   r   r   )rK   r   case_descriptionr   r(   rX   )_Test)rr   rx   datar(   s     r   
<listcomp>z#_Case.from_dict.<locals>.<listcomp>   si     	
 	
 	
   YY!%m!4H~   	
 	
 	
r   rP   rX   )updater8   )r   r   r(   r^   rP   s    ``  r   r   z_Case.from_dict   sn    F	
 	
 	
 	
 	
 ((7++	
 	
 	
 s'''$'''r   rF   rG   c           	     p    | j         D ]-}|                    |j        t          |j        fi |           .d S N)rP   
bench_funcfully_qualified_namer   validate_ignoring_errors)r?   rF   r^   rx   s       r   rL   z_Case.benchmark   sV    J 	 	D)5@@@@   	 	r   rS   )rT   rU   rV   rW   r   classmethodr   rL   rX   r   r   r   r      s          LLL$$$$G( ( [(     r   r   F)reprc                      e Zd ZU ded<   ded<   ded<   ded<   ded<   d	ed
<   ded<   ded<   dZded<   d Zed             Zd fdZd Z	d Z
dS )r   rN   rK   r/   r   r   r   r
   r   r   r   boolvalidr#   r$   Nr   r   c                    d| j          dS )Nz<Test >)r   rg   s    r   __repr__z_Test.__repr__   s    414444r   c                f    d                     | j        j        | j        | j        | j        g          S )Nz > )joinrK   rI   r   r   r   rg   s    r   r   z_Test.fully_qualified_name   s6    zz!% 	
 
 	
r   c                    d S r   rX   )rx   s    r   <lambda>z_Test.<lambda>   s    4 r   c           	     .     j         r fd}n fd}d                    dt                              d j                  t                              d j                  t                              d j                  g          |_         |           }|$t          j	        
                    dd          dk    r|S t          j	        
                    dd          dk    rt          j        |          S  t          j        |          |          S )Nc                "     j         di  d S r\   )validatethisr^   r?   s    r   fnz$_Test.to_unittest_method.<locals>.fn   s!    '''''''r   c                    |                      t          j                  5   j        di  d d d            d S # 1 swxY w Y   d S r\   )assertRaisesr   ValidationErrorr   r   s    r   r   z$_Test.to_unittest_method.<locals>.fn   s    &&z'ABB , ,!DM++F+++, , , , , , , , , , , , , , , , , ,s   <A A _rx   JSON_SCHEMA_DEBUG0JSON_SCHEMA_EXPECTED_FAILURES)r   r   _DELIMITERSsubr   r   r   rT   r   r   r   r}   expectedFailureskip)r?   r   r^   r   reasons   ` `  r   rv   z_Test.to_unittest_method   s$   : 	,( ( ( ( ( ( (, , , , , , hhT\22T%:;;T%566	
 
 d>RZ^^,?EELLIZ^^;SAASHH+B///(8=((,,,r   c                    |                     | j                    |d| j        | j        d|}t          j                            dd          dk    rt                       |                    | j                   d S )N)r   rD   r   r   )instancerX   )	check_schemar   r$   r   r   r   
breakpointr   r   )r?   rJ   r^   	validators       r   r   z_Test.validate   s    t{+++I 
;]
 
 
 
	
 :>>-s33s::LLLDI.....r   c                    t          t          j                  5  |                     |           d d d            d S # 1 swxY w Y   d S )N)rJ   )r   r   r   r   )r?   rJ   s     r   r   z_Test.validate_ignoring_errors   s    j011 	/ 	/MMIM...	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/s   >AA)rT   rU   rV   rW   r   r   propertyr   rv   r   r   rX   r   r   r   r      s          LLLIII$$$$KKK3333G5 5 5 
 
 X
 '8&7 - - - -2	/ 	/ 	// / / / /r   r   c                 @    t          j        d          j        d         S )a  
    The FQON of the module 2nd stack frames up from here.

    This is intended to allow us to dynamically return test case classes that
    are indistinguishable from being defined in the module that wants them.

    Otherwise, trial will mis-print the FQON, and copy pasting it won't re-run
    the class that really is running.

    Save us all, this is all so so so so so terrible.
       rT   )r-   	_getframe	f_globalsrX   r   r   r   r     s     =%j11r   )'__doc__
__future__r   collections.abcr   r   
contextlibr   	functoolsr   pathlibr   typingr	   r
   r   r   rer0   r-   r}   attrsr   r   r5   r   referencing.jsonschemapyperfjsonschema.validatorsr   r   compiler   r   r   rN   r   r   r   rX   r   r   <module>r      sJ    # " " " " " - - - - - - - -                   % % % % % % % %  				 				     



                          MMM - - - - - -    bj%%  $ 0
 0
 0
 0
 0
 0
 0
 0
f 1 1 1 1 1 1 1 1h        B UE/ E/ E/ E/ E/ E/ E/ E/P2 2 2 2 2r   