B
    indJ                 @   s   d dl 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
 d dlmZmZmZ y$d dlZeedrtejZnejZW n ek
r   dZY nX G d	d
 d
e
ZG dd dZdS )    N)PathLike)BackgroundTask)URL)Request)Response)ReceiveScopeSendpass_contextc                   sh   e Zd ZdZd
ejeeejej	e
e
f  eje
 eje d fddZeeedd fdd	Z  ZS )_TemplateResponsez	text/html   N)templatecontextstatus_codeheaders
media_type
backgroundc                s.   || _ || _||}t ||||| d S )N)r   r   rendersuper__init__)selfr   r   r   r   r   r   content)	__class__ 8/tmp/pip-unpacked-wheel-_bom8ime/starlette/templating.pyr      s    	
z_TemplateResponse.__init__)scopereceivesendreturnc                sZ   | j di }|di }d|kr@|d| j| j ddI d H  t |||I d H  d S )Nrequest
extensionszhttp.response.debug)r   r   )typeinfo)r   getr   r   __call__)r   r   r   r   r   r    )r   r   r   r$   *   s    z_TemplateResponse.__call__)r   NNN)__name__
__module____qualname__r   typingAnydictintOptionalMappingstrr   r   r   r   r	   r$   __classcell__r   r   )r   r   r      s      <r   c            	   @   s   e Zd ZdZdejeef ejej	ej
egejeejf f   ejddddZejeef ejdddd	Zed
dddZdeeeejejeef  eje eje edddZdS )Jinja2Templatesz}
    templates = Jinja2Templates("templates")

    return templates.TemplateResponse("index.html", {"request": request})
    N)	directorycontext_processorsenv_optionsr   c             K   s.   t d k	std| j|f|| _|p&g | _d S )Nz/jinja2 must be installed to use Jinja2Templates)jinja2AssertionError_create_envenvr2   )r   r1   r2   r3   r   r   r   r   A   s    zJinja2Templates.__init__zjinja2.Environment)r1   r3   r   c             K   sV   t tttjtddd}t|}|d| |dd tj	f |}||j
d< |S )N)r   namepath_paramsr   c             [   s   | d }|j |f|S )Nr   )url_for)r   r8   r9   r   r   r   r   r:   P   s    z,Jinja2Templates._create_env.<locals>.url_forloaderZ
autoescapeTr:   )r
   r*   r.   r(   r)   r   r4   ZFileSystemLoader
setdefaultEnvironmentglobals)r   r1   r3   r:   r;   r7   r   r   r   r6   M   s    

zJinja2Templates._create_envzjinja2.Template)r8   r   c             C   s   | j |S )N)r7   get_template)r   r8   r   r   r   r?   ]   s    zJinja2Templates.get_templater   )r8   r   r   r   r   r   r   c       
      C   s\   d|krt dtt|d }x| jD ]}||| q(W | |}	t|	|||||dS )Nr   z$context must include a "request" key)r   r   r   r   )
ValueErrorr(   castr   r2   updater?   r   )
r   r8   r   r   r   r   r   r   Zcontext_processorr   r   r   r   TemplateResponse`   s    	
z Jinja2Templates.TemplateResponse)N)r   NNN)r%   r&   r'   __doc__r(   Unionr.   r   r,   ListCallabler   Dictr)   r   r6   r?   r*   r+   r-   r   r   rC   r   r   r   r   r0   :   s   4   *r0   )r(   osr   Zstarlette.backgroundr   Zstarlette.datastructuresr   Zstarlette.requestsr   Zstarlette.responsesr   Zstarlette.typesr   r   r	   r4   hasattrr
   ZcontextfunctionModuleNotFoundErrorr   r0   r   r   r   r   <module>   s   


!