
    3~h                       U 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 d dl	m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 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& 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.  e.d      Z/ ej`                         Z1da2de3d<   dZ4d+d Z5d,d!Z6d-d"Z7d.d#Z8 ee*d$%      d/d&       Z9 ee,d$%      d0d'       Z:d1d(Z;d)Z<d2d*Z=y)3    )annotationsN)
HTTPStatus)Path)Any)AsyncGenerator)Callable)	Generator)settings)AppDirectoriesFinder)FileSystemFinder)get_finders)FileSystemStorage)ASGIRequest)receiver)Http404)HttpRequest)HttpResponse)StreamingHttpResponse)HttpResponseBase)engines)get_template_directories)
BaseEngine)autoreload_started)BaseReloader)file_changed)get_random_string    zthreading.Timer | Nonereload_timerg?c                     t         t         j                          t        j                  t        t
        j                        a t         j                          y N)r   cancel	threadingTimerRELOAD_DEBOUNCE_TIMEshould_reload_eventsetstart     d/var/www/peopleoo.sandbox-dev.co.uk/venv/lib/python3.12/site-packages/django_browser_reload/views.pytrigger_reload_soonr+   1   s8    ??#79L9P9PQLr)   c            
     R   t        j                         } t               }t        j                         D ]l  }t        |      sddlm} |j                  j                  }t        ||      s8|j                  |j                  D cg c]  }| t        |      z   c}       n |S c c}w )Nr   )FileSystemLoader)r   cwdr&   r   all_is_jinja_backendjinja2r-   envloader
isinstanceupdate
searchpath)r.   itemsbackendr-   r3   fspaths         r*   jinja_template_directoriesr:   :   s    
((*CEE;;= 
K )+##&"23v7H7HIVcDL(IJ
K L Js   B$
c                N    t        d | j                  j                  D              S )zR
    Cautious check for Jinja backend, avoiding import which relies on jinja2
    c              3  X   K   | ]"  }|j                    d |j                   dk(   $ yw).z&django.template.backends.jinja2.Jinja2N)
__module____qualname__).0cs     r*   	<genexpr>z$_is_jinja_backend.<locals>.<genexpr>O   s2       <<.!..)*.VVs   (*)any	__class____mro__)r8   s    r*   r0   r0   K   s*      ""**  r)   c               #     K   t               D ];  } t        | t        t        f      s| j                  j                         E d {    = y 7 wr    )r   r4   r   r   storagesvalues)finders    r*   static_finder_storagesrJ   U   sK     - ,)+;<
 ??))+++,
 	,s   AAAAbrowser_reload)dispatch_uidc                    t               D ]  }| j                  |d        t               D ]'  }| j                  t        |j                        d       ) y )Nz**/*)r:   	watch_dirrJ   r   location)senderkwargs	directorystorages       r*   on_autoreload_startedrT   _   sS    /1 ,	F+, *+ 9g../89r)   c                    | j                   }t               D ]  }||v st                 y t               D ]  }||v st                 y t	               D ]%  }t        |j                        |v st                 y y )NT)parentsdjango_template_directoriesr+   r:   rJ   r   rO   )	file_pathrQ   file_parentstemplate_dirrS   s        r*   on_file_changedr[   h   s     $$L 45 <'! 34 <'! *+   !\1!
 r)   c                \    t        j                  d| i|      }d| dj                         S )z
    Encode an event stream message.

    We distinguish message types with a 'type' inside the 'data' field, rather
    than the 'message' field, to allow the worker to process all messages with
    a single event listener.
    typezdata: z

)jsondumpsencode)type_rQ   	jsonifieds      r*   messagerc      s4     

FE4V45II;d#**,,r)   g      ?c                N   t         j                  s
t               | j                  d      st	        t
        j                        S t        | t              r4t        j                  dk  rt	        dt
        j                  d      S dd}ndd}t         |       d	      }d
|d<   |S )Nztext/event-stream)status)      zASGI requires Django 4.2+z
text/plain)re   content_typec                   K   	 t        j                  t               d {    t        dt               t
        j                         r"t
        j                          t        d       l7 Ow)Nping	versionIdreload)asynciosleep
PING_DELAYrc   
version_idr%   is_setclearr(   r)   r*   event_streamzevents.<locals>.event_stream   sS     mmJ///f
;;&--/'--/!(++ /s   A2A0AA2c               3     K   	 t        dt               t        j                  t              } | r!t        j                          t        d       Qw)Nrj   rk   )timeoutrm   )rc   rq   r%   waitrp   rs   )should_reloads    r*   rt   zevents.<locals>.event_stream   sH     f
;; 3 8 8 8 L '--/!(++ s   AA)rh    zcontent-encoding)returnzAsyncGenerator[bytes, None])rz   zGenerator[bytes, None, None])r
   DEBUGr   acceptsr   r   NOT_ACCEPTABLEr4   r   djangoVERSIONNOT_IMPLEMENTEDr   )requestrt   responses      r*   eventsr      s    >>i??./:#<#<== ';'>>F"+!11) 	,	, %(H
 $&H Or)   )rz   None)rz   z	set[Path])r8   r   rz   bool)rz   z(Generator[FileSystemStorage, None, None])rP   r   rQ   r   rz   r   )rX   r   rQ   r   rz   zbool | None)ra   strrQ   r   rz   bytes)r   r   rz   r   )>
__future__r   rn   r^   r"   httpr   pathlibr   typingr   r   r   r	   r~   django.confr
   "django.contrib.staticfiles.findersr   r   r   django.core.files.storager   django.core.handlers.asgir   django.dispatchr   django.httpr   r   r   r   django.http.responser   django.templater   django.template.autoreloadr   rW   django.template.backends.baser   django.utils.autoreloadr   r   r   django.utils.cryptor   rq   Eventr%   r   __annotations__r$   r+   r:   r0   rJ   rT   r[   rc   rp   r   r(   r)   r*   <module>r      s    "       !      C ? : 7 1 $  # $ - 1 # 5 6 0 0 1
 r"
 &ioo' '+$ + ", 

+;<9 =9 
,%56 74	- 
-r)   