ó
oTc           @   s¦   d  d l  Z  d  d l Z d  d l Z d d d  Z d   Z d d e e d  Z d d  Z d d  Z	 d d d d	  Z
 d
   Z d   Z d d d g d  Z d S(   i’’’’Ns   utf-8c         C   s­   |  s} t  j j j d  } | rk | d } | j j d d   }  |  rk | j j   j	 d  rk d }  qk n  |  s} | }  q} n  y t
 |   Wn t k
 rØ t
 d  n Xd  S(   Ns   Content-Typei    t   charsets   text/s
   ISO-8859-1(   t   cherrypyt   requestt   headerst   elementst   paramst   gett   Nonet   valuet   lowert
   startswitht   decode_paramst   UnicodeDecodeError(   t   encodingt   default_encodingt   ct(    (    s)   /var/www/SABnzbd/cherrypy/lib/encoding.pyt   decode   s    
c         C   sŖ   i  } x t  j j j   D]} \ } } t | d  s t | t  rh g  | D] } | j |   ^ qJ } q t | t  r | j |   } q n  | | | <q W| t  j _ d  S(   Nt   file(	   R   R   R   t   itemst   hasattrt
   isinstancet   listR   t   str(   R   t   decoded_paramst   keyR   t   v(    (    s)   /var/www/SABnzbd/cherrypy/lib/encoding.pyR   "   s    %t   strictc         C   s«   t  t j d t  r d  St t j _ t j j j d  } | r§ | d } | si | j	 j
   j d  r§ t |  d | | j d <| r¤ t |  t j j d <q¤ q§ n  d  S(   Nt   _encoding_attempteds   Content-Typei    s   text/t   errorsR    (   t   getattrR   R   t   Falset   TrueR   t   responseR   R   R   R	   R
   t   find_acceptable_charsetR   R   (   R   R   t	   text_onlyt   add_charsetR   (    (    s)   /var/www/SABnzbd/cherrypy/lib/encoding.pyt   encode5   s    
c            s.      f d   } | t  j j  t  j _ t S(   Nc         3   s>   x7 |  D]/ } t  | t  r1 | j     } n  | Vq Wd  S(   N(   R   t   unicodeR$   (   t   bodyt   chunk(   R   R   (    s)   /var/www/SABnzbd/cherrypy/lib/encoding.pyt   encoderJ   s    (   R   R    R&   R   (   R   R   R(   (    (   R   R   s)   /var/www/SABnzbd/cherrypy/lib/encoding.pyt   encode_streamD   s    c         C   s   y^ g  } xE t  j j D]7 } t | t  r@ | j |  |  } n  | j |  q W| t  j _ Wn t t f k
 rx t	 SXt
 Sd  S(   N(   R   R    R&   R   R%   R$   t   appendt   LookupErrort   UnicodeErrorR   R   (   R   R   R&   R'   (    (    s)   /var/www/SABnzbd/cherrypy/lib/encoding.pyt   encode_stringR   s    c         C   sM  t  j } t  j j r t } n/ | j   t } | j j d  rM | j d =n  t  j j j	 d  } g  | D] } | j
 j   ^ qi } g  } |  d  k	 rŚ |  j   }  | sĮ d | k sĮ |  | k rģ| |  |  r× |  Sqģn| s| | |  ró | St  j d t |   ną d | k rPd }	 |	 | k rP| j |	  | |	 |  rM|	 SqPn  x | D] }
 |
 j d k rW|
 j
 d k r­| | k rå| j |  | | |  rŖ| Sqåqč|
 j
 }  |  | k rč| j |   | |  |  rå|  SqčqWqWWt  j j j d  } | d  k rd } n
 d | } | d	 d
 j |  7} t  j d |   d  S(   Ns   Content-Lengths   Accept-Charsett   *iō  s
   iso-8859-1i    s2   Your client did not send an Accept-Charset header.s0   Your client sent this Accept-Charset header: %s.s    We tried these charsets: %s.s   , i  (   R   R    t   streamR)   t   collapse_bodyR-   R   t   has_keyR   R   R   R	   R   t	   HTTPErrort   failmsgR*   t   qvalueR   t   join(   R   R   R   R    R(   t   encst   enct   charsetst   attempted_charsetst   isot   elementt   act   msg(    (    s)   /var/www/SABnzbd/cherrypy/lib/encoding.pyR!   `   sV    		
"


		
c         c   sņ   d d  l  } d Vd Vd Vt j d t t j     Vd Vd V| j d  } d	 } | j | | j | j | j	 d	  } x> |  D]6 } | t
 |  7} | j | |  } | j |  Vq W| j   Vt j d
 |  Vt j d | d @ Vd  S(   Ni’’’’s   s   s    s   <Ls   s   ’t    i    s   <ll   ’’ (   t   zlibt   structt   packt   longt   timet   crc32t   compressobjt   DEFLATEDt	   MAX_WBITSt   DEF_MEM_LEVELt   lent   compresst   flush(   R&   t   compress_levelR?   t   crct   sizet   zobjt   line(    (    s)   /var/www/SABnzbd/cherrypy/lib/encoding.pyRJ   Æ   s&    	c         C   sp   d d  l  } d d  l } | j   } | j |   | j d  | j d d d |  } | j   } | j   | S(   Ni’’’’i    t   modet   rbt   fileobj(   t   gzipt   StringIOt   writet   seekt   GzipFilet   readt   close(   R&   RT   RU   t   zbuft   zfilet   data(    (    s)   /var/www/SABnzbd/cherrypy/lib/encoding.pyt
   decompressĒ   s    
i	   s	   text/htmls
   text/plainc         C   s®  t  j } | j s d  St t  j d t  r/ d  St  j j j d  } | sN d  S| j j d d  j	 d  d } x!| D]} | j
 d k r | j d k r d  S| j
 d k rw | j d k rĮ d  S| | k r| j j d
 d  } g  | j	 d  D] } | j   rņ | j   ^ qņ } d | k r2| j d  n  d j |  | j d
 <d | j d <t | j |   | _ | j j d  r| j d =qn  d  Sqw Wt  j d d  j   d  S(   Nt   cacheds   Accept-Encodings   Content-TypeR>   t   ;i    t   identityRT   s   x-gzipt   Varyt   ,s   , s   Content-Encodings   Content-Lengthi  s   identity, gzip(   RT   s   x-gzip(   R   R    R&   R   R   R   R   R   R   t   splitR   R4   t   stripR*   R5   RJ   R1   R2   t   set_response(   RL   t
   mime_typesR    t
   acceptableR   t   codingt   variest   x(    (    s)   /var/www/SABnzbd/cherrypy/lib/encoding.pyRT   Ó   s6    		"4(   R@   RC   R   R   R   R   R   R$   R)   R-   R!   RJ   R^   RT   (    (    (    s)   /var/www/SABnzbd/cherrypy/lib/encoding.pyt   <module>   s   	O		