U
    =ga                     @   sh   d dl Z d dlmZ d dlmZ d dlmZ e eZ	G dd dZ
G dd de
ZG d	d
 d
eZdS )    N)abstractmethod)StringIO)pisac                   @   s:   e Zd ZddddZdd Zedd Zed	d
 ZdS )FilterN)returnc                 C   s
   || _ d S N)app)selfr    r
   2/tmp/pip-unpacked-wheel-d1lgvatt/xhtml2pdf/wsgi.py__init__   s    zFilter.__init__c              	      s   | dd}| dd}g t d fdd	} ||}sJ|S \}}}	z|D ]}
|
 qZW 5 t|dr|  X  } ||||||\}}}|||	 |gS )NZSCRIPT_NAME Z	PATH_INFOc                    s0     | |s| ||S | ||gd d < jS r   )should_filterwrite)statusheadersexc_infor	   sentstart_responseZwritten_responser
   r   replacement_start_response"   s    z3Filter.__call__.<locals>.replacement_start_responseclose)N)getr   r   hasattrr   r   getvaluefilter)r	   environr   script_nameZ	path_infor   Zapp_iterr   r   r   chunkbodyr
   r   r   __call__   s2    


     
zFilter.__call__c                 C   s   t | d S r   )print)Z_statusr   r
   r
   r   r   9   s    zFilter.should_filterc                 C   s   t d S r   )NotImplementedError)r	   r   r   r   r
   r
   r   r   =   s    zFilter.filter)	__name__
__module____qualname__r   r    staticmethodr   r   r   r
   r
   r
   r   r      s   
r   c                   @   s   e Zd Zedd ZdS )
HTMLFilterc                 C   s:   |  dsdS |D ]"\}}| dkr| d  S qdS )NZ200Fcontent-typez	text/html)
startswithlower)r   r   namevaluer
   r
   r   r   C   s    
zHTMLFilter.should_filterN)r#   r$   r%   r&   r   r
   r
   r
   r   r'   B   s   r'   c                   @   s   e Zd Zedd ZdS )PisaMiddlewarec                 C   sH   | dd}|r>t }tj||dd ddd| fg}| }|||fS )Nz
pisa.topdfr   T)Zshow_error_as_pdf)r(   zapplication/pdfzcontent-dispositionzattachment; filename=)r   r   r   Z	CreatePDFr   )Z_script_nameZ
_path_infor   r   r   r   Ztopdfdstr
   r
   r   r   N   s    
zPisaMiddleware.filterN)r#   r$   r%   r&   r   r
   r
   r
   r   r-   M   s   r-   )loggingabcr   ior   Z	xhtml2pdfr   	getLoggerr#   logr   r'   r-   r
   r
   r
   r   <module>   s   
*