o
     d                     @   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
mZmZ zd dlZeedr4ejZnejZW n eyC   dZY nw G dd	 d	eZG d
d dZdS )    N)PathLike)BackgroundTask)Request)Response)ReceiveScopeSendpass_contextc                       s   e Zd ZdZ				ddejdededejej	e
e
f  deje
 d	eje f fd
dZdedededdf 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__ ?/usr/local/lib/python3.10/dist-packages/starlette/templating.pyr      s   	
z_TemplateResponse.__init__scopereceivesendreturnc                    s\   | j di }|di }d|v 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dejeef dejej	ej
egejeejf f   dejddfddZdejeef dejdd	fd
dZdeddfddZ				ddedededejejeef  deje deje defddZdS )Jinja2Templatesz}
    templates = Jinja2Templates("templates")

    return templates.TemplateResponse("index.html", {"request": request})
    N	directorycontext_processorsenv_optionsr   c                 K   s2   t d usJ d| j|fi || _|pg | _d S )Nz/jinja2 must be installed to use Jinja2Templates)jinja2_create_envenvr4   )r   r3   r4   r5   r   r   r   r   @   s   zJinja2Templates.__init__zjinja2.Environmentc              	   K   s`   t dtdtdtjdtfdd}t|}|d| |dd	 tjdi |}||j	d
< |S )Nr   namepath_paramsr   c                 [   s   | d }|j |fi |S )Nr    )url_for)r   r9   r:   r    r   r   r   r;   O   s   z,Jinja2Templates._create_env.<locals>.url_forloader
autoescapeTr;   r   )
r	   r,   r0   r*   r+   r6   FileSystemLoader
setdefaultEnvironmentglobals)r   r3   r5   r;   r<   r8   r   r   r   r7   L   s   

zJinja2Templates._create_envr9   zjinja2.Templatec                 C   s   | j |S r   )r8   get_template)r   r9   r   r   r   rB   \   s   zJinja2Templates.get_templater   r   r   r   r   r   c           
      C   sX   d|vrt dtt|d }| jD ]	}||| q| |}	t|	|||||dS )Nr    z$context must include a "request" key)r   r   r   r   )
ValueErrorr*   castr   r4   updaterB   r
   )
r   r9   r   r   r   r   r   r    context_processorr   r   r   r   TemplateResponse_   s   	

z Jinja2Templates.TemplateResponser   r&   )r'   r(   r)   __doc__r*   Unionr0   r   r.   ListCallabler   Dictr+   r   r7   rB   r,   r-   r/   r   r
   rG   r   r   r   r   r2   9   sR     

r2   )r*   osr   starlette.backgroundr   starlette.requestsr   starlette.responsesr   starlette.typesr   r   r   r6   hasattrr	   contextfunctionImportErrorr
   r2   r   r   r   r   <module>   s"    
!