o
    ùT·jG  ã                
   @  sú   d dl mZ d dlmZmZmZ d dlmZ d dlm	Z	m
Z
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	rMejZneedƒrVejZnejZW n eyk Z zedƒe‚d
Z[ww G dd„ deƒZG dd„ dƒZd
S )é    )Úannotations)ÚCallableÚMappingÚSequence)ÚPathLike)ÚTYPE_CHECKINGÚAnyÚoverload)ÚBackgroundTask)ÚURL)ÚRequest)ÚHTMLResponse)ÚReceiveÚScopeÚSendNÚpass_contextz/jinja2 must be installed to use Jinja2Templatesc                      s6   e Zd Z				dd‡ fdd„Zd‡ fdd„Z‡  ZS )Ú_TemplateResponseéÈ   NÚtemplater   Úcontextúdict[str, Any]Ústatus_codeÚintÚheadersúMapping[str, str] | NoneÚ
media_typeú
str | NoneÚ
backgroundúBackgroundTask | Nonec                   s.   || _ || _| |¡}tƒ  |||||¡ d S ©N)r   r   ÚrenderÚsuperÚ__init__)Úselfr   r   r   r   r   r   Úcontent©Ú	__class__© úW/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/starlette/templating.pyr"       s   	
z_TemplateResponse.__init__Úscoper   Úreceiver   Úsendr   ÚreturnÚNonec                 ƒ  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(   r3   .   s   €z_TemplateResponse.__call__)r   NNN)r   r   r   r   r   r   r   r   r   r   r   r   )r)   r   r*   r   r+   r   r,   r-   )Ú__name__Ú
__module__Ú__qualname__r"   r3   Ú__classcell__r'   r'   r%   r(   r      s    ùr   c                   @  sx   e Zd ZdZeddœd*d
d„ƒZeddœd+dd„ƒZ	d,dddœd-dd„Zd.dd„Zd/dd„Z					d0d1d(d)„ZdS )2ÚJinja2Templatesa?  Jinja2 template renderer.

    Example:
        ```python
        from starlette.templating import Jinja2Templates

        templates = Jinja2Templates(directory="templates")

        async def homepage(request: Request) -> Response:
            return templates.TemplateResponse(request, "index.html")
        ```
    N)Úcontext_processorsÚ	directoryú3str | PathLike[str] | Sequence[str | PathLike[str]]r9   ú0list[Callable[[Request], dict[str, Any]]] | Noner,   r-   c                C  ó   d S r   r'   )r#   r:   r9   r'   r'   r(   r"   D   ó   zJinja2Templates.__init__Úenvújinja2.Environmentc                C  r=   r   r'   )r#   r?   r9   r'   r'   r(   r"   L   r>   )r9   r?   ú:str | PathLike[str] | Sequence[str | PathLike[str]] | Noneújinja2.Environment | Nonec                C  sh   t |ƒt |ƒA sJ dƒ‚|pg | _|d ur%t |¡}tj|t ¡ d�| _n|d ur,|| _|  | j¡ d S )Nz4either 'directory' or 'env' arguments must be passed)ÚloaderÚ
autoescape)Úboolr9   Újinja2ÚFileSystemLoaderÚEnvironmentÚselect_autoescaper?   Ú_setup_env_defaults)r#   r:   r9   r?   rC   r'   r'   r(   r"   T   s   

c                 C  s    t dd	d
„ƒ}|j d|¡ d S )Nr   r   ÚnameÚstrÚpath_paramsr   r,   r   c                [  s   | d }|j |fi |¤ŽS )Nr.   )Úurl_for)r   rK   rM   r.   r'   r'   r(   rN   f   s   z4Jinja2Templates._setup_env_defaults.<locals>.url_forrN   )r   r   rK   rL   rM   r   r,   r   )r   ÚglobalsÚ
setdefault)r#   r?   rN   r'   r'   r(   rJ   e   s   	z#Jinja2Templates._setup_env_defaultsrK   rL   újinja2.Templatec                 C  s   | j  |¡S r   )r?   Úget_template)r#   rK   r'   r'   r(   rR   r   s   zJinja2Templates.get_templater   r.   r   r   údict[str, Any] | Noner   r   r   r   r   r   r   r   r   c           
      C  sL   |pi }|  d|¡ | jD ]	}| ||ƒ¡ q|  |¡}	t|	|||||d�S )a>  
        Render a template and return an HTML response.

        Args:
            request: The incoming request instance.
            name: The template file name to render.
            context: Variables to pass to the template.
            status_code: HTTP status code for the response.
            headers: Additional headers to include in the response.
            media_type: Media type for the response.
            background: Background task to run after response is sent.

        Returns:
            An HTML response with the rendered template content.
        r.   )r   r   r   r   )rP   r9   ÚupdaterR   r   )
r#   r.   rK   r   r   r   r   r   Úcontext_processorr   r'   r'   r(   ÚTemplateResponseu   s   

úz Jinja2Templates.TemplateResponse)r:   r;   r9   r<   r,   r-   )r?   r@   r9   r<   r,   r-   r   )r:   rA   r9   r<   r?   rB   r,   r-   )r?   r@   r,   r-   )rK   rL   r,   rQ   )Nr   NNN)r.   r   rK   rL   r   rS   r   r   r   r   r   r   r   r   r,   r   )	r4   r5   r6   Ú__doc__r	   r"   rJ   rR   rV   r'   r'   r'   r(   r8   6   s*    üü	þû

ør8   ) Ú
__future__r   Úcollections.abcr   r   r   Úosr   Útypingr   r   r	   Ústarlette.backgroundr
   Ústarlette.datastructuresr   Ústarlette.requestsr   Ústarlette.responsesr   Ústarlette.typesr   r   r   rF   r   ÚhasattrÚcontextfunctionÚImportErrorÚ_import_errorr   r8   r'   r'   r'   r(   Ú<module>   s.    
€
€ÿ