o
    Ø¨èf  ã                   @   s’   d dl Z d dl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 d dlmZ G d	d
„ d
eƒZG dd„ dƒZe  ¡ dd„ ƒZdS )é    N)ÚCounterÚOrderedDict)ÚPath)Úapps)Úsettings)ÚImproperlyConfigured)Úcached_property)Úimport_stringc                   @   s   e Zd ZdS )ÚInvalidTemplateEngineErrorN)Ú__name__Ú
__module__Ú__qualname__© r   r   úM/var/www/dscantool/venv/lib/python3.10/site-packages/django/template/utils.pyr
      s    r
   c                   @   s:   e Zd Zddd„Zedd„ ƒZdd„ Zdd	„ Zd
d„ ZdS )ÚEngineHandlerNc                 C   s   || _ i | _dS )z|
        templates is an optional list of template engine definitions
        (structured like settings.TEMPLATES).
        N)Ú
_templatesÚ_engines)ÚselfÚ	templatesr   r   r   Ú__init__   s   
zEngineHandler.__init__c              	   C   sÌ   | j d u r	tj| _ tƒ }g }| j D ]9}z|d  dd¡d }W n ty3   | dd¡}td |¡ƒ‚w |g di dœ|¥}|||d	 < | 	|d	 ¡ qt
|ƒ}d
d„ | ¡ D ƒ}|rdtd d |¡¡ƒ‚|S )NÚBACKENDÚ.é   éþÿÿÿz<not defined>zHInvalid BACKEND for a template engine: {}. Check your TEMPLATES setting.F)ÚNAMEZDIRSZAPP_DIRSÚOPTIONSr   c                 S   s   g | ]
\}}|d kr|‘qS )é   r   )Ú.0ÚaliasÚcountr   r   r   Ú
<listcomp>7   s    z+EngineHandler.templates.<locals>.<listcomp>zoTemplate engine aliases aren't unique, duplicates: {}. Set a unique NAME for each engine in settings.TEMPLATES.z, )r   r   Z	TEMPLATESr   ÚrsplitÚ	ExceptionÚgetr   ÚformatÚappendr   Úmost_commonÚjoin)r   r   Zbackend_namesZtplÚdefault_nameZinvalid_backendÚcountsÚ
duplicatesr   r   r   r      s>   

þþüûýzEngineHandler.templatesc                 C   s|   z| j | W S  ty=   z| j| }W n ty"   td |¡ƒ‚w | ¡ }| d¡}t|ƒ}||ƒ}|| j |< | Y S w )Nz4Could not find config for '{}' in settings.TEMPLATESr   )r   ÚKeyErrorr   r
   r$   ÚcopyÚpopr	   )r   r   ÚparamsÚbackendZ
engine_clsZenginer   r   r   Ú__getitem__@   s$   þÿ

ïzEngineHandler.__getitem__c                 C   s
   t | jƒS ©N)Úiterr   ©r   r   r   r   Ú__iter__V   s   
zEngineHandler.__iter__c                    s   ‡ fdd„ˆ D ƒS )Nc                    s   g | ]}ˆ | ‘qS r   r   )r   r   r3   r   r   r    Z   s    z%EngineHandler.all.<locals>.<listcomp>r   r3   r   r3   r   ÚallY   s   zEngineHandler.allr1   )	r   r   r   r   r   r   r0   r4   r5   r   r   r   r   r      s    

&r   c                    s   ‡ fdd„t  ¡ D ƒ}t|ƒS )zµ
    Return an iterable of paths of directories to load app templates from.

    dirname is the name of the subdirectory containing templates inside
    installed applications.
    c                    s6   g | ]}|j rt|j ƒˆ   ¡ rtt|j ƒˆ  ƒ‘qS r   )Úpathr   Úis_dirÚstr)r   Z
app_config©Údirnamer   r   r    e   s    ýýÿz)get_app_template_dirs.<locals>.<listcomp>)r   Zget_app_configsÚtuple)r:   Ztemplate_dirsr   r9   r   Úget_app_template_dirs]   s   
þr<   )Ú	functoolsÚcollectionsr   r   Úpathlibr   Zdjango.appsr   Zdjango.confr   Zdjango.core.exceptionsr   Zdjango.utils.functionalr   Zdjango.utils.module_loadingr	   r
   r   Ú	lru_cacher<   r   r   r   r   Ú<module>   s    M