σ
(TQc           @@ s  d  Z  d d l m Z m Z d d l Z d d l m Z d d l m	 Z	 m
 Z
 m Z e j d d k Z d Z e j Z d	 e j f d
     YZ d e j f d     YZ e   Z e j Z e e d  Z d d e e d  Z d d e e d  Z e Z d   Z d S(   s`   Example code for lxml.etree protection

The code has NO protection against decompression bombs.
i    (   t   print_functiont   absolute_importN(   t   etreei   (   t   DTDForbiddent   EntitiesForbiddent   NotSupportedErrori   s
   lxml.etreet   RestrictedElementc           B@ sz   e  Z d  Z d	 Z e j Z d   Z d   Z d
 e
 d  Z d
 d  Z d
 d  Z d
 e
 d  Z d   Z d
 d  Z RS(   sJ   A restricted Element class that filters out instances of some classes
    c         c@ s8   |  j  } x( | D]  } t | |  r+ q n  | Vq Wd  S(   N(   t	   blacklistt
   isinstance(   t   selft   iteratorR   t   child(    (    s3   /usr/lib/python2.7/dist-packages/defusedxml/lxml.pyt   _filter   s
    	c         C@ s"   t  t |   j   } |  j |  S(   N(   t   superR   t   __iter__R   (   R	   R
   (    (    s3   /usr/lib/python2.7/dist-packages/defusedxml/lxml.pyR   &   s    c         C@ s.   t  t |   j d | d |  } |  j |  S(   Nt   tagt   reversed(   R   R   t   iterchildrenR   (   R	   R   R   R
   (    (    s3   /usr/lib/python2.7/dist-packages/defusedxml/lxml.pyR   *   s    !c         G@ s+   t  t |   j d | |  } |  j |  S(   NR   (   R   R   t   iterR   (   R	   R   t   tagsR
   (    (    s3   /usr/lib/python2.7/dist-packages/defusedxml/lxml.pyR   .   s    c         G@ s+   t  t |   j d | |  } |  j |  S(   NR   (   R   R   t   iterdescendantsR   (   R	   R   R   R
   (    (    s3   /usr/lib/python2.7/dist-packages/defusedxml/lxml.pyR   2   s    c         C@ s.   t  t |   j d | d |  } |  j |  S(   NR   t	   preceding(   R   R   t   itersiblingsR   (   R	   R   R   R
   (    (    s3   /usr/lib/python2.7/dist-packages/defusedxml/lxml.pyR   6   s    !c         C@ s(   t  t |   j   } t |  j |   S(   N(   R   R   R   t   listR   (   R	   R
   (    (    s3   /usr/lib/python2.7/dist-packages/defusedxml/lxml.pyt   getchildren:   s    c         C@ s%   t  t |   j |  } |  j |  S(   N(   R   R   t   getiteratorR   (   R	   R   R
   (    (    s3   /usr/lib/python2.7/dist-packages/defusedxml/lxml.pyR   >   s    (    N(   t   __name__t
   __module__t   __doc__t	   __slots__t   _etreet   _EntityR   R   R   t   Nonet   FalseR   R   R   R   R   R   (    (    (    s3   /usr/lib/python2.7/dist-packages/defusedxml/lxml.pyR      s   				t   GlobalParserTLSc           B@ s<   e  Z d  Z i e d 6Z e Z d   Z d   Z d   Z	 RS(   s5   Thread local context for custom parser instances
    t   resolve_entitiesc         C@ sP   t  j |  j   } |  j } |  j d  k	 rL t  j d |  } | j |  n  | S(   Nt   element(   R   t	   XMLParsert   parser_configt   element_classR    t   ElementDefaultClassLookupt   set_element_class_lookup(   R	   t   parserR'   t   lookup(    (    s3   /usr/lib/python2.7/dist-packages/defusedxml/lxml.pyt   createDefaultParserN   s    	c         C@ s   | |  _  d  S(   N(   t   _default_parser(   R	   R*   (    (    s3   /usr/lib/python2.7/dist-packages/defusedxml/lxml.pyt   setDefaultParserV   s    c         C@ s>   t  |  d d   } | d  k r: |  j   } |  j |  n  | S(   NR-   (   t   getattrR    R,   R.   (   R	   R*   (    (    s3   /usr/lib/python2.7/dist-packages/defusedxml/lxml.pyt   getDefaultParserY   s
    (
   R   R   R   R!   R&   R   R'   R,   R.   R0   (    (    (    s3   /usr/lib/python2.7/dist-packages/defusedxml/lxml.pyR"   C   s   
		c      	   C@ sΙ   |  j  } | j rU | r6 t | j | j | j   n  | rU t rU t d   qU n  | rΕ xg | j | j f D]P } | d k r qn n  x5 | j
   D]' } t | j | j d d d d   q Wqn Wn  d S(   s΅   Check docinfo of an element tree for DTD and entity declarations

    The check for entity declarations needs lxml 3 or newer. lxml 2.x does
    not support dtd.iterentities().
    s3   Unable to check for entity declarations in lxml 2.xN(   t   docinfot   doctypeR   t
   system_urlt	   public_idt   LXML3R   t   internalDTDt   externalDTDR    t   iterentitiesR   t   namet   content(   t   elementtreet
   forbid_dtdt   forbid_entitiesR1   t   dtdt   entity(    (    s3   /usr/lib/python2.7/dist-packages/defusedxml/lxml.pyt   check_docinfoe   s    			c         C@ sD   | d  k r t   } n  t j |  | d | } t | | |  | S(   Nt   base_url(   R    R0   R   t   parseR@   (   t   sourceR*   RA   R<   R=   R;   (    (    s3   /usr/lib/python2.7/dist-packages/defusedxml/lxml.pyRB      s
    c         C@ sP   | d  k r t   } n  t j |  | d | } | j   } t | | |  | S(   NRA   (   R    R0   R   t
   fromstringt   getroottreeR@   (   t   textR*   RA   R<   R=   t   rootelementR;   (    (    s3   /usr/lib/python2.7/dist-packages/defusedxml/lxml.pyRD      s    c          O@ s   t  d   d  S(   Ns*   defused lxml.etree.iterparse not available(   R   (   t   argst   kwargs(    (    s3   /usr/lib/python2.7/dist-packages/defusedxml/lxml.pyt	   iterparse   s    (   R   t
   __future__R    R   t	   threadingt   lxmlR   R   t   commonR   R   R   t   LXML_VERSIONR5   t
   __origin__t   tostringt   ElementBaseR   t   localR"   t   _parser_tlsR0   R!   t   TrueR@   R    RB   RD   t   XMLRJ   (    (    (    s3   /usr/lib/python2.7/dist-packages/defusedxml/lxml.pyt   <module>	   s$   	+				