
    QEe9              	      b	   U d dl mZ d dlmZ d dl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mZ e	j        egef         Z e	j        de          Ze	j        e	j        e         e	j        e	j        e         df         f         Z ej        d	ej                  Z G d
 d          Z e            Z e            Z e            Z e            Z e            Z  e            Z! e"eeeee e!          Z#de$d<   	 	 	 	 	 	 	 	 dQdRdZ% e%d           e%d          dSd                        Z& e%ddddddej'                  dSd            Z( e%dej'                  dSd             Z) ee*          5  d d!l+m,Z,  e%d"d#d#d#d#d#          dSd$            Z-ddd           n# 1 swxY w Y    ee*          5  d dl.Z. e%d%d%d%e.j/        e0f&          dSd'            Z1ddd           n# 1 swxY w Y   	 d dl2Z2 e%d(d(d(e3&          dSd)            Z4 e%d*d*d*e3&          dSd+            Z5 e%d,e3          dSd-            Z6 e%d.d.d.d.e3/          dSd0            Z7nd# e*$ r\  ee*          5  d d1l8m9Z9  e%d,          dSd2            Z6 e%d.d.d.d.e3/          dSd3            Z7ddd           n# 1 swxY w Y   Y nw xY w ee*          5  d d4l:m;Z;  e%d5          dSd6            Z< e%d7d7d78          dSd9            Z=ddd           n# 1 swxY w Y    e%d:ej>                  dSd;            Z? e%d<d<d<d<e3=          dSd>            Z@ e%d7e3?          dSd@            ZA ee*          5  d dAlBmCZC d dlBZBdSdBZD e%dCe3eEf?          dSdD            ZFddd           n# 1 swxY w Y    ee*          5  d dlGZG e%dEdEdEdEeGjH        /          dSdF            ZI e%dGdGdGeGjH        &          dSdH            ZJddd           n# 1 swxY w Y    ee*          5  d dlKZK e%dIdIdIdIJ          dSdK            ZLddd           n# 1 swxY w Y    ee*          5  d dlMZM e%dLdLeMjN        M          dSdN            ZOddd           n# 1 swxY w Y    e%dOdOe3M          dSdP            ZPdS )T    )annotations)suppress)UUIDN)FormatError_F)bound.z^\d{4}-\d{2}-\d{2}$c                      e Zd ZU dZi Zded<   dddZd Z	 dddZe		 ddd            Z
e		 ddd            ZddZddZdS )FormatCheckeray  
    A ``format`` property checker.

    JSON Schema does not mandate that the ``format`` property actually do any
    validation. If validation is desired however, instances of this class can
    be hooked into validators to enable format validation.

    `FormatChecker` objects always return ``True`` when asked about
    formats that they do not know how to validate.

    To add a check for a custom format use the `FormatChecker.checks`
    decorator.

    Arguments:

        formats:

            The known formats to validate. This argument can be used to
            limit which formats will be used during validation.
    z3dict[str, tuple[_FormatCheckCallable, _RaisesType]]checkersNformatstyping.Iterable[str] | Nonec                d     | j                                         } fd|D              _         d S )Nc                ,    i | ]}|j         |         S  r   ).0kselfs     2lib/python3.11/site-packages/jsonschema/_format.py
