
    Hwgc
                     <    d dl Z d dlZd dlmZ ddZ G d d      Zy)    N)SuspiciousFileOperationc                 N   t         j                  j                  |       dv rt        d| z        |rCt	        j
                  |       }|j                         sd|j                  v rt        d| z        | S | t         j                  j                  |       k7  rt        d| z        | S )N>    ...z$Could not derive file name from '%s'r   z'Detected path traversal attempt in '%s'z%File name '%s' includes path elements)ospathbasenamer   pathlibPurePosixPathis_absoluteparts)nameallow_relative_pathr	   s      N/var/www/horilla/myenv/lib/python3.12/site-packages/django/core/files/utils.pyvalidate_file_namer      s    	ww0%&Lt&STT $$T*!3)9D@  K 
!!$'	'%&MPT&TUUK    c                   4   e Zd ZdZ ed       Z ed       Z ed       Z ed       Z ed       Z	 ed       Z
 ed       Z ed	       Z ed
       Z ed       Z ed       Z ed       Z ed       Z ed       Zed        Zd Zd Zd Zd Zy)FileProxyMixinz
    A mixin class used to forward file methods to an underlaying file
    object.  The internal file object has to be called "file"::

        class FileProxy(FileProxyMixin):
            def __init__(self, file):
                self.file = file
    c                 .    | j                   j                  S N)fileencodingselfs    r   <lambda>zFileProxyMixin.<lambda>%       TYY%7%7 r   c                 .    | j                   j                  S r   )r   filenor   s    r   r   zFileProxyMixin.<lambda>&       499#3#3 r   c                 .    | j                   j                  S r   )r   flushr   s    r   r   zFileProxyMixin.<lambda>'       $))// r   c                 .    | j                   j                  S r   )r   isattyr   s    r   r   zFileProxyMixin.<lambda>(   r    r   c                 .    | j                   j                  S r   )r   newlinesr   s    r   r   zFileProxyMixin.<lambda>)   r   r   c                 .    | j                   j                  S r   )r   readr   s    r   r   zFileProxyMixin.<lambda>*        r   c                 .    | j                   j                  S r   )r   readintor   s    r   r   zFileProxyMixin.<lambda>+   r   r   c                 .    | j                   j                  S r   )r   readliner   s    r   r   zFileProxyMixin.<lambda>,   r   r   c                 .    | j                   j                  S r   )r   	readlinesr   s    r   r   zFileProxyMixin.<lambda>-   s    dii&9&9 r   c                 .    | j                   j                  S r   )r   seekr   s    r   r   zFileProxyMixin.<lambda>.   r*   r   c                 .    | j                   j                  S r   )r   tellr   s    r   r   zFileProxyMixin.<lambda>/   r*   r   c                 .    | j                   j                  S r   )r   truncater   s    r   r   zFileProxyMixin.<lambda>0   r   r   c                 .    | j                   j                  S r   )r   writer   s    r   r   zFileProxyMixin.<lambda>1   r#   r   c                 .    | j                   j                  S r   )r   
writelinesr   s    r   r   zFileProxyMixin.<lambda>2   s    tyy';'; r   c                 L    | j                    xs | j                   j                  S r   )r   closedr   s    r   r<   zFileProxyMixin.closed4   s    99}0		 0 00r   c                 ~    | j                   ryt        | j                  d      r| j                  j                         S y)NFreadableT)r<   hasattrr   r>   r   s    r   r>   zFileProxyMixin.readable8   0    ;;499j)99%%''r   c                     | j                   ryt        | j                  d      r| j                  j                         S dt	        | j                  dd      v S )NFwritablewmoder   )r<   r?   r   rB   getattrr   s    r   rB   zFileProxyMixin.writable?   sE    ;;499j)99%%''gdii444r   c                 ~    | j                   ryt        | j                  d      r| j                  j                         S y)NFseekableT)r<   r?   r   rG   r   s    r   rG   zFileProxyMixin.seekableF   r@   r   c                 ,    t        | j                        S r   )iterr   r   s    r   __iter__zFileProxyMixin.__iter__M   s    DIIr   N)__name__
__module____qualname____doc__propertyr   r   r"   r%   r'   r)   r,   r.   r0   r2   r4   r6   r8   r:   r<   r>   rB   rG   rJ    r   r   r   r      s     78H34F12E34F78H/0D78H78H9:I/0D/0D78H12E;<J1 15r   r   )F)r   r   django.core.exceptionsr   r   r   rP   r   r   <module>rR      s    	  :(3 3r   