
    g                         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 d dlmZ d dlmZ d d	lmZmZ d d
lmZ  G d d      Z G d dee      Z G d dee      Zy)    )urlparse)url2pathname)sync_to_async)settings)utils)serve)ASGIHandler)response_for_exception)WSGIHandlerget_path_info)Http404c                   >    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 Zy
)StaticFilesHandlerMixinz8
    Common methods used by WSGI and ASGI handlers.
    Tc                      y N selfs    {/var/www/python.vincentserveurtest.ovh/public_html/venv/lib/python3.12/site-packages/django/contrib/staticfiles/handlers.pyload_middlewarez'StaticFilesHandlerMixin.load_middleware   s     	    c                 J    t        j                          t        j                  S r   )r   check_settingsr   
STATIC_URLr   s    r   get_base_urlz$StaticFilesHandlerMixin.get_base_url   s    """r   c                 b    |j                  | j                  d         xr | j                  d    S )z
        Check if the path should be handled. Ignore the path if:
        * the host is provided as part of the base_url
        * the request's path isn't under the media path (or equal)
              )
startswithbase_url)r   paths     r   _should_handlez&StaticFilesHandlerMixin._should_handle!   s-     t}}Q/0Iq9I5IIr   c                 T    |j                  | j                  d         }t        |      S )zW
        Return the relative path to the media file on disk for the given URL.
        r   )removeprefixr    r   )r   urlrelative_urls      r   	file_pathz!StaticFilesHandlerMixin.file_path)   s(     ''a(89L))r   c                 P    t        || j                  |j                        d      S )zServe the request path.T)insecure)r   r'   r!   )r   requests     r   r   zStaticFilesHandlerMixin.serve0   s    WdnnW\\:TJJr   c                 j    	 | j                  |      S # t        $ r}t        ||      cY d }~S d }~ww xY wr   )r   r   r
   r   r*   es      r   get_responsez$StaticFilesHandlerMixin.get_response4   s3    	6::g&& 	6)'155	6s    	2-22c                    K   	  t        | j                  d      |       d {   S 7 # t        $ r+} t        t        d      ||       d {  7  cY d }~S d }~ww xY ww)NF)thread_sensitive)r   r   r   r
   r,   s      r   get_response_asyncz*StaticFilesHandlerMixin.get_response_async:   s_     	JtzzEJ7SSSS 	V'=PUV   	sH   A" + )+ A"+ 	AAAAAA"AA"N)__name__
__module____qualname____doc__handles_filesr   r   r"   r'   r   r.   r1   r   r   r   r   r      s3     M
#J*K6r   r   c                   ,     e Zd ZdZ fdZ fdZ xZS )StaticFilesHandlerz
    WSGI middleware that intercepts calls to the static files directory, as
    defined by the STATIC_URL setting, and serves those files.
    c                 l    || _         t        | j                               | _        t        |           y r   )applicationr   r   r    super__init__)r   r:   	__class__s     r   r<   zStaticFilesHandler.__init__I   s+    & !2!2!45r   c                 |    | j                  t        |            s| j                  ||      S t        |   ||      S r   )r"   r   r:   r;   __call__)r   environstart_responser=   s      r   r?   zStaticFilesHandler.__call__N   s;    ""=#9:##G^<<w88r   )r2   r3   r4   r5   r<   r?   __classcell__r=   s   @r   r8   r8   C   s    

9 9r   r8   c                   2     e Zd ZdZd Z fdZ fdZ xZS )ASGIStaticFilesHandlerz
    ASGI application which wraps another and intercepts requests for static
    files, passing them off to Django's static file serving.
    c                 N    || _         t        | j                               | _        y r   )r:   r   r   r    )r   r:   s     r   r<   zASGIStaticFilesHandler.__init__Z   s    & !2!2!45r   c                    K   |d   dk(  r-| j                  |d         rt        | 	  |||       d {   S | j                  |||       d {   S 7 7 w)Ntypehttpr!   )r"   r;   r?   r:   )r   scopereceivesendr=   s       r   r?   zASGIStaticFilesHandler.__call__^   s_     =F"t':':5='I )%$???%%eWd;;; @;s!   1AAAAAAc                    K   t         |   |       d {   }|j                  j                  |j                         |j
                  r)|j                  s|j                  fd} |       |_        |S 7 `w)Nc                 `   K    t        t                     d {   D ]  } |  	 y 7 wr   )r   list)part	_iterators    r   awrapperz;ASGIStaticFilesHandler.get_response_async.<locals>.awrappern   s)     "5-"5i"@@@DJ As   .,.)r;   r1   _resource_closersappendclose	streamingis_asyncstreaming_content)r   r*   responserR   rQ   r=   s       @r   r1   z)ASGIStaticFilesHandler.get_response_asyncg   sh     3G<<""))'--8h&7&7 22I *2H& =s   A:A8A!A:)r2   r3   r4   r5   r<   r?   r1   rB   rC   s   @r   rE   rE   T   s    
6< r   rE   N)urllib.parser   urllib.requestr   asgiref.syncr   django.confr   django.contrib.staticfilesr    django.contrib.staticfiles.viewsr   django.core.handlers.asgir	   django.core.handlers.exceptionr
   django.core.handlers.wsgir   r   django.httpr   r   r8   rE   r   r   r   <module>rd      sL    ! ' &   , 2 1 A @ 1 1h90+ 9"4k r   