<dictcomp>z*FormatChecker.__init__.<locals>.<dictcomp>5   s"    >>>DM!,>>>    )r   keys)r   r   s   ` r   __init__zFormatChecker.__init__2   s:    ?m((**G>>>>g>>>r   c                2    dt          | j                   dS )Nz<FormatChecker checkers=>)sortedr   )r   s    r   __repr__zFormatChecker.__repr__7   s    B&*?*?BBBBr   r   formatstrraises_RaisesTypereturntyping.Callable[[_F], _F]c                     d fd}|S )a  
        Register a decorated function as validating a new format.

        Arguments:

            format:

                The format that the decorated function will check.

            raises:

                The exception(s) raised by the decorated function when an
                invalid instance is found.

                The exception object will be accessible as the
                `jsonschema.exceptions.ValidationError.cause` attribute of the
                resulting validation error.
        funcr   r"   c                     | fj         <   | S Nr   )r%   r   r    r   s    r   _checksz%FormatChecker.checks.<locals>._checksP   s    %)6NDM&!Kr   r%   r   r"   r   r   )r   r   r    r(   s   ``` r   checkszFormatChecker.checks:   s4    ,	 	 	 	 	 	 	 	 r   c                h    t          j        dt          d           |                     ||          S )NzoFormatChecker.cls_checks is deprecated. Call FormatChecker.checks on a specific FormatChecker instance instead.   )
stacklevel)r   r    )warningswarnDeprecationWarning_cls_checks)clsr   r    s      r   
cls_checkszFormatChecker.cls_checksV   sB     	 	
 	
 	
 	
 fV<<<r   c                     d fd}|S )Nr%   r   r"   c                     | fj         <   | S r'   r   )r%   r2   r   r    s    r   r(   z*FormatChecker._cls_checks.<locals>._checksi   s    $(&>CL Kr   r)   r   )r2   r   r    r(   s   ``` r   r1   zFormatChecker._cls_checkse   s4    	 	 	 	 	 	 	 	 r   instanceobjectNonec                    || j         vrdS | j         |         \  }}d\  }}	  ||          }n# |$ r}|}Y d}~nd}~ww xY w|st          |d||          dS )a  
        Check whether the instance conforms to the given format.

        Arguments:

            instance (*any primitive type*, i.e. str, number, bool):

                The instance to check

            format:

                The format that instance should conform to

        Raises:

            FormatError:

                if the instance does not conform to ``format``
        N)NNz
 is not a )cause)r   r   )r   r6   r   r%   r    resultr:   es           r   checkzFormatChecker.checko   s    ( &&F}V,f"	T(^^FF 	 	 	EEEEEE	 	PAAvAAOOOO	P 	Ps   . ?:?boolc                V    	 |                      ||           dS # t          $ r Y dS w xY w)aV  
        Check whether the instance conforms to the given format.

        Arguments:

            instance (*any primitive type*, i.e. str, number, bool):

                The instance to check

            format:

                The format that instance should conform to

        Returns:

            bool: whether it conformed
        TF)r=   r   )r   r6   r   s      r   conformszFormatChecker.conforms   sF    $	JJx((( 4  	 	 	55	s    
((r'   )r   r   )r   )r   r   r    r!   r"   r#   )r6   r7   r   r   r"   r8   )r6   r7   r   r   r"   r>   )__name__
__module____qualname____doc__r   __annotations__r   r   r*   classmethodr3   r1   r=   r@   r   r   r   r
   r
      s         0 	     
? ? ? ? ?
C C C 24    8 02= = = = [= 02    [P P P P@     r   r
   )draft3draft4draft6draft7draft201909draft202012zdict[str, FormatChecker]_draft_checkersr   r"   r#   c                \    p| p| p| p| p| p| dfd}|S )Nr%   r   r"   c                f   r)t          d                                       |           } r)t          d                                       |           } r)t          d                                       |           } r)t          d                                       |           } r)t          d                                       |           } r)t          d                                       |           } t                              p	pppp          |            | S )NrG   rH   rI   rJ   rK   rL   )rM   r*   r
   r1   )r%   rK   rL   rG   rH   rI   rJ   r    s    r   wrapz_checks_drafts.<locals>.wrap   s^    	J"8,33FFCCDIID 	J"8,33FFCCDIID 	J"8,33FFCCDIID 	J"8,33FFCCDIID 	"=188fMM D  	"=188fMM D 	!!N;N&NFNfN	
 	
 	 	 	 r   r)   r   )	namerG   rH   rI   rJ   rK   rL   r    rP   s	    ``````` r   _checks_draftsrR      s     ^tF^tF^tF^tF%K%K           4 Kr   z	idn-email)rQ   emailr6   r7   r>   c                8    t          | t                    sdS d| v S )NT@)
isinstancer   r6   s    r   is_emailrX      s%     h$$ t(?r   z
ip-addressipv4)rG   rH   rI   rJ   rK   rL   r    c                r    t          | t                    sdS t          t          j        |                     S NT)rV   r   r>   	ipaddressIPv4AddressrW   s    r   is_ipv4r^      s4     h$$ t	%h//000r   ipv6)rQ   r    c                |    t          | t                    sdS t          j        |           }t	          |dd           S )NTscope_id )rV   r   r\   IPv6Addressgetattr)r6   addresss     r   is_ipv6rf      s>    h$$ t#H--Gw
B////r   )FQDNz	host-namehostnamec                \    t          | t                    sdS t          | d          j        S )NT   )
min_labels)rV   r   rg   is_validrW   s    r   is_host_namerm   
  s1     (C(( 	4H+++44r   zidn-hostname)rJ   rK   rL   r    c                \    t          | t                    sdS t          j        |            dS r[   )rV   r   idnaencoderW   s    r   is_idn_host_namerq     s0     (C(( 	4Htr   iric                \    t          | t                    sdS t          j        | d          S )NTIRIrulerV   r   rfc3987parserW   s    r   is_irirz   C  s0     (C(( 	4}XE2222r   ziri-referencec                \    t          | t                    sdS t          j        | d          S )NTIRI_referenceru   rw   rW   s    r   is_iri_referencer}   N  s0     (C(( 	4}XO<<<<r   uric                \    t          | t                    sdS t          j        | d          S NTURIru   rw   rW   s    r   is_urir   Y  s.    (C(( 	4}XE2222r   zuri-reference)rI   rJ   rK   rL   r    c                \    t          | t                    sdS t          j        | d          S NTURI_referenceru   rw   rW   s    r   is_uri_referencer   _  s0     (C(( 	4}XO<<<<r   )validate_rfc3986c                R    t          | t                    sdS t          | d          S r   rV   r   r   rW   s    r   r   r   /  s,    h,, t#H59999r   c                R    t          | t                    sdS t          | d          S r   r   rW   s    r   r   r   5  s.     h,, t#H?CCCCr   )validate_rfc3339z	date-timec                r    t          | t                    sdS t          |                                           S r[   )rV   r   r   upperrW   s    r   is_datetimer   o  s1    (C(( 	4 0 0111r   time)rJ   rK   rL   c                T    t          | t                    sdS t          d| z             S )NTz1970-01-01T)rV   r   r   rW   s    r   is_timer   u  s.     (C(( 	4=83444r   regexc                r    t          | t                    sdS t          t          j        |                     S r[   )rV   r   r>   recompilerW   s    r   is_regexr     s1    h$$ t
8$$%%%r   date)rG   rJ   rK   rL   r    c                    t          | t                    sdS t          t                              |           ot
          j                            |                     S r[   )rV   r   r>   _RE_DATE	fullmatchdatetimer   fromisoformatrW   s    r   is_dater     sV     h$$ t8$$ 	2M''11  r   )rG   r    c                    t          | t                    sdS t          t          j                            | d                    S )NTz%H:%M:%S)rV   r   r>   r   strptimerW   s    r   is_draft3_timer     s:    h$$ t!**8Z@@AAAr   )CSS21_NAMES_TO_HEXc                *    t          j        |           S r'   )	webcolorsnormalize_hexrW   s    r   is_css_color_coder     s    &x000r   colorc                    t          | t                    r|                                 t          v rdS t	          |           S r[   )rV   r   lowerr   r   rW   s    r   is_css21_colorr     s?     8S))	~~#5554 ***r   zjson-pointerc                r    t          | t                    sdS t          t          j        |                     S r[   )rV   r   r>   jsonpointerJsonPointerrW   s    r   is_json_pointerr     s4     (C(( 	4K+H55666r   zrelative-json-pointerc                t   t          | t                    sdS | sdS g d}}t          |           D ]c\  }}|                                r;|dk    rt	          | |dz
                     dk    r dS |                    |           T|s dS | |d          } |dk    p t          t          j        |                    S )NTFrb   r   rj   #)	rV   r   	enumerateisdigitintappendr>   r   r   )r6   non_negative_integerresti	characters        r   is_relative_json_pointerr     s     (C(( 	4 	5%'d%h// 	 	LAy  "" q55S!a%11Q66 55$++I666' uuABB<DC[%<T%B%B C CCr   zuri-template)rI   rJ   rK   rL   c                X    t          | t                    sdS t          j        |           S r[   )rV   r   uri_templatevalidaterW   s    r   is_uri_templater     s,     (C(( 	4$X...r   duration)rK   rL   r    c                    t          | t                    sdS t          j        |            |                     t          d                    S )NTDMYWHMS)rV   r   isodurationparse_durationendswithtuplerW   s    r   is_durationr     sH     (C(( 	4"8,,,  y!1!1222r   uuidc                     t           t                    sdS t                      t           fddD                       S )NTc              3  0   K   | ]}|         d k    V  dS )-Nr   )r   positionr6   s     r   	<genexpr>zis_uuid.<locals>.<genexpr>
  s-      IIXx!S(IIIIIIr   )            )rV   r   r   allrW   s   `r   is_uuidr     sJ     h$$ tNNNIIIIIIIIIIr   )NNNNNNNr   )r"   r#   )r6   r7   r"   r>   )Q
