
    K}bg\(                        d dl mZ d dlZd dlZ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mZmZ dd	lmZmZmZ  G d
 d          Zd ZdS )    )annotationsN)normpath)Headers)FileWrapper   )
MediaTypes)IsDirectoryErrorMissingFileErrorRedirect
StaticFile)decode_if_byte_stringdecode_path_infoensure_leading_trailing_slashc                      e Zd ZdZdZdZdZdZdZdZ	dZ
dZddZd	 Zed
             ZddZd ZddZd Zd Zd Zd Zed             Zedd            ZddZd Zd Zd Zd ZdS )
WhiteNoisei )autorefreshmax_ageallow_all_originscharset	mimetypesadd_headers_function
index_fileimmutable_file_testF<   Tzutf-8Nc                <   | j         D ]H}	 |                    |          }t          |          }t          | ||           9# t          $ r Y Ew xY w|r8t          dt          |                                          d          d          t          | j	                  | _
        || _        i | _        g | _        | j        du rd| _        t          | j                  s#t#          j        | j                  fd| _        ||                     ||           d S d S )NzUnexpected keyword argument 'r   ')extra_typesTz
index.htmlc                H    t                              |                    S N)boolsearch)pathurlregexs     b/home/e360mart.nyusoft.in/public_html/e360mart_env/lib/python3.11/site-packages/whitenoise/base.py<lambda>z%WhiteNoise.__init__.<locals>.<lambda>J   s    ell3>O>O9P9P     )config_attrspopr   setattrKeyError	TypeErrorlistkeysr   r   media_typesapplicationfilesdirectoriesr   callabler   recompile	add_files)selfr0   rootprefixkwargsattrvaluer$   s          @r%   __init__zWhiteNoise.__init__7   sK   % 	+ 	+D+

4(( .e44dE****	    
  	WUD<O<OPQ<RUUUVVV%$.AAA&
?d""*DO011 	QJt788E'P'P'P'PD$NN4((((( s   A
AAc                   t          |                    dd                    }| j        r|                     |          }n| j                            |          }||                     ||          S |                     |||          S )N	PATH_INFO )r   getr   	find_filer1   r0   serve)r7   environstart_responser"   static_files        r%   __call__zWhiteNoise.__call__N   s    K < <== 	/....KK*....K##G^<<<::k7NCCCr'   c                
   |                      |d         |          }|j         d|j        j         } ||t          |j                             |j        +|                    dt                    } ||j                  S g S )NREQUEST_METHOD zwsgi.file_wrapper)get_responsestatusphraser-   headersfilerA   r   )rF   rD   rE   responsestatus_linefile_wrappers         r%   rC   zWhiteNoise.serveY   s    ++G4D,EwOO!CC8?+ACC{D)9$:$:;;;=$";;':KHHL<...Ir'   c                   t          |d          }t          j                            |          }|                    t          j        j                  t          j        j        z   }t          |          }t          |          }| j        r| j        	                    d||f           d S t          j        
                    |          r|                     ||           d S t          j        d|            d S )NT)
force_textr   zNo directory at: )r   osr"   abspathrstripsepr   r   r2   insertisdirupdate_files_dictionarywarningswarn)r7   r8   r9   s      r%   r6   zWhiteNoise.add_filesd   s    $Td;;;wt$${{27;''"'+5&v...v66 		: ##Af~66666w}}T"" :,,T6:::::8$8899999r'   c                    t          t          |                    }|                                D ]L}|t          |          d          }|                    dd          }||z   }|                     |||           Md S )N\/
stat_cache)dictscantreer.   lenreplaceadd_file_to_dictionary)r7   r8   r9   rb   r"   relative_pathrelative_urlr#   s           r%   r[   z"WhiteNoise.update_files_dictionaryu   s     (4..))
OO%% 	J 	JD T-M(00s;;L<'C''Tj'IIII		J 	Jr'   c                   |                      ||          rd S | j        r|                    d| j        z             rp|d t          | j                            }|                    d          }|                     ||          | j        |<   |                     ||          | j        |<   |}|                     |||          }|| j        |<   d S )Nra   r`   )is_compressed_variantr   endswithre   rW   redirectr1   get_static_file)r7   r#   r"   rb   	index_urlindex_no_slashrF   s          r%   rg   z!WhiteNoise.add_file_to_dictionary   s    %%dz%BB 	F? 	s||C$/,ABB 	3s4?33334I&--c22N"mmC;;DJsO)-~y)Q)QDJ~&C**4*LL%
3r'   c                    | j         s|                    d          rd S |                     |          sd S |                     |          D ]*}	 |                     ||          c S # t
          $ r Y 'w xY wd S Nr`   )r   rl   url_is_canonicalcandidate_paths_for_urlfind_file_at_pathr
   )r7   r#   r"   s      r%   rB   zWhiteNoise.find_file   s     	3<<#4#4 	F$$S)) 	F0055 	 	D--dC88888#   	 	s   A&&
A32A3c              #  
  K   | j         D ]x\  }}|                    |          r^t          j                            ||t          |          d                    }t          j                            ||f          |k    r|V  yd S r   )r2   
