U
    e»{jŠ,  ã                   @   s�   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„ dƒZd	dd„ZdS )
zK
Contains a class to handle a validation result for a single VOTable
file.
é    N)Ú
ExpatError)Ú
exceptionsÚtableÚxmlutilc                   @   sž   e Zd Zd(dd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'S ))ÚResultÚresultsé
   c                 C   sˆ   || _ t ¡ }| |¡ | ¡ | _|| _tj 	| jdd… | jdd… | jdd … ¡| _
tj |  ¡ ¡svt |  ¡ ¡ || _|  ¡  d S )Nr   é   é   )ÚurlÚhashlibÚmd5ÚupdateÚ	hexdigestÚ_hashÚ_rootÚosÚpathÚjoinÚ_pathÚexistsÚget_dirpathÚmakedirsÚtimeoutÚload_attributes)Úselfr   Úrootr   Úm© r   úb/var/www/html/bwave/python/venv/lib/python3.8/site-packages/astropy/io/votable/validator/result.pyÚ__init__   s    

0zResult.__init__c                 C   s   | S ©Nr   ©r   r   r   r   Ú	__enter__%   s    zResult.__enter__c                 G   s   |   ¡  d S r!   )Úsave_attributes)r   Úargsr   r   r   Ú__exit__(   s    zResult.__exit__c                 C   s   t j | j| j¡S r!   )r   r   r   r   r   r"   r   r   r   r   +   s    zResult.get_dirpathc                 C   s   | j S r!   )r   r"   r   r   r   Úget_htmlpath.   s    zResult.get_htmlpathc                 C   s   t j |  ¡ d¡S )Nz
values.dat©r   r   r   r   r"   r   r   r   Úget_attribute_path1   s    zResult.get_attribute_pathc                 C   s   t j |  ¡ d¡S )Nzvo.xmlr(   r"   r   r   r   Úget_vo_xml_path4   s    zResult.get_vo_xml_pathc              	   C   s~   |   ¡ }tj |¡rtz&t|dƒ�}t |¡| _W 5 Q R X W qz tk
rp   t	 
|  ¡ ¡ t |  ¡ ¡ i | _Y qzX ni | _d S ©NÚrb)r)   r   r   r   ÚopenÚpickleÚloadÚ_attributesÚ	ExceptionÚshutilÚrmtreer   r   ©r   r   Úfdr   r   r   r   9   s    zResult.load_attributesc              	   C   s0   |   ¡ }t|dƒ�}t | j|¡ W 5 Q R X d S )NÚwb)r)   r-   r.   Údumpr0   r4   r   r   r   r$   F   s    zResult.save_attributesc                 C   s
   | j | S r!   ©r0   ©r   Úkeyr   r   r   Ú__getitem__K   s    zResult.__getitem__c                 C   s   || j |< d S r!   r8   )r   r:   Úvalr   r   r   Ú__setitem__N   s    zResult.__setitem__c                 C   s
   || j kS r!   r8   r9   r   r   r   Ú__contains__Q   s    zResult.__contains__c              
      sž  ˆ  ¡ ‰ dˆjkrd ˆd< tj ˆ ¡r*d S ‡ ‡fdd„}d }ztjjˆj 	d¡ˆj
d�}W n¾ tjjk
r¦ } z*t|dƒr‚|j}n|j}||ƒ W Y ¢d S d }~X Y nt tjjk
râ } z|dt|ƒ› �ƒ W Y ¢d S d }~X Y n8 tj
tfk
�r } z|dƒ W Y ¢d S d }~X Y nX |d k�r0|d	ƒ d S z| ¡ }W n4 tj
k
�rp } z|dƒ W Y ¢d S d }~X Y n
X | ¡  tˆ d
ƒ�}| |¡ W 5 Q R X d S )NÚnetwork_errorc              	      s@   t | ƒ} tˆ dƒ�}| d| › d� ¡ ¡ W 5 Q R X | ˆd< d S )Nr6   zFAILED: Ú
r?   )Ústrr-   ÚwriteÚencode)Úreasonr5   ©r   r   r   r   Úfail_   s     z)Result.download_xml_content.<locals>.failÚascii)r   rD   zHTTPException: ÚTimeoutzInvalid URLr6   )r*   r0   r   r   r   ÚurllibÚrequestÚurlopenr   Údecoder   ÚerrorÚURLErrorÚhasattrrD   ÚcodeÚhttpÚclientÚHTTPExceptionrA   ÚsocketÚOSErrorÚreadÚcloser-   rB   )r   rF   ÚrÚerD   Úcontentr5   r   rE   r   Údownload_xml_contentV   s@    