__future__r   
contextlibr   r   r   r   r\   r   typingr.   jsonschema.exceptionsr   Callabler7   r>   _FormatCheckCallableTypeVarr   UnionType	ExceptionTupler!   r   ASCIIr   r
   draft3_format_checkerdraft4_format_checkerdraft6_format_checkerdraft7_format_checkerdraft201909_format_checkerdraft202012_format_checkerdictrM   rE   rR   rX   AddressValueErrorr^   rf   ImportErrorfqdnrg   rm   ro   	IDNAErrorUnicodeErrorrq   rx   
ValueErrorrz   r}   r   r   rfc3986_validatorr   rfc3339_validatorr   r   r   errorr   r   r   r   r   r   	TypeErrorr   r   JsonPointerExceptionr   r   r   r   r   DurationParsingExceptionr   r   r   r   r   <module>r      sS   " " " " " " "                  				   - - - - - -x~6 V^D 4555l
K	FLY)?)DEF 2:,bh77O O O O O O O Od & % % % *]__ *]__ ,0D    **- - -     
+ + + + +\ [!!!W    "! &  1 1 1 1 VI$?@@@0 0 0 A@0 Xk 5 5^  5 5 5 55 5 5 5 5 5 5 5 5 5 5 5 5 5 5" Xk  KKK^""-	                   "@=NNN2 ^	  3 3 3 3
 ^##	  = = = =
 ^z2223 3 3 323
 ^##  = = = = =w  D D D	+		 D D666666	U	#	#	#	: 	: 	: 
$	#	:
 
""''

 

 

	D 	D 	D

 

	D!D D D D D D D D D D D D D D DDB Xk 5 5222222^%%%2 2 2 &%2
 ^  
5 5 5 
55 5 5 5 5 5 5 5 5 5 5 5 5 5 5( WRX...& & & /.&       vj111B B B 21B Xk + +,,,,,,1 1 1 1 ^7J	+BCCC+ + + DC++ + + + + + + + + + + + + + +" Xk 0D 0D^""/  7 7 7 7 ^&++/	  D D D D30D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0D 0Df Xk / /^""	  / / / // / / / / / / / / / / / / / / Xk 3 3^3  
3 3 3 
33 3 3 3 3 3 3 3 3 3 3 3 3 3 3    
J J J 
J J Js   4"F""F&)F&8%G))G-0G-5I J>-7J0$J>0J4	4J>7J4	8J>=J>5LLL0(N$$N(+N(:APPPQQQ"RRR