
    HR-e,                         d 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Zddl	Z
ddlZ
ddlZddlmZ ddlmZmZmZ  G d d          ZddZdS )	zK
Contains a class to handle a validation result for a single VOTable
file.
    N)
ExpatError)
exceptionstablexmlutilc                   |    e Zd ZddZd Zd Zd Zd Zd Zd	 Z	d
 Z
d Zd Zd Zd Zd Zd Zd Zd Zd Zd ZdS )Resultresults
   c                 "   || _         t          j                    }|                    |           |                                | _        || _        t          j        	                    | j        dd         | j        dd         | j        dd                    | _
        t          j                            |                                           s&t          j        |                                            || _        |                                  d S )Nr         )urlhashlibmd5update	hexdigest_hash_rootospathjoin_pathexistsget_dirpathmakedirstimeoutload_attributes)selfr   rootr   ms        Clib/python3.11/site-packages/astropy/io/votable/validator/result.py__init__zResult.__init__   s    KMM	[[]]

W\\$*QqS/4:ac?DJqrrNSS
w~~d..0011 	,K((**+++    c                     | S N r   s    r!   	__enter__zResult.__enter__%   s    r#   c                 .    |                                   d S r%   )save_attributes)r   argss     r!   __exit__zResult.__exit__(   s    r#   c                 V    t           j                            | j        | j                  S r%   )r   r   r   r   r   r'   s    r!   r   zResult.get_dirpath+   s    w||DJ
333r#   c                     | j         S r%   )r   r'   s    r!   get_htmlpathzResult.get_htmlpath.   s
    zr#   c                 f    t           j                            |                                 d          S )Nz
values.datr   r   r   r   r'   s    r!   get_attribute_pathzResult.get_attribute_path1   s$    w||D,,..===r#   c                 f    t           j                            |                                 d          S )Nzvo.xmlr1   r'   s    r!   get_vo_xml_pathzResult.get_vo_xml_path4   s$    w||D,,..999r#   c                    |                                  }t          j                            |          r	 t	          |d          5 }t          j        |          | _        d d d            d S # 1 swxY w Y   d S # t          $ rW t          j
        |                                            t          j        |                                            i | _        Y d S w xY wi | _        d S Nrb)r2   r   r   r   openpickleload_attributes	Exceptionshutilrmtreer   r   r   r   fds      r!   r   zResult.load_attributes9   s#   &&((7>>$ 		"&$%% 7'-{2D$7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 & & &d..00111D,,..///#%    &
  "Ds6   A9 A,A9 ,A00A9 3A04A9 9ACCc                     |                                  }t          |d          5 }t          j        | j        |           d d d            d S # 1 swxY w Y   d S )Nwb)r2   r8   r9   dumpr;   r?   s      r!   r*   zResult.save_attributesF   s    &&(($ 	.K("---	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   AAAc                     | j         |         S r%   r;   r   keys     r!   __getitem__zResult.__getitem__K   s    $$r#   c                     || j         |<   d S r%   rE   )r   rG   vals      r!   __setitem__zResult.__setitem__N   s     #r#   c                     || j         v S r%   rE   rF   s     r!   __contains__zResult.__contains__Q   s    d&&&r#   c                                                       d j        vrd  d<   t          j                                      rd S  fd}d }	 t
          j                             j        	                    d           j
                  }n# t
          j        j        $ r5}t          |d          r|j        }n|j        } ||           Y d }~d S d }~wt           j        j        $ r&} |dt'          |                      Y d }~d S d }~wt(          j
        t*          f$ r} |d           Y d }~d S d }~ww xY w| |d           d S 	 |                                }|                                 n(# t(          j
        $ r} |d           Y d }~d S d }~ww xY wt1          d	          5 }|                    |           d d d            d S # 1 swxY w Y   d S )
