U
    [+d                     @   sL   d 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e
Z	d	S )
z4
Wrapper for loading templates from the filesystem.
    )SuspiciousFileOperation)OriginTemplateDoesNotExist)	safe_join   )Loaderc                       s6   e Zd Zd
 fdd	Zdd Zdd Zdd	 Z  ZS )r   Nc                    s   t  | || _d S N)super__init__dirs)selfenginer   	__class__ F/tmp/pip-unpacked-wheel-n7e__lmp/django/template/loaders/filesystem.pyr
      s    zLoader.__init__c                 C   s   | j d k	r| j S | jj S r   )r   r   )r   r   r   r   get_dirs   s    zLoader.get_dirsc              
   C   sV   z4t |j| jjd}| W  5 Q R  W S Q R X W n tk
rP   t|Y nX d S )N)encoding)opennamer   Zfile_charsetreadFileNotFoundErrorr   )r   originfpr   r   r   get_contents   s
     zLoader.get_contentsc              	   c   sJ   |   D ]<}zt||}W n tk
r2   Y qY nX t||| dV  qdS )z
        Return an Origin object pointing to an absolute path in each directory
        in template_dirs. For security reasons, if a path doesn't lie inside
        one of the template_dirs it is excluded from the result set.
        )r   template_nameloaderN)r   r   r   r   )r   r   Ztemplate_dirr   r   r   r   get_template_sources   s    
zLoader.get_template_sources)N)__name__
__module____qualname__r
   r   r   r   __classcell__r   r   r   r   r      s   r   N)__doc__Zdjango.core.exceptionsr   Zdjango.templater   r   Zdjango.utils._osr   baser   Z
BaseLoaderr   r   r   r   <module>   s
   