startswithrU   r"   joinre   commonprefix)r7   r#   r8   r9   r"   s        r%   rt   z"WhiteNoise.candidate_paths_for_url   s       , 	 	LD&~~f%% w||D#c&kkmm*<==7''t55==JJJ		 	r'   c                    |                      |          rt          |          | j        r|                     ||          S |                     ||          S r   )rk   r
   r   find_file_at_path_with_indexesrn   r7   r"   r#   s      r%   ru   zWhiteNoise.find_file_at_path   s\    %%d++ 	)"4(((? 	366tSAAA''c222r'   c                   |                     d          r;t          j                            || j                  }|                     ||          S |                     d| j        z             rQt          j                            |          r1|                     ||d t          | j                                      S n	 |                     ||          S # t          $ r` t          j                            t          j                            || j                            r|                     ||dz             cY S Y nw xY wt          |          rr   )rl   rU   r"   rx   r   rn   isfilerm   re   r	   r
   r|   s      r%   r{   z)WhiteNoise.find_file_at_path_with_indexes   s=   << 	97<<do66D''c222\\#/00 	9w~~d## H}}S#.ET_1E1E0E.E*FGGGH9++D#666# 9 9 97>>"',,tT_"E"EFF 9==cCi888889 99 t$$$s    C A%E ?E c                x    d| v rdS t          |           }|                     d          r| dk    r|dz  }|| k    S )z
        Check that the URL path is in canonical format i.e. has normalised
        slashes and no path traversal elements
        r_   Fr`   )r   rl   )r#   
normaliseds     r%   rs   zWhiteNoise.url_is_canonical   sN     3;;5c]]
<< 	#JS  r'   c                |    | dd          dv r/| d d         }|t           j                            |          S ||v S dS )N).gz.brF)rU   r"   r~   )r"   rb   uncompressed_paths      r%   rk   z WhiteNoise.is_compressed_variant   sN    9&& $SbS	!w~~&7888(J66ur'   c                   |.t           j                            |          st          |          t	          g           }|                     |||           |                     |||           | j        rd|d<   | j        r|                     |||           t          ||
                                ||dz   |dz   d          S )N*zAccess-Control-Allow-Originr   r   )gzipbr)rb   	encodings)rU   r"   existsr
   r   add_mime_headersadd_cache_headersr   r   r   items)r7   r"   r#   rb   rN   s        r%   rn   zWhiteNoise.get_static_file   s    bgnnT&:&:"4((("++gtS111wc222! 	958G12$ 	:%%gtS999MMOO!#e|4%<@@	
 
 
 	
r'   c                    | j                             |          }|                    d          rdt          | j                  i}ni } |j        dt          |          fi | d S )Nztext/r   zContent-Type)r/   get_typerw   strr   
add_header)r7   rN   r"   r#   
media_typeparamss         r%   r   zWhiteNoise.add_mime_headers   sr    %..t44
  )) 	T\!2!23FFF>3z??EEfEEEEEr'   c                    |                      ||          rd                    | j                  |d<   d S | j        d| j         d|d<   d S d S )Nzmax-age={}, public, immutableCache-Controlmax-age=, public)r   formatFOREVERr   )r7   rN   r"   r#   s       r%   r   zWhiteNoise.add_cache_headers   so    ##D#.. 	I'F'M'M( (GO$$$ \%'H$,'H'H'HGO$$$ &%r'   c                    dS )z
        This should be implemented by sub-classes (see e.g. WhiteNoiseMiddleware)
        or by setting the `immutable_file_test` config option
        F r|   s      r%   r   zWhiteNoise.immutable_file_test   s	    
 ur'   c                    ||dz   k    r|                     d          d         dz   }n&||| j        z   k    rd}nt          d| d|           | j        dd| j         d	i}ni }t	          ||
          S )z
        Return a relative 302 redirect

        We use relative redirects as we don't know the absolute URL the app is
        being hosted under
        r`   z./zCannot handle redirect: z > Nr   r   r   )rN   )splitr   
ValueErrorr   r   )r7   from_urlto_urlri   rN   s        r%   rm   zWhiteNoise.redirect   s     X^###>>#..r2S8LL$/111LLMMMVMMNNN<#&(I4<(I(I(IJGGGg6666r'   )NNr   )__name__
__module____qualname__r   r(   r   r   r   r   r   r   r   r=   rG   staticmethodrC   r6   r[   rg   rB   rt   ru   r{   rs   rk   rn   r   r   r   rm   r   r'   r%   r   r      s        &G	L KG GIJ) ) ) ).	D 	D 	D   \: : : :"J J J
& 
& 
& 
&
 
 
  3 3 3% % % 
! 
! \
!    \
 
 
 
$F F FI I I  7 7 7 7 7r'   r   c              #     K   t          j        |           D ]N}|                                rt          |j                  E d{V  1|j        |                                fV  OdS )zR
    Recurse the given directory yielding (pathname, os.stat(pathname)) pairs
    N)rU   scandiris_dirrd   r"   stat)r8   entrys     r%   rd   rd   	  s~       D!! + +<<>> 	+
++++++++++*ejjll*****	+ +r'   )
__future__r   rU   r4   r\   	posixpathr   wsgiref.headersr   wsgiref.utilr   r/   r   
respondersr	   r
   r   r   string_utilsr   r   r   r   rd   r   r'   r%   <module>r      s   " " " " " " 				 				        # # # # # # $ $ $ $ $ $ # # # # # # P P P P P P P P P P P P         s7 s7 s7 s7 s7 s7 s7 s7l+ + + + +r'   