
    `d/                      ^   d 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m	Z	 	 ddlmZ ddlZddlmZ ddlmZmZ  G d	 d
e      Zej.                   G d de             Zej.                   G d de             Zej.                   G d de             Zd Z ej:                  d      Zej?                  ddddd       ej?                  ddd       ej?                  ddd d!gd d"#       ej?                  d$d%ed&'       ej?                  d(d)       ej?                  d*d+ e	j@                  d,      -       ej?                  d.d/       d0 Z!d1 Z"ejF                  d2d fd3Z$ejJ                  ejL                  ejN                  fd4Z(y# e
$ r ddlZ	Y sw xY w# e
$ r
 ddlmZ Y ~w xY w)5z"
The ``jsonschema`` command line.
    )JSONDecodeError)dedentN)metadataresolve_name)SchemaError)RefResolvervalidator_forc                       e Zd Zy)_CannotLoadFileN)__name__
__module____qualname__     0/usr/lib/python3/dist-packages/jsonschema/cli.pyr   r      s    r   r   c                       e Zd Z ej                         Z ej                         Z ej                         Zed        Z	d Z
d Zd Zd Zd Zy)
_Outputterc                 j    |d   dk(  rt        |d         }n|d   dk(  r
t               } | ||      S )Noutputplainerror_formatpretty)	formatterstdoutstderr)_PlainFormatter_PrettyFormatter)cls	argumentsr   r   r   s        r   from_argumentsz_Outputter.from_arguments'   sB    X')'	.(ABIx H,(*IYvfEEr   c                 f   	 t        |      }|5  	 t        j                  |      cd d d        S # t        $ r0 | j                  |t        j                                t               w xY w# t        $ r0 | j                  |t        j                                t               w xY w# 1 sw Y   y xY w)Npathexc_info)
openFileNotFoundErrorfilenotfound_errorsysr%   r   jsonloadr   parsing_error)selfr$   files      r   r+   z_Outputter.load/   s    	$:D
  	((yy	( 	(	 ! 	$###G!##	$ # (""s||~"F%''(	( 	(s%   / B'A+9A(+9B$$B''B0c                 n    | j                   j                   | j                  j                  di |       y Nr   )_stderrwrite
_formatterr(   r-   kwargss     r   r(   z_Outputter.filenotfound_error=   )    =4??==GGHr   c                 n    | j                   j                   | j                  j                  di |       y r0   )r1   r2   r3   r,   r4   s     r   r,   z_Outputter.parsing_error@   s)    84??88B6BCr   c                 n    | j                   j                   | j                  j                  di |       y r0   )r1   r2   r3   validation_errorr4   s     r   r9   z_Outputter.validation_errorC   s)    ;4??;;EfEFr   c                 n    | j                   j                   | j                  j                  di |       y r0   )_stdoutr2   r3   validation_successr4   s     r   r<   z_Outputter.validation_successF   r6   r   N)r   r   r   attribr3   r;   r1   classmethodr!   r+   r(   r,   r9   r<   r   r   r   r   r       s\     JdggiGdggiGF F(IDGIr   r   c                   8    e Zd Z ed      ZdZd Zd Zd Zd Z	y)r   z`        ===[{type}]===({path})===

        {body}
        -----------------------------
        z===[SUCCESS]===({path})===
c                 \    | j                   j                  |ddj                  |            S )Nr'   z{!r} does not exist.r$   typebody)
_ERROR_MSGformatr-   r$   r%   s      r   r(   z#_PrettyFormatter.filenotfound_errorW   s2    %%$'..t4 & 
 	
r   c                     |\  }}}dj                  t        j                  |||            }| j                  j	                  ||j
                  |      S )N rB   )join	tracebackformat_exceptionrE   rF   r   )r-   r$   r%   exc_type	exc_valueexc_traceback	exc_liness          r   r,   z_PrettyFormatter.parsing_error^   s[    -5*)]GG&&xMJ
	 %%"" & 
 	
r   c                 f    | j                   j                  ||j                  j                  |      S )NrB   )rE   rF   	__class__r   r-   instance_patherrors      r   r9   z!_PrettyFormatter.validation_errori   s1    %%)) & 
 	
r   c                 :    | j                   j                  |      S )N)r$   )_SUCCESS_MSGrF   r-   rT   s     r   r<   z#_PrettyFormatter.validation_successp   s      '']';;r   N)
r   r   r   r   rE   rW   r(   r,   r9   r<   r   r   r   r   r   J   s.     	J 2L
	

<r   r   c                   F    e Zd Z ej                         Zd Zd Zd Zd Z	y)r   c                 $    dj                  |      S )Nz{!r} does not exist.
)rF   rG   s      r   r(   z"_PlainFormatter.filenotfound_errory   s    '..t44r   c                 L    dj                  |dk(  rdn
t        |      |d         S )NzFailed to parse {}: {}
<stdin>   )rF   reprrG   s      r   r,   z_PlainFormatter.parsing_error|   s,    )00*IT
QK
 	