Nnetwork_errorc                     t          |           } t          d          5 }|                    d|  d                                           d d d            n# 1 swxY w Y   | d<   d S )NrB   zFAILED: 
rO   )strr8   writeencode)reasonr@   r   r   s     r!   failz)Result.download_xml_content.<locals>.fail_   s    [[FdD!! 9R.F...55778889 9 9 9 9 9 9 9 9 9 9 9 9 9 9$*D!!!s   ,AA Aascii)r   rU   zHTTPException: TimeoutzInvalid URLrB   )r4   r;   r   r   r   urllibrequesturlopenr   decoder   errorURLErrorhasattrrU   codehttpclientHTTPExceptionrR   socketOSErrorreadcloser8   rS   )r   rV   rerU   contentr@   r   s   `      @r!   download_xml_contentzResult.download_xml_contentV   s}   ##%%$"222$(D!7>>$ 	F	+ 	+ 	+ 	+ 	+ 	+ 	&&txw'?'?&VVAA|$ 	 	 	q(##  DLLLFFFFF{( 	 	 	D+3q66++,,,FFFFF( 	 	 	DOOOFFFFF	 9DF	ffhhG
 GGIIII	 ~ 	 	 	DOOOFFFFF	 $ 	HHW	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sZ   >B D9"*CD9)D

D9#D44D9E5 5FFF-GGGc                    |                                  }t          j                            |          s|                                  t          |d          5 }|                                }d d d            n# 1 swxY w Y   |S r6   )r4   r   r   r   rk   r8   rf   )r   r   r@   rj   s       r!   get_xml_contentzResult.get_xml_content   s    ##%%w~~d## 	(%%'''$ 	 ggiiG	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   A99A= A=c                 f   |                                  }t          j                            |          s|                                  d| d<   d| v r/| d         'd| d<   d| d<   g | d<   d | d<   t                      | d	<   d S d}d}d }g }t          |d
          5 }t          j        d          5 }	 t          j
        |d|          }nK# t          t          t          f$ r1}|                    t          |                     |dz  }Y d }~nd }~ww xY wd d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d |D             |z   }||j        x| d<   }	ndx| d<   }	d| vrW	 t#          j        ||	          \  }
}}|
dk    | d<   || d<   n.# t&          $ r!}d | d<   t          |          | d<   Y d }~nd }~ww xY wt                      }|D ]K}t)          j        |          }|d         r|dz  }|d         r|dz  }|                    |d                    L|| d<   || d<   || d<   || d	<   d S )N versionrO   r   	nwarningsnexceptionswarningsxmllintwarning_typesr7   T)recordwarn)verifyfilename   c                 6    g | ]}t          |j                  S r&   )rR   message).0xs     r!   
<listcomp>z&Result.validate_vo.<locals>.<listcomp>   s     777AQY777r#   1.0xmllint_content
is_warningis_exceptionwarning)r4   r   r   r   rk   setr8   rs   catch_warningsr   parse
ValueError	TypeErrorr   appendrR   rp   r   validate_schemare   r   parse_vowarningadd)r   r   rr   rq   tlinesinputwarning_linesri   rp   successstdoutstderrru   linews                   r!   validate_vozResult.validate_vo   sL   ##%%w~~d## 	(%%'''Yd""tO'<'H !D"#D!D"DO$'EED!F	$ 	%(555 %%E&4HHHAA"Iz: % % %LLQ(((1$KKKKKK%% % % % % % % % % % % % % % %	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 	% 87777%?=()	1DOgg(--DOgD  	1*1*A$*P*P' #*Q,Y*0&''  1 1 1"&Y*-a&&&''''''1  	, 	,D*400A Q	  !q a	l++++%[)] Z -_sx   D6.D0CDD'DDDDD6D#	#D6&D#	'D66D:=D:+F 
F>F99F>c                     || d         v S )Nru   r&   )r   warning_codes     r!   has_warningzResult.has_warning   s    tO444r#   c                     d| vrd | d<   | d         dk    r!| d          o| d         dk    o| d         dk    S | d         dk    r!| d          o| d         dk    p| d         dk    S | d         dk    r
| d         d uS d S )	NrO   expectedgoodrq   r   rr   	incorrectbrokenr&   r'   s    r!   match_expectationszResult.match_expectations   s    $&&$(D!
v%%)) -%*-'1,
 *,,O,, [!A%@m)<q)@ *))(44 *)r#   c                 
   |                                  }t          j        dd|dd|gt          j        t          j                  }|                                \  }}t          |          s|j        rd| d<   nd| d<   || d<   d S )	Njavaz-jarvotlintzvalidate=false)r   r   FTvotlint_content)r4   
subprocessPopenPIPEcommunicatelen
returncode)r   path_to_stilts_jarry   pr   r   s         r!   validate_with_votlintzResult.validate_with_votlint   s    ''))V/<LhW??
 
 

 v;; 	#!, 	##DOO"DO"(r#   N)r	   r
   )__name__
__module____qualname__r"   r(   r,   r   r/   r2   r4   r   r*   rH   rK   rM   rk   rm   r   r   r   r   r&   r#   r!   r   r      s)       
 
 
 
    4 4 4  > > >: : :
" " ". . .
% % %$ $ $' ' '
- - -^  9. 9. 9.v5 5 55 5 5") ) ) ) )r#   r   c                 l	   g }g }g }g }g }g }g }	g }
g }g }g }g }g }i }g }i }| D ]	}|rt          |           t          |t                    r|}nt          ||          }|                    |           |d         dk    r+|d         dk    r|d         du r|                    |           |                                s|                    |           |d         du r|                    |           |d         du r-|d         dk    r!|d         dk    r|                    |           d|v r]|d         du rS|                    |           d	|vrd |d	<   |d         dk    r)|d         dk    r|d	         |	                    |           d	|v r|d	         |
                    |           |d
         }|dk    r|                    |           nM|dk    r|                    |           n1|dk    r|                    |           n|                    |           |d         dk    r{|                    |           |d         D ]]}|Yt          |          dk    rF|                    d          r1|                    |g            ||                             |           ^|d         dk    r{|                    |           |d         D ]]}|Yt          |          dk    rF|                    d          r1|                    |g            ||                             |           ^t          |	                                          }|
                                 t          |	                                          }|
                                 dd|fdd|fdd|fdd|fdd|dgfdd|fdd |	dgfd!d"|
fd#d$|fd%d&|fd'd(|fd)d*|fd+d,|fg}|D ]b\  }}|rt          |           t          t          |d           }|r4|                                }|                    || d-| |dd.gf           c|                    d/d0|f           |D ]b\  }}|rt          |           t          t          |d           }|r4|                                }|                    || d-| |dd.gf           c|S )1N)r   rq   r   rr   rt   TFr   rO   rp   r   z1.1z1.2ru      WEallz	All testscorrectCorrect
unexpected
UnexpectedschemazInvalid against schemaschema_mismatchz&Invalid against schema/Passed vo.tableulfail_votlintzFailed votlintvotlint_mismatchzFailed votlint/Passed vo.tablenetwork_failureszNetwork failuresz
version1.0zVersion 1.0z
version1.1zVersion 1.1z
version1.2zVersion 1.2version_unknownzVersion unknownrs   Warningsz: lir   
Exceptions)next
isinstancer   r   r   r   
startswith
setdefaultlistitemssortgetattrr   get_short_name)r	   r   sall_resultsr   not_expectedfail_schemar   r   r   r   
version_10
version_11
version_12r   has_warningswarning_sethas_exceptionsexception_setr   r~   rp   r   exctablesr   warning_classwarning_descrexception_codeexception_classexception_descrs                                  r!   get_result_subsetsr      s   KGLKOLJJJOLKNM 61 61 	GGGc6"" 	'AAs&&&A1[>Q1]#3q#8#8Qy\T=Q=QNN1##%% 	#"""Y<5  q!!!Y<5  Q{^q%8%8Q}=MQR=R=R""1%%%>>a	le33"""a''%)/"+!##m$))o&. ''***aAo$6$B##A&&&I,ea    a    a    ""1%%%[>A"""_- 3 3'G))**3// *  **7B777(//222]a!!!$$$) 1 1?s3xx1}}9L9L}!,,S"555!#&--a000{((**++K,,..//M 
[)	Iw'	|\2	+[94F		
 
)<8,F		
 
/1AB	}j1	}j1	}j1	-?	Z./F2 "-  g 	GGG
L$?? 		)88::MMM #66}664L	   MM<~>???,   	GGG!*ndCC 		-<<>>OMM"%::::4L	   Mr#   r%   )__doc__r   http.clientra   r   r9   r=   rd   r   urllib.errorrY   urllib.requestrs   xml.parsers.expatr   astropy.io.votabler   r   r   r   r   r&   r#   r!   <module>r      s          				                 ( ( ( ( ( ( : 9 9 9 9 9 9 9 9 9P) P) P) P) P) P) P) P)fH H H H H Hr#   