σ
ίΘ[c           @` s  d  Z  d d l m Z m Z m Z m 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 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 d	 d l m Z d e f d     YZ d d  Z d S(   uK   
Contains a class to handle a validation result for a single VOTable
file.
i    (   t   absolute_importt   divisiont   print_functiont   unicode_literalsi   (   t   six(   t   http_clientt   urllib(   t   cPickle(   t
   ExpatErrorNi   (   t   table(   t
   exceptions(   t   xmlutilt   Resultc           B` s°   e  Z d  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 RS(   u   resultsi
   c         C` s΅   | |  _  t j   } | j |  | j   |  _ | |  _ t j j	 |  j d d !|  j d d !|  j d  |  _
 t j j |  j    s t j |  j    n  | |  _ |  j   d  S(   Ni    i   i   (   t   urlt   hashlibt   md5t   updatet	   hexdigestt   _hasht   _roott   ost   patht   joint   _patht   existst   get_dirpatht   makedirst   timeoutt   load_attributes(   t   selfR   t   rootR   t   m(    (    sB   lib/python2.7/site-packages/astropy/io/votable/validator/result.pyt   __init__   s    			-	c         C` s   |  S(   N(    (   R   (    (    sB   lib/python2.7/site-packages/astropy/io/votable/validator/result.pyt	   __enter__)   s    c         G` s   |  j    d  S(   N(   t   save_attributes(   R   t   args(    (    sB   lib/python2.7/site-packages/astropy/io/votable/validator/result.pyt   __exit__,   s    c         C` s   t  j j |  j |  j  S(   N(   R   R   R   R   R   (   R   (    (    sB   lib/python2.7/site-packages/astropy/io/votable/validator/result.pyR   /   s    c         C` s   |  j  S(   N(   R   (   R   (    (    sB   lib/python2.7/site-packages/astropy/io/votable/validator/result.pyt   get_htmlpath2   s    c         C` s   t  j j |  j   d  S(   Nu
   values.dat(   R   R   R   R   (   R   (    (    sB   lib/python2.7/site-packages/astropy/io/votable/validator/result.pyt   get_attribute_path5   s    c         C` s   t  j j |  j   d  S(   Nu   vo.xml(   R   R   R   R   (   R   (    (    sB   lib/python2.7/site-packages/astropy/io/votable/validator/result.pyt   get_vo_xml_path8   s    c         C` s   |  j    } t j j |  r y. t | d   } t j |  |  _ Wd  QXWq t k
 r t	 j
 |  j    t j |  j    i  |  _ q Xn	 i  |  _ d  S(   Nu   rb(   R&   R   R   R   t   opent   picklet   loadt   _attributest	   Exceptiont   shutilt   rmtreeR   R   (   R   R   t   fd(    (    sB   lib/python2.7/site-packages/astropy/io/votable/validator/result.pyR   =   s    c         C` s;   |  j    } t | d   } t j |  j |  Wd  QXd  S(   Nu   wb(   R&   R(   R)   t   dumpR+   (   R   R   R/   (    (    sB   lib/python2.7/site-packages/astropy/io/votable/validator/result.pyR"   J   s    c         C` s   |  j  | S(   N(   R+   (   R   t   key(    (    sB   lib/python2.7/site-packages/astropy/io/votable/validator/result.pyt   __getitem__O   s    c         C` s   | |  j  | <d  S(   N(   R+   (   R   R1   t   val(    (    sB   lib/python2.7/site-packages/astropy/io/votable/validator/result.pyt   __setitem__R   s    c         C` s   | |  j  k S(   N(   R+   (   R   R1   (    (    sB   lib/python2.7/site-packages/astropy/io/votable/validator/result.pyt   __contains__U   s    c         ` sΟ   j      d  j k r( d   d <n  t j j    r> d  S   f d   } d  } yU t j r t j	 j
  j d  j } n' t j	 j
  j j d  d  j } Wn  t j j k
 rυ } t | d  rή | j } n	 | j } | |  d  St j k
 r$} | d j t |    d  St j t j f k
 rM} | d  d  SX| d  k rh| d  d  Sy | j   } Wn! t j k
 r} | d  d  SX| j   t   d	   } | j |  Wd  QXd  S(
   Nu   network_errorc         ` sQ   t  |   }  t   d  & } | j d j |   j d   Wd  QX|   d <d  S(   Nu   wbu   FAILED: {0}
u   utf-8u   network_error(   t   strR(   t   writet   formatt   encode(   t   reasonR/   (   R   R   (    sB   lib/python2.7/site-packages/astropy/io/votable/validator/result.pyt   failc   s    %R   u   asciiu   reasonu   HTTPException: {}u   Timeoutu   Invalid URLu   wb(   R'   R+   t   NoneR   R   R   R   t   PY2R   t   requestt   urlopenR   R   t   decodet   errort   URLErrort   hasattrR:   t   codeR   t   HTTPExceptionR8   R6   t   sockett   readt   closeR(   R7   (   R   R;   t   rt   eR:   t   contentR/   (    (   R   R   sB   lib/python2.7/site-packages/astropy/io/votable/validator/result.pyt   download_xml_contentZ   sF    	!	"	




c         C` sS   |  j    } t j j |  s+ |  j   n  t | d   } | j   } Wd  QX| S(   Nu   rb(   R'   R   R   R   RL   R(   RG   (   R   R   R/   RK   (    (    sB   lib/python2.7/site-packages/astropy/io/votable/validator/result.pyt   get_xml_content   s    c         C` s  |  j    } t j j |  s+ |  j   n  d |  d <d |  k r |  d d  k	 r d |  d <d |  d <g  |  d <d  |  d <t   |  d	 <d  Sd } d } d  } g  } t | d
  } } t j	 d t
  b } y t j | d t d | } Wn9 t t t f k
 r#} | j t |   | d 7} n XWd  QXWd  QXg  | D] }	 t |	 j  ^ q7| } | d  k	 rv| j |  d <}
 n d |  d <}
 d |  k rόy t j | |
  \ } } } Wn- t k
 rή} d  |  d <t |  |  d <qόX| d k |  d <| |  d <n  t   } x\ | D]T } t j |  } | d r8| d 7} n  | d rO| d 7} n  | j | d  qW| |  d <| |  d <| |  d <| |  d	 <d  S(   Nu    u   versionu   network_errori    u	   nwarningsu   nexceptionsu   warningsu   xmllintu   warning_typesu   rbt   recordt   pedantict   filenamei   u   1.0u   xmllint_contentu
   is_warningu   is_exceptionu   warning(   R'   R   R   R   RL   R<   t   setR(   t   warningst   catch_warningst   TrueR	   t   parset   Falset
   ValueErrort	   TypeErrorR   t   appendR6   t   messaget   versionR   t   validate_schemat   OSErrorR
   t   parse_vowarningt   add(   R   R   t   nexceptionst	   nwarningst   tt   linest   inputt   warning_linesRJ   t   xR[   t   successt   stdoutt   stderrt   warning_typest   linet   w(    (    sB   lib/python2.7/site-packages/astropy/io/votable/validator/result.pyt   validate_vo   s\    




&
	




c         C` s   | |  d k S(   Nu   warning_types(    (   R   t   warning_code(    (    sB   lib/python2.7/site-packages/astropy/io/votable/validator/result.pyt   has_warningΠ   s    c         C` s­   d |  k r d  |  d <n  |  d d k rR |  d oQ |  d d k oQ |  d d k S|  d d k r |  d o |  d d k p |  d d k S|  d d k r© |  d d  k	 Sd  S(	   Nu   network_erroru   expectedu   goodu	   nwarningsi    u   nexceptionsu	   incorrectu   broken(   R<   (   R   (    (    sB   lib/python2.7/site-packages/astropy/io/votable/validator/result.pyt   match_expectationsΣ   s    c         C` s   |  j    } t j d j | |  d t d t j d t j } | j   \ } } t |  sf | j rs t	 |  d <n
 t |  d <| |  d <d  S(   Nu&   java -jar {} votlint validate=false {}t   shellRh   Ri   u   votlintu   votlint_content(
   R'   t
   subprocesst   PopenR8   RT   t   PIPEt   communicatet   lent
   returncodeRV   (   R   t   path_to_stilts_jarRP   t   pRh   Ri   (    (    sB   lib/python2.7/site-packages/astropy/io/votable/validator/result.pyt   validate_with_votlintβ   s    
(   t   __name__t
   __module__R    R!   R$   R   R%   R&   R'   R   R"   R2   R4   R5   RL   RM   Rm   Ro   Rp   Rz   (    (    (    sB   lib/python2.7/site-packages/astropy/io/votable/validator/result.pyR      s$   												3		;		c         C` s   g  } g  } g  } g  } g  } g  } g  }	 g  }
 g  } g  } g  } g  } g  } i  } g  } i  } x?|  D]7} | r t  j |  n  t | t  r | } n t | d | } | j |  | d d k rϊ | d d k rϊ | d t k rϊ | j |  n  | j   s| j |  n  | d t k r6| j |  n  | d t k rv| d d k rv| d d k rv| j |  n  d | k rϋ| d t k rϋ| j |  d | k rΈd  | d <n  | d d k rϋ| d d k rϋ| d d  k rϋ|	 j |  qϋn  d | k r'| d d  k	 r'|
 j |  n  | d } | d	 k rM| j |  nE | d
 k ri| j |  n) | d k r| j |  n | j |  | d d k r| j |  xf | d D]W } | d  k	 rΊt	 |  d k rΊ| j
 d  rΊ| j | g   | | j |  qΊqΊWn  | d d k rg | j |  xf | d D]W } | d  k	 r@t	 |  d k r@| j
 d  r@| j | g   | | j |  q@q@Wqg qg Wt | j    } | j   t | j    } | j   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 } x| | D]t \ } } | r±t  j |  n  t t | d   } | r| j   } | j | d+ j | |  | d d, g f  qqW| j d- d. | f  x| | D]t \ } } | rFt  j |  n  t t | d   } | r$| j   } | j | d+ j | |  | d d, g f  q$q$W| S(/   NR   u	   nwarningsi    u   nexceptionsu   xmllintu   votlintu   network_erroru   versionu   1.0u   1.1u   1.2u   warning_typesi   u   Wu   Eu   allu	   All testsu   correctu   Correctu
   unexpectedu
   Unexpectedu   schemau   Invalid against schemau   schema_mismatchu&   Invalid against schema/Passed vo.tableu   ulu   fail_votlintu   Failed votlintu   votlint_mismatchu   Failed votlint/Passed vo.tableu   network_failuresu   Network failuresu
   version1.0u   Version 1.0u
   version1.1u   Version 1.1u
   version1.2u   Version 1.2u   version_unknownu   Version unknownu   warningsu   Warningsu   {}: {}u   liu
   exceptionsu
   Exceptions(   R   t   nextt
   isinstanceR   RY   RT   Rp   RV   R<   Rv   t
   startswitht
   setdefaultt   listt   itemst   sortt   getattrR
   t   get_short_nameR8   (   t   resultsR   t   st   all_resultst   correctt   not_expectedt   fail_schemat   schema_mismatcht   fail_votlintt   votlint_mismatcht   network_failurest
   version_10t
   version_11t
   version_12t   version_unknownt   has_warningst   warning_sett   has_exceptionst   exception_setR   Rf   R[   t   warningt   exct   tablesRn   t   warning_classt   warning_descrt   exception_codet   exception_classt   exception_descr(    (    sB   lib/python2.7/site-packages/astropy/io/votable/validator/result.pyt   get_result_subsetsπ   sΪ    	
-

(   t   __doc__t
   __future__R    R   R   R   t   externR   t   extern.six.movesR   R   R   R)   t   xml.parsers.expatR   R   R   R-   RF   Rr   RR   t    R	   R
   R   t   objectR   R<   R    (    (    (    sB   lib/python2.7/site-packages/astropy/io/votable/validator/result.pyt   <module>   s    "Υ