r   c                 <    | j                   j                  ||      S )N)	file_namerU   )_error_formatrF   rS   s      r   r9   z _PlainFormatter.validation_error   s    !!((=(NNr   c                      y)NrI   r   rX   s     r   r<   z"_PlainFormatter.validation_success   s    r   N)
r   r   r   r=   r>   ra   r(   r,   r9   r<   r   r   r   r   r   t   s&     DGGIM5
Or   r   c                 *    d| vrd| z   } t        |       S )N.zjsonschema.r   )names    r   _resolve_name_with_defaultrf      s    
$t#r   zJSON Schema Validation CLI)descriptionz-iz
--instanceappend	instancesz
        a path to a JSON instance (i.e. filename.json) to validate (may
        be specified multiple times). If no instances are provided via this
        option, one will be expected on standard input.
    )actiondesthelpz-Fz--error-formata  
        the format to use for each validation error message, specified
        in a form suitable for str.format. This string will be passed
        one formatted object named 'error' for each ValidationError.
        Only provide this option when using --output=plain, which is the
        default. If this argument is unprovided and --output=plain is
        used, a simple default representation will be used.
    )rl   z-oz--outputr   r   z
        an output format to use. 'plain' (default) will produce minimal
        text with one line for each error, while 'pretty' will produce
        more detailed human-readable output on multiple lines.
    )choicesdefaultrl   z-Vz--validatorz
        the fully qualified object name of a validator to use, or, for
        validators that are registered with jsonschema, simply the name
        of the class.
    )rC   rl   z
--base-uriz
        a base URI to assign to the provided schema, even if it does not
        declare one (via e.g. $id). This option can be used if you wish to
        resolve relative references to a particular URI (or local path)
    z	--versionversion
jsonschema)rj   ro   schemaz=the path to a JSON Schema to validate with (i.e. schema.json)c                     t        t        j                  | xs dg            }|d   dk7  r|d   rt        j                  d      |d   dk(  r
|d   d|d<   |S )Nz--helpargsr   r   r   z3--error-format can only be used with --output plainz"{error.instance}: {error.message}
)varsparser
parse_argsrU   )rt   r    s     r   rw   rw      sr    V&&D,>XJ&?@Ig%)N*CllA
 	
 g%)N*C*K$I	.!r   c                     d}|j                  |      D ]  }d}|j                  | |        |s|j                  |        |S )NFTrT   rU   )rT   )iter_errorsr9   r<   )rT   instance	validator	outputterinvalidrU   s         r   _validate_instancer      sV    G&&x0 M""e"LM $$=$ANr   r]   c                 V    t        j                  t        t        |                    y )Nrs   )r    )r)   exitrunrw   rs   s    r   mainr      s    HHS:4012r   c                    t         j                  | ||      	 j                  | d         }| d   t	        |      | d<   	 | d   j                  |       | d   rj                  | d   }}n	fd}dg}| d	   t        | d	   |
      nd } | d   ||      }	d}
|D ]  }	  ||      }|
t        |||	      z  }
 |
S # t        $ r Y yw xY w# t        $ r }j                  | d   |       Y d }~yd }~ww xY w# t        $ r d}
Y jw xY w)N)r    r   r   rq   r]   r|   ry   ri   c                     	 t        j                        S # t        $ r0 j                  dt	        j
                                t               w xY w)Nr\   r#   )r*   r+   r   r,   r)   r%   r   )_r}   stdins    r   r+   zrun.<locals>.load  sO    (yy''" (''"S\\^ (  &''	(s	    9Ar\   base_uri)r   referrer)resolverr   )rT   r{   r|   r}   )
r   r!   r+   r   r
   check_schemar   r9   r	   r   )r    r   r   r   rq   rU   r+   ri   r   r|   	exit_codeeachr{   r}   s      `         @r   r   r      s   )) * I	( 34 %!.v!6	++++F3 #..)K*@i	( K	
 
:		* :& 15 
 '	+&vAII 
	DzH +"!##	 I a    ""#H- 	# 	
 <  	I	s;   C C $C=	CC	C:C55C:=D
D))__doc__r*   r   textwrapr   argparser)   rK   	importlibr   ImportErrorimportlib_metadatapkgutilr   pkgutil_resolve_namer=   jsonschema.exceptionsr   jsonschema.validatorsr	   r
   	Exceptionr   sobjectr   r   r   rf   ArgumentParserrv   add_argumentro   rw   r   argvr   r   r   r   r   r   r   r   <module>r      s   !    
 *"2$  - <	i 	 &I &I &IR &<v &< &<R f  ( 
!	 	 ,
   ,	
	  	   

  
   *h
	  	   -	#
     
     H\*  
   	H   hhqrl 3 **SZZsyy 9s  *)*
  2112s"   F F 	FFF,+F,