ó
ú2ec           @   sŸ   d  Z  d d l Z d d l m Z m Z d d l m Z d d l Z d e f d „  ƒ  YZ	 d e f d „  ƒ  YZ
 d	 e f d
 „  ƒ  YZ d „  Z d d „ Z d S(   s-   
WSGI middleware

Gzip-encodes the response.
iÿÿÿÿN(   t   header_valuet   remove_header(   t   CONTENT_LENGTHt
   GzipOutputc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s7   /usr/local/lib/python2.7/dist-packages/paste/gzipper.pyR      s   t
   middlewarec           B   s   e  Z d  d „ Z d „  Z RS(   i   c         C   s   | |  _  t | ƒ |  _ d  S(   N(   t   applicationt   intt   compress_level(   t   selfR   R	   (    (    s7   /usr/local/lib/python2.7/dist-packages/paste/gzipper.pyt   __init__   s    	c         C   s…   d | j  d d ƒ k s( | d d k r8 |  j | | ƒ St | |  j ƒ } |  j | | j ƒ } | d  k	 r{ | j | ƒ n  | j ƒ  S(   Nt   gzipt   HTTP_ACCEPT_ENCODINGt    t   REQUEST_METHODt   HEAD(   t   getR   t   GzipResponseR	   t   gzip_start_responset   Nonet   finish_responset   write(   R
   t   environt   start_responset   responset   app_iter(    (    s7   /usr/local/lib/python2.7/dist-packages/paste/gzipper.pyt   __call__   s    	(   R   R   R   R   (    (    (    s7   /usr/local/lib/python2.7/dist-packages/paste/gzipper.pyR      s   R   c           B   s/   e  Z d  „  Z d d „ Z d „  Z d „  Z RS(   c         C   s7   | |  _  | |  _ t j ƒ  |  _ t |  _ d  |  _ d  S(   N(	   R   R	   t   sixt   BytesIOt   buffert   Falset   compressibleR   t   content_length(   R
   R   R	   (    (    s7   /usr/local/lib/python2.7/dist-packages/paste/gzipper.pyR   -   s
    			c         C   sÀ   | |  _  t | d ƒ } t | d ƒ } t |  _ | rl | j d ƒ sT | j d ƒ rl d | k rl t |  _ n  | r~ t |  _ n  |  j r— | j d ƒ n  t | d ƒ | |  _  | |  _ |  j	 j
 S(	   Ns   content-types   content-encodings   text/s   application/t   zipR   s   content-length(   s   content-encodingR   (   t   headersR    R   R    t
   startswitht   Truet   appendR   t   statusR   R   (   R
   R'   R#   t   exc_infot   ctt   ce(    (    s7   /usr/local/lib/python2.7/dist-packages/paste/gzipper.pyR   4   s    		$			c         C   s3   |  j  } | j d ƒ | j ƒ  } | j ƒ  | g S(   Ni    (   R   t   seekt   getvaluet   close(   R
   t   outt   s(    (    s7   /usr/local/lib/python2.7/dist-packages/paste/gzipper.pyR   E   s
    	
c         C   sÍ   |  j  r0 t j d d d |  j d |  j ƒ } n	 |  j } z8 x | D] } | j | ƒ qC W|  j  rp | j ƒ  n  Wd  t | d ƒ r | j ƒ  n  X|  j j ƒ  } t	 j
 |  j | ƒ |  j |  j |  j ƒ d  S(   Nt   modet   wbt   compresslevelt   fileobjR-   (   R    R   t   GzipFileR	   R   R   R-   t   hasattrt   tellR   t   updateR#   R   R'   (   R
   R   t   outputR/   R!   (    (    s7   /usr/local/lib/python2.7/dist-packages/paste/gzipper.pyR   L   s    			N(   R   R   R   R   R   R   R   (    (    (    s7   /usr/local/lib/python2.7/dist-packages/paste/gzipper.pyR   +   s   		c         K   s,   d d  l  } | j d t d ƒ d „  } | S(   Niÿÿÿÿs=   This function is deprecated; use make_gzip_middleware insteadi   c         S   s
   t  |  ƒ S(   N(   R   (   R   (    (    s7   /usr/local/lib/python2.7/dist-packages/paste/gzipper.pyt   filterc   s    (   t   warningst   warnt   DeprecationWarning(   R   t   confR:   R9   (    (    s7   /usr/local/lib/python2.7/dist-packages/paste/gzipper.pyt   filter_factory^   s    
	i   c         C   s   t  | ƒ } t |  d | ƒS(   s¯   
    Wrap the middleware, so that it applies gzipping to a response
    when it is supported by the browser and the content is of
    type ``text/*`` or ``application/*``
    R	   (   R   R   (   t   appt   global_confR	   (    (    s7   /usr/local/lib/python2.7/dist-packages/paste/gzipper.pyt   make_gzip_middlewareg   s    (   t   __doc__R   t   paste.responseR    R   t   paste.httpheadersR   R   t   objectR   R   R   R>   RA   (    (    (    s7   /usr/local/lib/python2.7/dist-packages/paste/gzipper.pyt   <module>   s   3		