o
    [h@                     @   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 G dd dZ	G d	d
 d
e	Z
dd Ze ZdefddZdddZdS )    PathN)settings)HTMLResponse   )TemplateLoadErrorc                   @   s@   e Zd Zdd ZddefddZdefdd	Zdefd
dZ	dS )
FileLoaderc                 G   s   || _ i | _d S N)dirscache)selfr
    r   ~/home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/venv/lib/python3.10/site-packages/otree/templating/loader.py__init__   s   
zFileLoader.__init__Nfilenamec                 C   s4   || j v r
| j | S | j||d\}}|| j |< |S Ntemplate_type)r   load_from_disk)r   r   r   templatepathr   r   r   load   s
   


zFileLoader.loadreturnc                 C   s:   | j D ]}t||}| r|  S qd| d}t|)Nz(Loader cannot locate the template file ''.)r
   r   existsr   )r   template_iddirr   msgr   r   r   search_template   s   

zFileLoader.search_templatec           	   
   C   sj   ddl m} | |}z|d}W n ty) } zd| d}t||d }~ww ||||d}||fS )Nr   )Templatezutf-8z*FileLoader cannot load the template file 'r   r   )r   r   r   	read_textOSErrorr   )	r   r   r   r   abspathZtemplate_stringerrr   r   r   r   r   r      s   

zFileLoader.load_from_diskr	   )
__name__
__module____qualname__r   strr   r   r   tupler   r   r   r   r   r   
   s
    r   c                   @   s   e Zd ZddefddZdS )FileReloaderNr   c           	      C   sd   || j v r| j | \}}}| r| j|kr|S | j||d\}}| j}|||f| j |< |S r   )r   r   statst_mtimer   )	r   r   r   Zcached_mtimeZcached_pathZcached_templater   r   mtimer   r   r   r   -   s   

zFileReloader.loadr	   )r$   r%   r&   r'   r   r   r   r   r   r)   ,   s    r)   c                  C   sJ   t drtnt} tdtdttjjdgdd t	j
D  }| | S )NZUSE_TEMPLATE_RELOADER.Z
_templates	templatesc                 S   s   g | ]}t |d qS )r.   r   ).0Zapp_namer   r   r   
<listcomp>@   s    z#get_ibis_loader.<locals>.<listcomp>)osgetenvr)   r   r   otree__file__parentjoinpathr   Z
OTREE_APPS)loader_classr
   r   r   r   get_ibis_loader8   s   r8   r   c              	   C   s<   | D ]}z
t | W |  S  ty   Y qw tt| )z1return the path of the first template that exists)ibis_loaderr   r   r'   )Ztemplate_namesfnamer   r   r   get_template_name_if_existsG   s   r;   c                 K   s(   t tj| |dj|fi |ddiS )Nr   Zstrict_modeT)r   r9   r   render)Ztemplate_namecontextr   Zextra_contextr   r   r   r<   S   s   r<   r	   )pathlibr   r1   r3   r   Zstarlette.responsesr   errorsr   r   r)   r8   r9   r'   r;   r<   r   r   r   r   <module>   s    "