σ
j
\c           @@ s~  d  Z  d d l m Z m Z d d l Z d d l m Z m Z m Z m	 Z	 e	 r© d Z
 d d l m Z d d l m Z d d	 l m Z d d
 l m Z d d l m Z nH d Z
 d d l m Z d d l Z d Z d d
 l m Z d d l m Z y d d l Z Wn e k
 rd Z n Xd Z d d  Z d e r?e j n e f d     YZ d e f d     YZ d   Z  d   Z! d S(   s*   Defused xmlrpclib

Also defuses gzip bomb
i    (   t   print_functiont   absolute_importNi   (   t   DTDForbiddent   EntitiesForbiddent   ExternalReferenceForbiddent   PY3s   xmlrpc.client(   t   ExpatParser(   t   client(   t   server(   t   gzip_decode(   t   GzipDecodedResponset	   xmlrpclibi   i   c         C@ sβ   t  s t  n  | d k r$ t } n  t j |   } t  j d d d |  } y2 | d k  ri | j   } n | j | d  } Wn t k
 r t	 d   n X| j
   | j
   | d k rή t |  | k rή t	 d   n  | S(	   sr   gzip encoded data -> unencoded data

    Decode data using the gzip content encoding as described in RFC 1952
    t   modet   rbt   fileobji    i   s   invalid datas#   max gzipped payload length exceededN(   t   gzipt   NotImplementedErrort   Nonet   MAX_DATAt   iot   BytesIOt   GzipFilet   readt   IOErrort
   ValueErrort   closet   len(   t   datat   limitt   ft   gzft   decoded(    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/defusedxml/xmlrpc.pyt   defused_gzip_decode-   s"    		

t   DefusedGzipDecodedResponsec           B@ s,   e  Z d  Z d d  Z d   Z d   Z RS(   sh   a file-like object to decode a response encoded with the gzip
    method, as described in RFC 1952.
    c         C@ sΠ   t  s t  n  | d  k	 r! | n t |  _ } | d k  rR | j   } d  |  _ n | j | d  } d |  _ | d k r t |  | k r t d   n  t	 j
 |  |  _ t  j j |  d d d |  j d  S(   Ni    i   s   max payload length exceededR   R   R   (   R   R   R   R   R   R   t
   readlengthR   R   R   R   t   stringioR   t   __init__(   t   selft   responseR   R   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/defusedxml/xmlrpc.pyR$   K   s    		c         C@ s   |  j  d k r |  j  |  j } t | | d  } t j j |  |  } |  j t |  7_ |  j |  j  k r} t d   n  | St j j |  |  Sd  S(   Ni    i   s   max payload length exceeded(   R   R"   t   minR   R   R   R   R   (   R%   t   nt   leftR   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/defusedxml/xmlrpc.pyR   \   s    c         C@ s!   t  j j |   |  j j   d  S(   N(   R   R   R   R#   (   R%   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/defusedxml/xmlrpc.pyR   h   s    N(   t   __name__t
   __module__t   __doc__R   R$   R   R   (    (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/defusedxml/xmlrpc.pyR!   F   s   	t   DefusedExpatParserc           B@ s>   e  Z e e e d   Z d   Z d   Z d   Z d   Z RS(   c         C@ s   t  j |  |  | |  _ | |  _ | |  _ |  j } |  j rL |  j | _ n  |  j rp |  j | _	 |  j
 | _ n  |  j r |  j | _ n  d  S(   N(   R   R$   t
   forbid_dtdt   forbid_entitiest   forbid_externalt   _parsert   defused_start_doctype_declt   StartDoctypeDeclHandlert   defused_entity_declt   EntityDeclHandlert   defused_unparsed_entity_declt   UnparsedEntityDeclHandlert#   defused_external_entity_ref_handlert   ExternalEntityRefHandler(   R%   t   targetR.   R/   R0   t   parser(    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/defusedxml/xmlrpc.pyR$   o   s    							c         C@ s   t  | | |   d  S(   N(   R   (   R%   t   namet   sysidt   pubidt   has_internal_subset(    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/defusedxml/xmlrpc.pyR2   ~   s    c         C@ s   t  | | | | | |   d  S(   N(   R   (   R%   R<   t   is_parameter_entityt   valuet   baseR=   R>   t   notation_name(    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/defusedxml/xmlrpc.pyR4      s    c         C@ s   t  | d  | | | |   d  S(   N(   R   R   (   R%   R<   RB   R=   R>   RC   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/defusedxml/xmlrpc.pyR6      s    c         C@ s   t  | | | |   d  S(   N(   R   (   R%   t   contextRB   R=   R>   (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/defusedxml/xmlrpc.pyR8      s    (	   R*   R+   t   Falset   TrueR$   R2   R4   R6   R8   (    (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/defusedxml/xmlrpc.pyR-   m   s   			c           C@ s1   t  t _ t t _ t t _ t r- t t _ n  d  S(   N(   R-   t   xmlrpc_clientt
   FastParserR!   R
   R    R	   t   xmlrpc_server(    (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/defusedxml/xmlrpc.pyt   monkey_patch   s
    			c           C@ s1   d  t _ t t _ t t _ t r- t t _ n  d  S(   N(   R   RG   RH   t   _OrigGzipDecodedResponseR
   t   _orig_gzip_decodeR	   RI   (    (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/defusedxml/xmlrpc.pyt   unmonkey_patch   s
    			i x  i  ΰ("   R,   t
   __future__R    R   R   t   commonR   R   R   R   t
   __origin__t   xmlrpc.clientR   t   xmlrpcR   RG   R   RI   R	   RL   R
   RK   R   R   R   t   ImportErrorR   R    R   t   objectR!   R-   RJ   RM   (    (    (    sF   /data/av2000/b2b/venv/lib/python2.7/site-packages/defusedxml/xmlrpc.pyt   <module>	   s4   "
%'#	