σ
T³\c           @@ s+  d  Z  d d l m Z m Z d d l 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 e j d	 d
 e d d 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(   sk   DEPRECATED 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.etreesO   defusedxml.lxml is no longer supported and will be removed in a future release.t   categoryt
   stackleveli   t   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(    (    s.   lib/python2.7/site-packages/defusedxml/lxml.pyt   _filter)   s
    	c         C@ s"   t  t |   j   } |  j |  S(   N(   t   superR   t   __iter__R   (   R   R   (    (    s.   lib/python2.7/site-packages/defusedxml/lxml.pyR   0   s    c         C@ s.   t  t |   j d | d |  } |  j |  S(   Nt   tagt   reversed(   R   R   t   iterchildrenR   (   R   R   R   R   (    (    s.   lib/python2.7/site-packages/defusedxml/lxml.pyR   4   s    !c         G@ s+   t  t |   j d | |  } |  j |  S(   NR   (   R   R   t   iterR   (   R   R   t   tagsR   (    (    s.   lib/python2.7/site-packages/defusedxml/lxml.pyR   8   s    c         G@ s+   t  t |   j d | |  } |  j |  S(   NR   (   R   R   t   iterdescendantsR   (   R   R   R   R   (    (    s.   lib/python2.7/site-packages/defusedxml/lxml.pyR   <   s    c         C@ s.   t  t |   j d | d |  } |  j |  S(   NR   t	   preceding(   R   R   t   itersiblingsR   (   R   R   R   R   (    (    s.   lib/python2.7/site-packages/defusedxml/lxml.pyR   @   s    !c         C@ s(   t  t |   j   } t |  j |   S(   N(   R   R   R   t   listR   (   R   R   (    (    s.   lib/python2.7/site-packages/defusedxml/lxml.pyt   getchildrenD   s    c         C@ s%   t  t |   j |  } |  j |  S(   N(   R   R   t   getiteratorR   (   R   R   R   (    (    s.   lib/python2.7/site-packages/defusedxml/lxml.pyR   H   s    (    N(   t   __name__t
   __module__t   __doc__t	   __slots__t   _etreet   _EntityR	   R   R   t   Nonet   FalseR   R   R   R   R   R   (    (    (    s.   lib/python2.7/site-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(    (    s.   lib/python2.7/site-packages/defusedxml/lxml.pyt   createDefaultParserY   s    	c         C@ s   | |  _  d  S(   N(   t   _default_parser(   R   R,   (    (    s.   lib/python2.7/site-packages/defusedxml/lxml.pyt   setDefaultParsera   s    c         C@ s>   t  |  d d   } | d  k r: |  j   } |  j |  n  | S(   NR/   (   t   getattrR"   R.   R0   (   R   R,   (    (    s.   lib/python2.7/site-packages/defusedxml/lxml.pyt   getDefaultParserd   s
    (
   R   R   R   R#   R(   R   R)   R.   R0   R2   (    (    (    s.   lib/python2.7/site-packages/defusedxml/lxml.pyR$   M   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_entitiesR3   t   dtdt   entity(    (    s.   lib/python2.7/site-packages/defusedxml/lxml.pyt   check_docinfop   s    		c         C@ sD   | d  k r t   } n  t j |  | d | } t | | |  | S(   Nt   base_url(   R"   R2   R    t   parseRB   (   t   sourceR,   RC   R>   R?   R=   (    (    s.   lib/python2.7/site-packages/defusedxml/lxml.pyRD      s
    c         C@ sP   | d  k r t   } n  t j |  | d | } | j   } t | | |  | S(   NRC   (   R"   R2   R    t
   fromstringt   getroottreeRB   (   t   textR,   RC   R>   R?   t   rootelementR=   (    (    s.   lib/python2.7/site-packages/defusedxml/lxml.pyRF      s    c          O@ s   t  d   d  S(   Ns*   defused lxml.etree.iterparse not available(   R   (   t   argst   kwargs(    (    s.   lib/python2.7/site-packages/defusedxml/lxml.pyt	   iterparse   s    (!   R   t
   __future__R    R   t	   threadingt   warningst   lxmlR   R    t   commonR   R   R   t   LXML_VERSIONR7   t
   __origin__t   tostringt   warnt   DeprecationWarningt   ElementBaseR   t   localR$   t   _parser_tlsR2   R#   t   TrueRB   R"   RD   RF   t   XMLRL   (    (    (    s.   lib/python2.7/site-packages/defusedxml/lxml.pyt   <module>	   s*   	,			