zResult.download_xml_contentc              	   C   s>   |   ¡ }tj |¡s|  ¡  t|dƒ�}| ¡ }W 5 Q R X |S r+   )r*   r   r   r   r[   r-   rV   )r   r   r5   rZ   r   r   r   Úget_xml_content…   s    zResult.get_xml_contentc                 C   s  |   ¡ }tj |¡s|  ¡  d| d< d| krf| d d k	rfd| d< d| d< g | d< d | d< tƒ | d	< d S d}d}d }g }t|d
ƒ�r}tjdd��Z}zt	j
|d|d�}W n> tttfk
râ } z| t|ƒ¡ |d7 }W 5 d }~X Y nX W 5 Q R X W 5 Q R X dd„ |D ƒ| }|d k	�r$|j | d< }	nd | d< }	d| k�ržzt ||	¡\}
}}W n8 tk
�rˆ } zd | d< t|ƒ| d< W 5 d }~X Y nX |
dk| d< || d< tƒ }|D ]B}t |¡}|d �rÈ|d7 }|d �rÚ|d7 }| |d ¡ �q¨|| d< || d< || d< || d	< d S )NÚ Úversionr?   r   Ú	nwarningsÚnexceptionsÚwarningsÚxmllintÚwarning_typesr,   T)ÚrecordÚwarn)ÚverifyÚfilenameé   c                 S   s   g | ]}t |jƒ‘qS r   )rA   Úmessage)Ú.0Úxr   r   r   Ú
<listcomp>¥   s     z&Result.validate_vo.<locals>.<listcomp>ú1.0Zxmllint_contentZ
is_warningZis_exceptionÚwarning)r*   r   r   r   r[   Úsetr-   ra   Úcatch_warningsr   ÚparseÚ
ValueErrorÚ	TypeErrorr   ÚappendrA   r^   r   Zvalidate_schemarU   r   Zparse_vowarningÚadd)r   r   r`   r_   ÚtÚlinesÚinputZwarning_linesrY   r^   ÚsuccessÚstdoutÚstderrrc   ÚlineÚwr   r   r   Úvalidate_vo�   s\    
.




zResult.validate_voc                 C   s   || d kS )Nrc   r   )r   Úwarning_coder   r   r   Úhas_warningÈ   s    zResult.has_warningc                 C   sˆ   d| krd | d< | d dkr>| d  o<| d dko<| d dkS | d dkrl| d  oj| d dkpj| d dkS | d dkr„| d d k	S d S )	Nr?   ÚexpectedZgoodr_   r   r`   Z	incorrectÚbrokenr   r"   r   r   r   Úmatch_expectationsË   s    

ÿ
ý
ÿzResult.match_expectationsc                 C   s`   |   ¡ }tjdd|dd|gtjtjd�}| ¡ \}}t|ƒsB|jrLd| d< nd| d< || d< d S )	NÚjavaz-jarÚvotlintzvalidate=false)rz   r{   FTZvotlint_content)r*   Ú
subprocessÚPopenÚPIPEÚcommunicateÚlenÚ
returncode)r   Zpath_to_stilts_jarrg   Úprz   r{   r   r   r   Úvalidate_with_votlintÜ   s    ý
zResult.validate_with_votlintN)r   r   )Ú__name__Ú
__module__Ú__qualname__r    r#   r&   r   r'   r)   r*   r   r$   r;   r=   r>   r[   r\   r~   r€   rƒ   r�   r   r   r   r   r      s$   
/;r   c                 C   s  g }g }g }g }g }g }g }	g }
g }g }g }g }g }i }g }i }| D �]h}|rVt |ƒ t|tƒrf|}nt||d�}| |¡ |d dkrª|d dkrª|d dkrª| |¡ | ¡ s¼| |¡ |d dkrÒ| |¡ |d dk�r|d dk�r|d dk�r| |¡ d|k�rn|d dk�rn| |¡ d	|k�r:d |d	< |d dk�rn|d dk�rn|d	 d k�rn|	 |¡ d	|k�r�|d	 d k	�r�|
 |¡ |d
 }|dk�r®| |¡ n6|dk�rÄ| |¡ n |dk�rÚ| |¡ n
| |¡ |d dk�rJ| |¡ |d D ]D}|d k	�rt|ƒdk�r| d¡�r| |g ¡ ||  |¡ �q|d dkrD| |¡ |d D ]D}|d k	�rht|ƒdk�rh| d¡�rh| |g ¡ ||  |¡ �qhqDt| 	¡ ƒ}| 
¡  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 ]R\}}|�rft |ƒ tt|d ƒ}|�rP| ¡ }| ||› d-|› �|dd.gf¡ �qP| d/d0|f¡ |D ]R\}}|�rÎt |ƒ tt|d ƒ}|�r¸| ¡ }| ||› d-|› �|dd.gf¡ �q¸|S )1N)r   r_   r   r`   rb   TFr…   r?   r^   rm   z1.1z1.2rc   é   ÚWÚEÚallz	All testsÚcorrectZCorrectZ
unexpectedZ
UnexpectedZschemazInvalid against schemaÚschema_mismatchz&Invalid against schema/Passed vo.tableZ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 unknownra   ZWarningsz: Zlir   Z
Exceptions)ÚnextÚ
isinstancer   rt   rƒ   rŠ   Ú
startswithÚ
setdefaultÚlistÚitemsÚsortÚgetattrr   Zget_short_name)r   r   ÚsZall_resultsr•   Znot_expectedZfail_schemar–   r—   r˜   r™   Z
version_10Z
version_11Z
version_12rš   Zhas_warningsZwarning_setZhas_exceptionsZexception_setr   rk   r^   rn   ÚexcZtablesr   Zwarning_classZwarning_descrZexception_codeZexception_classZexception_descrr   r   r   Úget_result_subsetsë   sö    


$


*



ÿ
þ
ý






ÿ
þý
$üüéüÿüÿ	r¥   )N)Ú__doc__r   Úhttp.clientrQ   r   r.   r2   rT   r†   Úurllib.errorrI   Úurllib.requestra   Zxml.parsers.expatr   Zastropy.io.votabler   r   r   r   r¥   r   r   r   r   Ú<module>   s    T