a
    5Xh5                     @   sr   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 ddlmZ dd	lmZ G d
d dZdS )    N)ImproperlyConfigured)cached_propertyimport_string   Template)Context_builtin_context_processors)TemplateDoesNotExistimport_libraryc                
   @   s   e Zd Zg dZd#ddZd	d
 Zeejdd Z	e
dd Zdd Zdd Ze
dd Zdd Zdd Zd$ddZdd Zdd Zd%dd Zd!d" ZdS )&Engine)zdjango.template.defaulttagszdjango.template.defaultfilterszdjango.template.loader_tagsNF utf-8Tc                 C   s   |d u rg }|d u rg }|d u r@dg}|r4|dg7 }d|fg}n|rLt d|d u rXi }|	d u rdg }	|| _|| _|
| _|| _|| _|| _|| _|| _|| _	| 
|| _| j|	 | _| | j| _d S )Nz)django.template.loaders.filesystem.Loaderz.django.template.loaders.app_directories.Loaderz%django.template.loaders.cached.Loaderz1app_dirs must not be set when loaders is defined.)r   dirsapp_dirs
autoescapecontext_processorsdebugloadersstring_if_invalidfile_charset	librariesget_template_librariesZtemplate_librariesdefault_builtinsbuiltinsget_template_builtinsZtemplate_builtins)selfr   r   r   r   r   r   r   r   r   r    r   [/var/www/viveiro_mudafortebrasil/venv/lib/python3.9/site-packages/django/template/engine.py__init__   s:    
zEngine.__init__c                 C   s   d| j j| jsdndt| j | j| js,dndt| j | jt| jt| jt| j	| j
s^dndt| j
 | jstdndt| j t| jf S )Nz`<%s:%s app_dirs=%s%s debug=%s loaders=%s string_if_invalid=%s file_charset=%s%s%s autoescape=%s>r   z dirs=%sz context_processors=%sz libraries=%sz builtins=%s)	__class____qualname__r   reprr   r   r   r   r   r   r   r   r   r   r   r   r    __repr__A   s     zEngine.__repr__c                  C   sF   ddl m}  ddlm} |  D ]}t||r |j  S q tddS )a  
        Return the first DjangoTemplates backend that's configured, or raise
        ImproperlyConfigured if none are configured.

        This is required for preserving historical APIs that rely on a
        globally available, implicitly configured engine such as:

        >>> from django.template import Context, Template
        >>> template = Template("Hello {{ name }}!")
        >>> context = Context({'name': "world"})
        >>> template.render(context)
        'Hello world!'
        r   )engines)DjangoTemplatesz)No DjangoTemplates backend is configured.N)Zdjango.templater'   Zdjango.template.backends.djangor(   all
isinstanceenginer   )r'   r(   r+   r   r   r    get_defaultU   s    
zEngine.get_defaultc                 C   s$   t }|t| j7 }tdd |D S )Nc                 s   s   | ]}t |V  qd S Nr   ).0pathr   r   r    	<genexpr>t       z5Engine.template_context_processors.<locals>.<genexpr>)r
   tupler   )r   r   r   r   r    template_context_processorsp   s    z"Engine.template_context_processorsc                 C   s   dd |D S )Nc                 S   s   g | ]}t |qS r   r   )r.   xr   r   r    
<listcomp>w   r1   z0Engine.get_template_builtins.<locals>.<listcomp>r   )r   r   r   r   r    r   v   s    zEngine.get_template_builtinsc                 C   s&   i }|  D ]\}}t|||< q|S r-   )itemsr   )r   r   Zloadednamer/   r   r   r    r   y   s    zEngine.get_template_librariesc                 C   s   |  | jS r-   )get_template_loadersr   r%   r   r   r    template_loaders   s    zEngine.template_loadersc                 C   s.   g }|D ] }|  |}|d ur|| q|S r-   )find_template_loaderappend)r   r9   r   Ztemplate_loaderloaderr   r   r    r8      s    
zEngine.get_template_loadersc                 C   sN   t |ttfr|^}}ng }t |tr>t|}|| g|R  S td| d S )Nz3Invalid value in template loaders configuration: %r)r*   r2   liststrr   r   )r   r<   argsloader_classr   r   r    r:      s    

zEngine.find_template_loaderc                 C   sp   g }| j D ]T}z|j||d}||jfW   S  ty\ } z||j W Y d }~q
d }~0 0 q
t||dd S )N)skip)tried)r9   get_templateoriginr   extendrB   )r   r7   r   rA   rB   r<   templateer   r   r    find_template   s    
$zEngine.find_templatec                 C   s   t || dS )z
        Return a compiled Template object for the given template code,
        handling template inheritance recursively.
        r+   r   )r   Ztemplate_coder   r   r    from_string   s    zEngine.from_stringc                 C   s,   |  |\}}t|ds(t|||| d}|S )z
        Return a compiled Template object for the given template name,
        handling template inheritance recursively.
        renderrI   )rH   hasattrr   )r   template_namerF   rD   r   r   r    rC      s    
zEngine.get_templatec                 C   sP   t |ttfr| |}n
| |}t |tr8||S |t|| jdS dS )z
        Render the template specified by template_name with the given context.
        For use in Django's test suite.
        )r   N)r*   r=   r2   select_templaterC   r	   rK   r   )r   rM   contexttr   r   r    render_to_string   s    


zEngine.render_to_stringc                 C   s   |st dg }|D ]d}z| |W   S  t yv } z6|jd |vrV||jd  W Y d}~qW Y d}~qd}~0 0 qt d|dS )zV
        Given a list of template names, return the first that can be loaded.
        zNo template names providedr   Nz, )r   rC   r?   r;   join)r   Ztemplate_name_list	not_foundrM   excr   r   r    rN      s    $zEngine.select_template)
NFNFNr   r   NNT)NN)N)__name__
__module__r#   r   r!   r&   staticmethod	functools	lru_cacher,   r   r3   r   r   r9   r8   r:   rH   rJ   rC   rQ   rN   r   r   r   r    r      s:             
-




r   )rX   Zdjango.core.exceptionsr   Zdjango.utils.functionalr   Zdjango.utils.module_loadingr   baser   rO   r	   r
   
exceptionsr   libraryr   r   r   r   r   r    <module>   s   