U
    Rh                      @  s   d dl mZ d dlZ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 z$d dlZeed	re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 )    )annotationsN)PathLike)BackgroundTask)URL)Request)HTMLResponse)ReceiveScopeSendpass_contextc                      sF   e Zd Zdddddddd	 fd
dZddddd fddZ  ZS )_TemplateResponse   N
typing.Anydict[str, typing.Any]inttyping.Mapping[str, str] | None
str | NoneBackgroundTask | None)templatecontextstatus_codeheaders
media_type
backgroundc                   s.   || _ || _||}t ||||| d S N)r   r   Zrendersuper__init__)selfr   r   r   r   r   r   Zcontent	__class__ :./venv/lib/python3.8/site-packages/starlette/templating.pyr      s    	
z_TemplateResponse.__init__r	   r   r
   None)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   r,   __classcell__r    r    r   r!   r      s       r   c                   @  s   e Zd ZdZejdddddddd	d
Zejdddddddd
Zd-ddddddddddd
ZddddddZdddddZdddddZ	ejd.ddd d!d"d#d$d%d&d'd(Z
ejd/dd d!d"d#d$d%d)d*d(Z
ddd%d+d,d(Z
dS )0Jinja2Templatesz}
    templates = Jinja2Templates("templates")

    return templates.TemplateResponse("index.html", {"request": request})
    N)context_processorsz:str | PathLike[str] | typing.Sequence[str | PathLike[str]]z>list[typing.Callable[[Request], dict[str, typing.Any]]] | Noner   r"   )	directoryr2   env_optionsr&   c                K  s   d S r   r    )r   r3   r2   r4   r    r    r!   r   B   s    zJinja2Templates.__init__zjinja2.Environment)envr2   r&   c                C  s   d S r   r    )r   r5   r2   r    r    r!   r   K   s    )r2   r5   zAstr | PathLike[str] | typing.Sequence[str | PathLike[str]] | Nonezjinja2.Environment | None)r3   r2   r5   r4   r&   c                K  sz   |rt dt td k	s tdt|t|A s8td|p>g | _|d k	r\| j|f|| _n|d k	rj|| _| 	| j d S )NzYExtra environment options are deprecated. Use a preconfigured jinja2.Environment instead.z/jinja2 must be installed to use Jinja2Templatesz4either 'directory' or 'env' arguments must be passed)
warningswarnDeprecationWarningjinja2AssertionErrorboolr2   _create_envr5   _setup_env_defaults)r   r3   r2   r5   r4   r    r    r!   r   S   s    
)r3   r4   r&   c                 K  s.   t |}|d| |dd t jf |S )NloaderZ
autoescapeT)r9   ZFileSystemLoader
setdefaultZEnvironment)r   r3   r4   r>   r    r    r!   r<   j   s    
zJinja2Templates._create_env)r5   r&   c                 C  s*   t ddddddd}|jd| d S )	Nr   strr   r   )r   namepath_paramsr&   c                [  s   | d }|j |f|S )Nr'   )url_for)r   rA   rB   r'   r    r    r!   rC   v   s    z4Jinja2Templates._setup_env_defaults.<locals>.url_forrC   )r   globalsr?   )r   r5   rC   r    r    r!   r=   u   s    	z#Jinja2Templates._setup_env_defaultsr@   zjinja2.Template)rA   r&   c                 C  s   | j |S r   )r5   get_template)r   rA   r    r    r!   rE      s    zJinja2Templates.get_templater   r   zdict[str, typing.Any] | Noner   r   r   r   r   )r'   rA   r   r   r   r   r   r&   c                 C  s   d S r   r    )r   r'   rA   r   r   r   r   r   r    r    r!   TemplateResponse   s    
z Jinja2Templates.TemplateResponse)rA   r   r   r   r   r   r&   c                 C  s   d S r   r    )r   rA   r   r   r   r   r   r    r    r!   rF      s    )argskwargsr&   c                 O  st  |rt |d trtdt |d }t|dkr<|d n
|di }t|dkr\|d n
|dd}t|dkr||d n|d}t|d	kr|d	 n|d
}t|dkr|d n|d}d|krtd|d }	n|d }	t|dkr|d n|d }t|dkr|d n
|di }t|d	kr8|d	 n
|dd}t|dkrZ|d n|d}t|dkrz|d n|d
}t|dkr|d n|d}nd|krtdt d|di krtd|di }|d|d}	t	t|d }|dd}|d}|d
}|d}|
d|	 | jD ]}
||
|	 q@| |}t||||||dS )Nr   zThe `name` is not the first parameter anymore. The first parameter should be the `Request` instance.
Replace `TemplateResponse(name, {"request": request})` by `TemplateResponse(request, name)`.   r      r   r   r      r      r   r'   z$context must include a "request" keyrA         zThe `TemplateResponse` now requires the `request` argument.
Replace `TemplateResponse(name, {"context": context})` by `TemplateResponse(request, name)`.)r   r   r   r   )
isinstancer@   r6   r7   r8   lenr+   
ValueErrortypingcastr?   r2   updaterE   r   )r   rG   rH   rA   r   r   r   r   r   r'   Zcontext_processorr   r    r    r!   rF      s`      
""  "





)N)Nr   NNN)Nr   NNN)r-   r.   r/   __doc__rR   Zoverloadr   r<   r=   rE   rF   r    r    r    r!   r1   ;   s<   	            r1   )Z
__future__r   rR   r6   osr   Zstarlette.backgroundr   Zstarlette.datastructuresr   Zstarlette.requestsr   Zstarlette.responsesr   Zstarlette.typesr   r	   r
   r9   hasattrr   ZcontextfunctionModuleNotFoundErrorr   r1   r    r    r    r!   <module>   s"   


