o
    G1b!                     @   s^   d dl Z d dlmZ d dlmZ e dZG dd deZG dd deZ	G dd	 d	e	Z
dS )
    N)StringIOzxhtml2pdf.wsgic                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
Filterc                 C   s
   || _ d S N)app)selfr    r   /xhtml2pdf/wsgi.py__init__   s   
zFilter.__init__c              	      s   | dd}| dd}g t d fdd	} ||}s%|S \}}}	z|D ]}
|
 q-W t|dr?|  nt|drJ|  w w  } ||||||\}}}|||	 |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closer   )getr   r   r   hasattrr   getvaluefilter)r   environr   script_name	path_infor   Zapp_iterr   r   r   chunkbodyr   r   r   __call__   s2   




zFilter.__call__c                 C   s   t | d S r   )print)r   r   r   r   r   r   r   ;   s   zFilter.should_filterc                 C   s   t r   )NotImplementedError)r   r   r   r   r   r   r   r   >   s   zFilter.filterN)__name__
__module____qualname__r	   r   r   r   r   r   r   r   r      s
    r   c                   @      e Zd Z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   r   namevaluer   r   r   r   C   s   
zHTMLFilter.should_filterN)r!   r"   r#   r   r   r   r   r   r%   B       r%   c                   @   r$   )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   pisaZ	CreatePDFr   )	r   r   r   r   r   r   r   Ztopdfdstr   r   r   r   M   s   

zPisaMiddleware.filterN)r!   r"   r#   r   r   r   r   r   r,   L   r+   r,   )loggingior   Zxhtml2pdf.pisar-   	getLoggerlogobjectr   r%   r,   r   r   r   r   <module>   s   
(
