U
    e!                     @  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.Anyz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   rendersuper__init__)selfr   r   r   r   r   r   content	__class__ 8/tmp/pip-unpacked-wheel-2mv5qoba/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_processorszNstr | PathLike[typing.AnyStr] | typing.Sequence[str | PathLike[typing.AnyStr]]z>list[typing.Callable[[Request], dict[str, typing.Any]]] | Noner   r#   )	directoryr3   env_optionsr'   c                K  s   d S r   r!   )r   r4   r3   r5   r!   r!   r"   r   B   s    zJinja2Templates.__init__zjinja2.Environment)envr3   r'   c                C  s   d S r   r!   )r   r6   r3   r!   r!   r"   r   O   s    )r3   r6   zUstr | PathLike[typing.AnyStr] | typing.Sequence[str | PathLike[typing.AnyStr]] | Nonezjinja2.Environment | None)r4   r3   r6   r5   r'   c                K  sr   |rt dt td k	s td|s0|s0td|p6g | _|d k	rT| j|f|| _n|d k	rb|| _| | 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AssertionErrorr3   _create_envr6   _setup_env_defaults)r   r4   r3   r6   r5   r!   r!   r"   r   Y   s    
)r4   r5   r'   c                 K  s.   t |}|d| |dd t jf |S )NloaderZ
autoescapeT)r:   ZFileSystemLoader
setdefaultEnvironment)r   r4   r5   r>   r!   r!   r"   r<   t   s    
zJinja2Templates._create_env)r6   r'   c                 C  s*   t ddddddd}|jd| d S )	Nztyping.Dict[str, typing.Any]strr   r   )r   namepath_paramsr'   c                [  s   | d }|j |f|S )Nr(   )url_for)r   rB   rC   r(   r!   r!   r"   rD      s    z4Jinja2Templates._setup_env_defaults.<locals>.url_forrD   )r   globalsr?   )r   r6   rD   r!   r!   r"   r=      s    	z#Jinja2Templates._setup_env_defaultsrA   zjinja2.Template)rB   r'   c                 C  s   | j |S r   )r6   get_template)r   rB   r!   r!   r"   rF      s    zJinja2Templates.get_templater   r   zdict[str, typing.Any] | Noner   r   r   r   r   )r(   rB   r   r   r   r   r   r'   c                 C  s   d S r   r!   )r   r(   rB   r   r   r   r   r   r!   r!   r"   TemplateResponse   s    z Jinja2Templates.TemplateResponse)rB   r   r   r   r   r   r'   c                 C  s   d S r   r!   )r   rB   r   r   r   r   r   r!   r!   r"   rG      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" keyrB         zThe `TemplateResponse` now requires the `request` argument.
Replace `TemplateResponse(name, {"context": context})` by `TemplateResponse(request, name)`.)r   r   r   r   )
isinstancerA   r7   r8   r9   lenr,   
ValueErrortypingcastr?   r3   updaterF   r   )r   rH   rI   rB   r   r   r   r   r   r(   Zcontext_processorr   r!   r!   r"   rG      sj      
"   "





)N)Nr   NNN)Nr   NNN)r.   r/   r0   __doc__rS   overloadr   r<   r=   rF   rG   r!   r!   r!   r"   r2   ;   s<               r2   )
__future__r   rS   r7   osr   Zstarlette.backgroundr   Zstarlette.datastructuresr   Zstarlette.requestsr   Zstarlette.responsesr   Zstarlette.typesr   r	   r
   r:   hasattrr   ZcontextfunctionModuleNotFoundErrorr   r2   r!   r!   r!   r"   <module>   s"   


