Ë
    ¹ûàgƒ_  ã                   óL  — d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZ d dlmZ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  e«       Z  e«       Z!dZ" ejF                  d«      Z$g Z%da&	 d dl'Z'	 d dl)Z)d„ Z*d„ Z+d„ Z,d„ Z-d„ Z.d„ Z/ ed¬«      d„ «       Z0 ed¬«      d„ «       Z1d„ Z2d„ Z3d„ Z4d„ Z5 G d„ d«      Z6 G d„ de6«      Z7 G d „ d!e8«      Z9 G d"„ d#e6«      Z:d$„ Z;d%„ Z<d&„ Z=y# e($ r dZ'Y Œw xY w# e($ r dZ)Y Œ‡w xY w)'é    N)Údefaultdict)Ú	lru_cacheÚwraps)ÚPath)Ú
ModuleType)Úzipimporter)Úapps)Úrequest_finished)ÚSignal)Úcached_property)Úget_version_tupleÚRUN_MAINzdjango.utils.autoreloadc                 ó8   — | j                   j                  d«      S )z7Return True if the given module is nested under Django.zdjango.)Ú__name__Ú
startswith)Úmodules    úU/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/django/utils/autoreload.pyÚis_django_moduler   1   s   € à�?‰?×%Ñ% iÓ0Ð0ó    c                 ór   — t        t        j                  «      j                  t        | «      j                  v S )z:Return True if the given file path is nested under Django.)r   ÚdjangoÚ__file__ÚparentÚparents)Úpaths    r   Úis_django_pathr   6   s&   € ä”—‘Ó ×'Ñ'¬4°«:×+=Ñ+=Ð=Ð=r   c                 ó.   ‡ — t        ‰ «      ˆ fd„«       }|S )Nc                  ó  •— 	  ‰| i |¤Ž y # t         $ rr t        j                  «       at        \  }}}t	        |dd «      €t        j                  |«      d   d   }n|j                  }|t        vrt        j                  |«       ‚ w xY w)NÚfilenameéÿÿÿÿr   )
Ú	ExceptionÚsysÚexc_infoÚ
_exceptionÚgetattrÚ	tracebackÚ
extract_tbr   Ú_error_filesÚappend)ÚargsÚkwargsÚetÚevÚtbr   Úfns         €r   Úwrapperzcheck_errors.<locals>.wrapper<   s…   ø€ ð	Ù�Ð˜ÓøÜò 	ÜŸ™›ˆJä#‰JˆB��Bä�r˜: tÓ,Ð4ä$×/Ñ/°Ó3°BÑ7¸Ñ:‘àŸ;™;�àœ|Ñ+Ü×#Ñ# HÔ-àð	ús
   ƒ ŒA;B)r   )r/   r0   s   ` r   Úcheck_errorsr1   ;   s    ø€ Ü
ˆ2ƒYóó ðð( €Nr   c                  ó"   — t         �	t         d   ‚y )Né   )r$   © r   r   Úraise_last_exceptionr5   T   s   € äÐÜ˜‰mÐð r   c                  ó6  — t         rt        j                  j                  «       syt        j                  t        j                  «      } | d   t         j
                  z  s»| dxx   t         j
                  z  cc<   t        t        d«      r3t        j                  t        j                  t        j                  «      }nd}t        j                  t        j                  t         j                  | «       |�%t        j                  t        j                  |«       yyy)z}
    Ensure that echo mode is enabled. Some tools such as PDB disable
    it which causes usability issues after reload.
    Né   ÚSIGTTOU)Útermiosr"   ÚstdinÚisattyÚ	tcgetattrÚECHOÚhasattrÚsignalr8   ÚSIG_IGNÚ	tcsetattrÚTCSANOW)Ú	attr_listÚold_handlers     r   Úensure_echo_onrE   Z   s²   € õ
 œ#Ÿ)™)×*Ñ*Ô,ØÜ×!Ñ!¤#§)¡)Ó,€IØ�Q‰<œ'Ÿ,™,Ò&Ø�!‹œŸ™Ñ$‹Ü”6˜9Ô%Ü Ÿ-™-¬¯©¼¿¹ÓG‰KàˆKÜ×Ñœ#Ÿ)™)¤W§_¡_°iÔ@ØÐ"Ü�M‰Mœ&Ÿ.™.¨+Õ6ð #ð 'r   c                  óÎ   — t        t        j                  «      } t        d„ t	        t        j                  j
                  | «      D «       «      }t        |t        t        «      «      S )Nc              3   óT   K  — | ]   }t        |t        j                  «      s|–— Œ" y ­w©N)Ú
isinstanceÚweakrefÚ
ProxyTypes)Ú.0Úms     r   ú	<genexpr>z/iter_all_python_module_files.<locals>.<genexpr>s   s(   è ø€ ò àÜ˜!œW×/Ñ/Ô0ô 	
ñùs   ‚&()	Úsortedr"   ÚmodulesÚtupleÚmapÚ__getitem__Úiter_modules_and_filesÚ	frozensetr(   )ÚkeysrP   s     r   Úiter_all_python_module_filesrW   m   sN   € ô
 ”#—+‘+Ó€DÜñ ä”S—[‘[×,Ñ,¨dÓ3ôó €Gô
 " '¬9´\Ó+BÓCÐCr   r3   )Úmaxsizec                 óä  — g }| D ]½  }t        |t        «      sŒ|j                  dv r(t        |d«      r|j	                  |j
                  «       ŒJt        |dd«      €ŒX|j                  }|j                  sŒqt        |j                  t        «      r|j                  j                  n|j                  }|j	                  |«       Œ¿ t        «       }t        j                  ||«      D ]R  }|sŒt!        |«      }	 |j#                  «       sŒ#	 |j+                  «       j-                  «       }
|j/                  |
«       ŒT t1        |«      S # t$        $ r!}	t&        j)                  d|	|«       Y d}	~	Œ…d}	~	ww xY w)z1Iterate through all modules needed to be watched.)Ú__main__Ú__mp_main__r   Ú__spec__Nz%"%s" raised when resolving path: "%s")rI   r   r   r>   r)   r   r%   r\   Úhas_locationÚloaderr   ÚarchiveÚoriginÚsetÚ	itertoolsÚchainr   ÚexistsÚ
ValueErrorÚloggerÚdebugÚresolveÚabsoluteÚaddrU   )rP   Úextra_filesÚsys_file_pathsr   Úspecr`   Úresultsr   r   ÚeÚresolved_paths              r   rT   rT   {   sU  € ð €NØò *ˆô ˜&¤*Ô-ØØ�?‰?Ð9Ñ9ô
 �v˜zÔ*Ø×%Ñ% f§o¡oÔ6ØÜ�6˜: tÓ,Ð4ØØ�‰ˆð ×Óô ˜dŸk™k¬;Ô7ð —‘×#Ò#à—[‘[ð ð
 ×!Ñ! &Õ)ð3*ô6 ‹e€GÜ—O‘O N°KÓ@ò #ˆÙØÜ�H‹~ˆð	Ø—;‘;”=ð ð !ð Ÿ™›×/Ñ/Ó1ˆØ�‰�MÕ"ð#ô �WÓÐøô ò 	ä�L‰LÐ@À!ÀTÔJÜûð	ús   Ã7EÅ	E/ÅE*Å*E/c                 óø   ‡— t        | D �cg c]  }|j                  ‘Œ c}t        d¬«      }i }|D ]-  }|}|D ]  }|j                  |i «      }Œ |j	                  «        Œ/ ˆfd„Št         ‰|d«      «      S c c}w )a  
    Return a tuple of common roots that are shared between the given paths.
    File system watchers operate on directories and aren't cheap to create.
    Try to find the minimum set of directories to watch that encompass all of
    the files that need to be watched.
    T)ÚkeyÚreversec              3   ó†   •K  — | j                  «       D ]  \  }} ‰|||fz   «      E d {  –—†  Œ | st        |Ž –— y y 7 Œ­wrH   )Úitemsr   )Únoder   ÚprefixÚchildÚ_walks       €r   ry   zcommon_roots.<locals>._walkÃ   sN   øè ø€ Ø!ŸZ™Z›\ò 	6‰MˆF�EÙ˜U D¨F¨9Ñ$4Ó5×5Ñ5ð	6áÜ˜�+Óð ð 6ús   ƒ'Aª?«Ar4   )rO   ÚpartsÚlenÚ
setdefaultÚclearrQ   )ÚpathsÚxÚ
path_partsÚtreeÚchunksrv   Úchunkry   s          @r   Úcommon_rootsr„   ­   s‚   ø€ ô ¨%Ö0 Q˜Ÿ›Ò0´cÀ4ÔH€JØ€DØò ˆØˆàò 	.ˆEØ—?‘? 5¨"Ó-‰Dð	.ð 	�
‰
�ðôô ‘�t˜R“Ó!Ð!ùò# 1s   ‹A7c               #   óð   K  — t         j                  D ]_  } t        | «      } | j                  «       sŒ| j	                  «       j                  «       }|j                  «       r|j                  –— Œ\|–— Œa y­w)zZ
    Yield absolute directories from sys.path, ignoring entries that don't
    exist.
    N)r"   r   r   rd   rh   ri   Úis_filer   )r   rp   s     r   Úsys_path_directoriesr‡   Ì   sb   è ø€ ô
 —‘ò 	 ˆÜ�D‹zˆØ�{‰{Œ}ØØŸ™›×/Ñ/Ó1ˆà× Ñ Ô"Ø×&Ñ&Ó&àÓñ	 ùs   ‚A4A6c                  óâ  — ddl } t        t        j                  d   «      }|j	                  d«      }t        j
                  gt        j                  D �cg c]  }d|z  ‘Œ	 c}z   }t        j                  j                  dv r4|j                  d„ t        j                  j                  «       D «       «       t        | dd«      �Š|j                  «       sz| j                  }|j                  dk(  s|j                  j                  d	«      r|j                   r|j                   }n|j                  }|d
|gz  }|t        j                  dd z  }|S |j                  «       s{|j                  «       r|gt        j                  dd ¢S |j#                  d|j                  z  «      }|j                  «       rg |¢|‘t        j                  dd ¢S t%        d|z  «      ‚|t        j                  z  }|S c c}w )z¯
    Return the executable. This contains a workaround for Windows if the
    executable is reported to not have the .exe extension which can cause bugs
    on reloading.
    r   Nz.exez-W%s)ÚcpythonÚpypyc              3   óD   K  — | ]  \  }}|d u rd|› �nd|› d|› �–— Œ y­w)Tz-Xú=Nr4   )rL   rr   Úvalues      r   rN   z&get_child_arguments.<locals>.<genexpr>ê   s:   è ø€ ò 
á��Uð   4™-ˆb��‰J¨r°#°°a¸°wÐ-?Ó?ñ
ùs   ‚ r\   rZ   z	.__main__z-mr3   z%s-script.pyzScript %s does not exist.)rZ   r   r"   ÚargvÚwith_suffixÚ
executableÚwarnoptionsÚimplementationÚnameÚextendÚ	_xoptionsru   r%   rd   r\   Úendswithr   Ú	with_nameÚRuntimeError)rZ   Ú	py_scriptÚexe_entrypointÚor*   rm   r“   Úscript_entrypoints           r   Úget_child_argumentsr�   Ý   s±  € ó ä”S—X‘X˜a‘[Ó!€IØ×*Ñ*¨6Ó2€Nä�N‰NÐ´3·?±?ÖC¨a˜v¨›zÒCÑC€DÜ
×Ñ×ÑÐ"5Ñ5Ø�‰ñ 
ä!Ÿm™m×1Ñ1Ó3ô
ô 	
ô ˆx˜ TÓ*Ð6¸~×?TÑ?TÔ?VØ× Ñ ˆØ�I‰I˜Ò# t§y¡y×'9Ñ'9¸+Ô'FÈDÏKÊKØ—;‘;‰Dà—9‘9ˆDØ��t�ÑˆØ”—‘˜˜�Ñˆð €Kð ×ÑÔð × Ñ Ô"à"Ð2¤S§X¡X¨a¨b \Ð2Ð2Ø%×/Ñ/°ÀÇÁÑ0OÓPÐØ×#Ñ#Ô%à<�TÐ<Ð,Ð<¬s¯x©x¸¸¨|Ð<Ð<ÜÐ6¸ÑBÓCÐCà”—‘ÑˆØ€Kùò= Ds   ÁG,c                 óZ   — t         j                  d| «       t        j                  d«       y )Nz%s changed, reloading.r7   )rf   Úinfor"   Úexit)r   s    r   Útrigger_reloadr¡   	  s   € Ü
‡K�KÐ(¨(Ô3Ü‡H�HˆQ…Kr   c                  ó´   — i t         j                  ¥t        di¥} t        «       }	 t	        j
                  || d¬«      }|j                  dk7  r|j                  S Œ4)NÚtrueF)ÚenvÚ	close_fdsr7   )ÚosÚenvironÚDJANGO_AUTORELOAD_ENVr�   Ú
subprocessÚrunÚ
returncode)Únew_environr*   Úps      r   Úrestart_with_reloaderr®     sP   € Ø?”R—Z‘ZÐ?Ô!6¸Ñ?€KÜÓ €DØ
Ü�N‰N˜4 [¸EÔBˆØ�<‰<˜1ÒØ—<‘<Ðð r   c                   ód   — e Zd Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Z	e
d„ «       Zd	„ Zed
„ «       Zd„ Zy)ÚBaseReloaderc                 ó|   — t        «       | _        t        t         «      | _        t	        j
                  «       | _        y rH   )ra   rk   r   Údirectory_globsÚ	threadingÚEventÚ_stop_condition©Úselfs    r   Ú__init__zBaseReloader.__init__  s(   € Ü›5ˆÔÜ*¬3Ó/ˆÔÜ(Ÿ™Ó0ˆÕr   c                 óô   — t        |«      }	 |j                  «       }t        j	                  d||«       | j
                  |   j                  |«       y # t        $ r t        j	                  d|d¬«       Y y w xY w)Nz6Unable to watch directory %s as it cannot be resolved.T)r#   zWatching dir %s with glob %s.)r   ri   ÚFileNotFoundErrorrf   rg   r²   rj   )r·   r   Úglobs      r   Ú	watch_dirzBaseReloader.watch_dir  sw   € Ü�D‹zˆð	Ø—=‘=“?ˆDô 	�‰Ð4°d¸DÔAØ×Ñ˜TÑ"×&Ñ& tÕ,øô !ò 	Ü�L‰LØHØØð ô ñ
 ð	ús   �A Á!A7Á6A7c              #   óî   K  — t        «       E d{  –—†  | j                  E d{  –—†  |rC| j                  j                  «       D ]%  \  }}|D ]  }|j	                  |«      E d{  –—†  Œ Œ' yy7 Œ^7 ŒL7 Œ­w)zq
        Yield all files that need to be watched, including module files and
        files within globs.
        N)rW   rk   r²   ru   r»   )r·   Úinclude_globsÚ	directoryÚpatternsÚpatterns        r   Úwatched_fileszBaseReloader.watched_files+  s~   è ø€ ô
 0Ó1×1Ð1Ø×#Ñ#×#Ð#ÙØ'+×';Ñ';×'AÑ'AÓ'Cò 7Ñ#�	˜8Ø'ò 7�GØ(Ÿ~™~¨gÓ6×6Ñ6ñ7ñ7ð ð 	2øØ#øð 7ús1   ‚A5�A/‘A5¤A1¥?A5Á$A3Á%A5Á1A5Á3A5c                 óª   — |j                  «       r.|j                  j                  d¬«      ry|j                  «       rŒ.t        j	                  d«       y)a×  
        Wait until Django reports that the apps have been loaded. If the given
        thread has terminated before the apps are ready, then a SyntaxError or
        other non-recoverable error has been raised. In that case, stop waiting
        for the apps_ready event and continue processing.

        Return True if the thread is alive and the ready event has been
        triggered, or False if the thread is terminated while waiting for the
        event.
        çš™™™™™¹?©ÚtimeoutTz8Main Django thread has terminated before apps are ready.F)Úis_aliveÚready_eventÚwaitrf   rg   )r·   Úapp_regÚdjango_main_threads      r   Úwait_for_apps_readyz BaseReloader.wait_for_apps_ready7  sJ   € ð !×)Ñ)Ô+Ø×"Ñ"×'Ñ'°Ð'Ô4Øð !×)Ñ)Õ+ô �L‰LÐSÔTØr   c                 ó  — t         j                  d«       | j                  t        |«       ddlm} 	  |«       j                   t         j                  d«       t        j                  | ¬«       | j                  «        y # t        $ r Y ŒGw xY w)NzWaiting for apps ready_event.r   )Úget_resolverz>Apps ready_event triggered. Sending autoreload_started signal.)Úsender)rf   rg   rÌ   r	   Údjango.urlsrÎ   Úurlconf_moduler!   Úautoreload_startedÚsendÚrun_loop)r·   rË   rÎ   s      r   rª   zBaseReloader.runI  sr   € Ü�‰Ð4Ô5Ø× Ñ ¤Ð'9Ô:Ý,ð	Ù‹N×)Ò)ô
 	�‰ÐUÔVÜ×Ñ tÐÔ,Ø�‰�øô ò 	ñ ð	ús   ³B  Â 	BÂBc                 ó¬   — | j                  «       }| j                  s	 t        |«       | j                  sŒ| j	                  «        y # t        $ r Y Œw xY wrH   )ÚtickÚshould_stopÚnextÚStopIterationÚstop)r·   Útickers     r   rÔ   zBaseReloader.run_loopZ  sL   € Ø—‘“ˆØ×"Ò"ðÜ�V”ð ×"Ó"ð
 	�	‰	�øô !ò Ùðús   žA Á	AÁAc                 ó   — t        d«      ‚)aX  
        This generator is called in a loop from run_loop. It's important that
        the method takes care of pausing or otherwise waiting for a period of
        time. This split between run_loop() and tick() is to improve the
        testability of the reloader implementations by decoupling the work they
        do from the loop.
        z!subclasses must implement tick().©ÚNotImplementedErrorr¶   s    r   rÖ   zBaseReloader.tickc  s   € ô "Ð"EÓFÐFr   c                 ó   — t        d«      ‚)Nz/subclasses must implement check_availability().rÝ   ©Úclss    r   Úcheck_availabilityzBaseReloader.check_availabilitym  s   € ä!Ð"SÓTÐTr   c                 óœ   — t         j                  | |¬«      }t        j                  d||«       t	        d„ |D «       «      st        |«       y y )N)rÏ   Ú	file_pathz+%s notified as changed. Signal results: %s.c              3   ó&   K  — | ]	  }|d    –— Œ y­w)r3   Nr4   )rL   Úress     r   rN   z3BaseReloader.notify_file_changed.<locals>.<genexpr>t  s   è ø€ Ò-˜c�3�q•6Ñ-ùs   ‚)Úfile_changedrÓ   rf   rg   Úanyr¡   )r·   r   rn   s      r   Únotify_file_changedz BaseReloader.notify_file_changedq  sC   € Ü×#Ñ#¨4¸4Ð#Ó@ˆÜ�‰ÐBÀDÈ'ÔRÜÑ- WÔ-Ô-Ü˜4Õ ð .r   c                 ó6   — | j                   j                  «       S rH   )rµ   Úis_setr¶   s    r   r×   zBaseReloader.should_stopx  s   € à×#Ñ#×*Ñ*Ó,Ð,r   c                 ó8   — | j                   j                  «        y rH   )rµ   ra   r¶   s    r   rÚ   zBaseReloader.stop|  s   € Ø×Ñ× Ñ Õ"r   N)T)r   Ú
__module__Ú__qualname__r¸   r¼   rÂ   rÌ   rª   rÔ   rÖ   Úclassmethodrâ   ré   Úpropertyr×   rÚ   r4   r   r   r°   r°     sZ   „ ò1ò
-ó
7òò$ò"òGð ñUó ðUò!ð ñ-ó ð-ó#r   r°   c                   ó,   — e Zd ZdZd„ Zd„ Zed„ «       Zy)ÚStatReloaderr3   c              #   óF  K  — i }	 | j                  «       D ]d  \  }}|j                  |«      }|||<   |€t        j                  d||«       Œ6||kD  sŒ<t        j                  d|||«       | j	                  |«       Œf t        j                  | j                  «       d –— Œ›­w)Nz File %s first seen with mtime %sz-File %s previous mtime: %s, current mtime: %s)Úsnapshot_filesÚgetrf   rg   ré   ÚtimeÚsleepÚ
SLEEP_TIME)r·   ÚmtimesÚfilepathÚmtimeÚold_times        r   rÖ   zStatReloader.tickƒ  s¦   è ø€ ØˆØØ#'×#6Ñ#6Ó#8ò 7‘�˜%Ø!Ÿ:™: hÓ/�Ø#(��xÑ ØÐ#Ü—L‘LÐ!CÀXÈuÔUØØ˜XÓ%Ü—L‘LØGØ Ø Øô	ð ×,Ñ,¨XÕ6ð7ô �J‰J�t—‘Ô'Ûð# ùs   ‚AB!ÁAB!c              #   óÖ   K  — t        «       }| j                  «       D ]9  }||v rŒ	 |j                  «       j                  }|j                  |«       ||f–— Œ; y # t        $ r Y ŒHw xY w­wrH   )ra   rÂ   ÚstatÚst_mtimeÚOSErrorrj   )r·   Ú
seen_filesÚfilerû   s       r   rô   zStatReloader.snapshot_files˜  sq   è ø€ ä“Uˆ
Ø×&Ñ&Ó(ò 		ˆDØ�zÑ!ØðØŸ	™	›×,Ñ,�ð �N‰N˜4Ô Ø˜�+Óñ		øô
 ò áðüs(   ‚#A)¦AÁ A)Á	A&Á#A)Á%A&Á&A)c                  ó   — y)NTr4   rà   s    r   râ   zStatReloader.check_availability¦  s   € àr   N)r   rí   rî   rø   rÖ   rô   rï   râ   r4   r   r   rò   rò   €  s%   „ Ø€Jòò*ð ñó ñr   rò   c                   ó   — e Zd Zy)ÚWatchmanUnavailableN)r   rí   rî   r4   r   r   r  r  «  s   „ Ør   r  c                   óœ   ‡ — e Zd Zˆ fd„Zed„ «       Zd„ Zed„ «       Zd„ Z	d„ Z
d„ Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Zˆ fd„Zdd„Zed„ «       Zˆ xZS )ÚWatchmanReloaderc                 óØ   •— t        t        «      | _        t        j                  «       | _        t        t        j                  j                  dd«      «      | _
        t        ‰| �1  «        y )NÚDJANGO_WATCHMAN_TIMEOUTé   )r   ra   Úrootsr³   r´   Úprocessed_requestÚintr¦   r§   rõ   Úclient_timeoutÚsuperr¸   ©r·   Ú	__class__s    €r   r¸   zWatchmanReloader.__init__°  sF   ø€ Ü ¤Ó%ˆŒ
Ü!*§¡Ó!2ˆÔÜ!¤"§*¡*§.¡.Ð1JÈAÓ"NÓOˆÔÜ‰ÑÕr   c                 óB   — t        j                  | j                  ¬«      S )NrÅ   )Ú
pywatchmanÚclientr  r¶   s    r   r  zWatchmanReloader.client¶  s   € ä× Ñ ¨×)<Ñ)<Ô=Ð=r   c                 ó”  — |j                  «       s=|j                  j                  «       st        j                  d|«       y |j                  }| j                  j                  dt        |j                  «       «      «      }d|v rt        j                  d|d   «       t        j                  d|«       |d   |j                  d«      fS )Nz>Unable to watch root dir %s as neither it or its parent exist.zwatch-projectÚwarningzWatchman warning: %sz!Watchman watch-project result: %sÚwatchÚrelative_path)
rd   r   rf   r  r  ÚqueryÚstrri   rg   rõ   )r·   ÚrootÚresults      r   Ú_watch_rootzWatchmanReloader._watch_rootº  s¡   € ð �{‰{Œ}Ø—;‘;×%Ñ%Ô'Ü—‘ØTØôð Ø—;‘;ˆDØ—‘×"Ñ" ?´C¸¿¹»Ó4HÓIˆØ˜ÑÜ�N‰NÐ1°6¸)Ñ3DÔEÜ�‰Ð8¸&ÔAØ�g‰ §
¡
¨?Ó ;Ð;Ð;r   c                 ó@   — | j                   j                  d|«      d   S )NÚclock)r  r  )r·   r  s     r   Ú
_get_clockzWatchmanReloader._get_clockÒ  s   € à�{‰{× Ñ  ¨$Ó/°Ñ8Ð8r   c                 óì   — | j                  |«      \  }}ddddgddgg|g}|dg| j                  |«      ddœ}|r||d	<   t        j                  d
|||«       | j                  j                  d|||«       y )NÚallofÚanyofÚtypeÚfÚlr“   T)Ú
expressionÚfieldsÚsinceÚdedup_resultsÚrelative_rootz8Issuing watchman subscription %s, for root %s. Query: %sÚ	subscribe)r  r   rf   rg   r  r  )r·   r¿   r“   r'  r  Úrel_pathÚonly_files_expressionr  s           r   Ú
_subscribezWatchmanReloader._subscribeÖ  s™   € Ø×)Ñ)¨)Ó4‰ˆˆhð Ø�v˜s�m f¨c ]Ð3Øð!
Ðð 0Ø�hØ—_‘_ TÓ*Ø!ñ	
ˆñ Ø%-ˆE�/Ñ"Ü�‰ØFØØØô		
ð 	�‰×Ñ˜+ t¨T°5Õ9r   c                 óJ  — |j                  «       sp|j                  j                  «       st        j                  d|«       y d|j                  z  }|D �cg c]  }|j                  ›d|›�‘Œ }}|j                  }d|dg}nd}d|g}| j                  ||›d|›�|«       y c c}w )Nú?Unable to watch directory %s as neither it or its parent exist.zfiles-parent-%sú/r“   Ú	wholenameÚfilesú:)rd   r   rf   r  r“   r/  )r·   r¿   Ú	filenamesrw   r   r'  s         r   Ú_subscribe_dirzWatchmanReloader._subscribe_dirï  s¢   € Ø×ÑÔ!Ø×#Ñ#×*Ñ*Ô,Ü—‘ØUØôð Ø&¨¯©Ñ7ˆFØNWÖXÀ( I§N£N±HÒ=ÐXˆIÐXØ!×(Ñ(ˆIØ  )¨[Ð9‰JàˆFØ  )Ð,ˆJØ�‰˜	ªf±iÐ#@À*ÕMùò Ys   ÁB c                 ór  — d}|j                  «       sj|j                  j                  «       st        j                  d|«       yd|j                  z  }|D �cg c]  }|j                  ›d|›�‘Œ }}|j                  }dg}|D ]  }|j                  d|dg«       Œ | j                  ||›d	|›�|«       yc c}w )
a¢  
        Watch a directory with a specific glob. If the directory doesn't yet
        exist, attempt to watch the parent directory and amend the patterns to
        include this. It's important this method isn't called more than one per
        directory when updating all subscriptions. Subsequent calls will
        overwrite the named subscription, so it must include all possible glob
        expressions.
        r»   r1  Nzglob-parent-%sr2  r#  Úmatchr3  r5  )rd   r   rf   r  r“   r)   r/  )r·   r¿   rÀ   rw   rÁ   r'  s         r   Ú_watch_globzWatchmanReloader._watch_glob   s¹   € ð ˆØ×ÑÔ!Ø×#Ñ#×*Ñ*Ô,Ü—‘ØUØôð Ø%¨	¯©Ñ6ˆFØKSÖTÀ 9§>£>±7Ò;ÐTˆHÐTØ!×(Ñ(ˆIà�Yˆ
Øò 	?ˆGØ×Ñ˜w¨°Ð=Õ>ð	?à�‰˜	ªf±iÐ#@À*ÕMùò Us   ÁB4c                 ó¼   — | j                   j                  «       }|D �cg c]  }|j                  ‘Œ }}t        t	        «       «      }t        g |¢|¢|¢­«      S c c}w rH   )r²   rV   r   Úlistr‡   rU   )r·   rÂ   Úextra_directoriesr%  Úwatched_file_dirsÚ	sys_pathss         r   Úwatched_rootszWatchmanReloader.watched_roots  s_   € Ø ×0Ñ0×5Ñ5Ó7ÐØ/<Ö=¨!˜QŸX›XÐ=ÐÐ=ÜÔ-Ó/Ó0ˆ	ÜÐMÐ,ÐMÐ/@ÐMÀ9ÑMÓNÐNùò >s   ŸAc                 óX  — t        | j                  d¬«      «      }t        | j                  |«      «      }t        j                  dt        |«      «       t        j                  d|«       t        |«      D ]  }| j                  |«       Œ | j                  j                  «       D ]  \  }}| j                  ||«       Œ t        |d„ ¬«      }t        j                  |d„ ¬«      D ]=  \  }}| j                  ||D �cg c]  }t        |j!                  |«      «      ‘Œ c}«       Œ? y c c}w )NF)r¾   zWatching %s fileszFound common roots: %sc                 ó   — | j                   S rH   ©r   ©r­   s    r   ú<lambda>z2WatchmanReloader._update_watches.<locals>.<lambda>+  s
   € ¸1¿8¹8€ r   )rr   c                 ó   — | j                   S rH   rC  rD  s    r   rE  z2WatchmanReloader._update_watches.<locals>.<lambda>,  s
   € ÈaÏhÉh€ r   )r<  rÂ   r„   r@  rf   rg   r{   rO   r  r²   ru   r:  rb   Úgroupbyr7  r  Úrelative_to)	r·   rÂ   Úfound_rootsr  r¿   rÀ   Úsorted_filesÚgroupr­   s	            r   Ú_update_watchesz WatchmanReloader._update_watches   s
  € Ü˜T×/Ñ/¸eÐ/ÓDÓEˆÜ" 4×#5Ñ#5°mÓ#DÓEˆÜ�‰Ð(¬#¨mÓ*<Ô=Ü�‰Ð-¨{Ô;ä˜;Ó'ò 	#ˆDØ×Ñ˜TÕ"ð	#à#'×#7Ñ#7×#=Ñ#=Ó#?ò 	2ÑˆI�xØ×Ñ˜Y¨Õ1ð	2ô ˜mÑ1CÔDˆÜ )× 1Ñ 1°,ÑDVÔ Wò 	ÑˆI�uà×ÑØÀ5ÖI¸aœC §¡¨iÓ 8Õ9ÒIõñ	ùò Js   Ã<!D'c                 óv   — 	 | j                  «        y # t        $ r}| j                  |«      r‚ Y d }~y d }~ww xY wrH   )rL  r!   Úcheck_server_status)r·   Úexs     r   Úupdate_watcheszWatchmanReloader.update_watches2  s9   € ð	Ø× Ñ Õ"øÜò 	à×'Ñ'¨Ô+Øô ,ûð	ús   ‚ “	8œ3³8c                 ó>  — | j                   j                  |«      }|sy t        j                  d|«       |D ]d  }t	        |d   j                  dd«      d   «      }t        j                  d|«       |j                  dg «      D ]  }| j                  ||z  «       Œ Œf y )Nz%Watchman subscription %s has results.Úsubscriptionr5  r3   zFound root directory %sr4  )r  ÚgetSubscriptionrf   rg   r   Úsplitrõ   ré   )r·   ÚsubrR  r  Úroot_directoryr  s         r   Ú_check_subscriptionz$WatchmanReloader._check_subscription:  s�   € Ø—{‘{×2Ñ2°3Ó7ˆÙØÜ�‰Ð<¸cÔBØ"ò 	@ˆFô
 " &¨Ñ"8×">Ñ">¸sÀAÓ"FÀqÑ"IÓJˆNÜ�L‰LÐ2°NÔCØŸ
™
 7¨BÓ/ò @�Ø×(Ñ(¨¸$Ñ)>Õ?ñ@ñ	@r   c                 ób   — t         j                  d«       | j                  j                  «        y )Nz0Request processed. Setting update_watches event.)rf   rg   r  ra   )r·   r+   s     r   Úrequest_processedz"WatchmanReloader.request_processedI  s!   € Ü�‰ÐGÔHØ×Ñ×"Ñ"Õ$r   c              #   óš  K  — t        j                  | j                  «       | j                  «        	 | j                  j                  «       r*| j                  «        | j                  j                  «        	 | j                  j                  «        t        | j                  j                  j                  «       «      D ]  }| j                  |«       Œ 	 d –— t'        j(                  d«       Œ½# t        j                  $ r Y Œ/t        j                  $ r1}t         j#                  d|«       | j%                  |«       Y d }~Œmd }~ww xY w­w)Nz+Watchman error: %s, checking server status.rÄ   )r
   ÚconnectrY  rP  r  rë   r}   r  Úreceiver<  ÚsubsrV   rW  r  ÚSocketTimeoutÚWatchmanErrorrf   rg   rN  rö   r÷   )r·   rU  rO  s      r   rÖ   zWatchmanReloader.tickM  s   è ø€ Ü× Ñ  ×!7Ñ!7Ô8Ø×ÑÔØØ×%Ñ%×,Ñ,Ô.Ø×#Ñ#Ô%Ø×&Ñ&×,Ñ,Ô.ð	2Ø—‘×#Ñ#Ô%ô   §¡× 0Ñ 0× 5Ñ 5Ó 7Ó8ò 2�CØ×,Ñ,¨SÕ1ñ2ãä�J‰J�sŒOð! øô ×+Ñ+ò ÙÜ×+Ñ+ò -Ü—‘ÐJÈBÔOØ×(Ñ(¨×,Ñ,ûð-üs=   ‚A5EÁ8C0 ÂAEÃ0EÄEÄEÄ'EÄ>EÅEÅEc                 óV   •— | j                   j                  «        t        ‰| �  «        y rH   )r  Úcloser  rÚ   r  s    €r   rÚ   zWatchmanReloader.stopb  s   ø€ Ø�‰×ÑÔÜ‰‰�r   c                 ó€   — 	 | j                   j                  d«       y# t        $ r t        t	        |«      «      |‚w xY w)z'Return True if the server is available.ÚversionT)r  r  r!   r  r  )r·   Úinner_exs     r   rN  z$WatchmanReloader.check_server_statusf  sC   € ð	CØ�K‰K×Ñ˜iÔ(ð øô ò 	CÜ%¤c¨(£mÓ4¸(ÐBð	Cús   ‚ ž=c                 ó  — t         st        d«      ‚t        j                  d¬«      }	 |j                  «       }t        |d   «      }t        j                  d|«       |dk  rt        d«      ‚y # t        $ r t        d«      ‚w xY w)	Nzpywatchman not installed.rÄ   rÅ   z'Cannot connect to the watchman service.rc  zWatchman version %s)é   é	   z"Watchman 4.9 or later is required.)r  r  r  ÚcapabilityCheckr!   r   rf   rg   )rá   r  r  rc  s       r   râ   z#WatchmanReloader.check_availabilityn  s�   € åÜ%Ð&AÓBÐBÜ×"Ñ"¨3Ô/ˆð	QØ×+Ñ+Ó-ˆFô $ F¨9Ñ$5Ó6ˆô 	�‰Ð*¨GÔ4Ø�VÒÜ%Ð&JÓKÐKð øô ò 	Qä%Ð&OÓPÐPð	Qús   ©A. Á.BrH   )r   rí   rî   r¸   r   r  r  r   r   r/  r7  r:  r@  rL  rP  rW  rY  rÖ   rÚ   rN  rï   râ   Ú__classcell__)r  s   @r   r  r  ¯  s†   ø„ ôð ñ>ó ð>ò<ð0 ñ9ó ð9ò:ò2Nò"Nò4Oòò$ò@ò%òô*óð ñLó ôLr   r  c                  ór   — 	 t         j                  «        t        «       S # t        $ r t        «       cY S w xY w)z7Return the most suitable reloader for this environment.)r  râ   r  rò   r4   r   r   Úget_reloaderrk  €  s7   € ðÜ×+Ñ+Ô-ô ÓÐøô ò Ü‹~Òðús   ‚   6µ6c                 óä   — t        «        t        |«      }t        j                  |||d¬«      }d|_        |j                  «        | j                  s| j                  |«       | j                  sŒy y )Nzdjango-main-thread)Útargetr*   r+   r“   T)rE   r1   r³   ÚThreadÚdaemonÚstartr×   rª   )ÚreloaderÚ	main_funcr*   r+   rË   s        r   Ústart_djangors  ‰  se   € ÜÔä˜YÓ'€IÜ"×)Ñ)Ø˜t¨FÐ9MôÐð !%ÐÔØ×ÑÔà×"Ò"Ø�‰Ð'Ô(ð ×"Õ"r   c                 ó‚  — t        j                   t         j                  d„ «       	 t        j                  j	                  t
        «      dk(  rEt        «       }t        j                  d|j                  j                  «       t        || g|¢­i |¤Ž y t        «       }t        j                  |«       y # t        $ r Y y w xY w)Nc                  ó,   — t        j                  d«      S )Nr   )r"   r    )r*   s    r   rE  z#run_with_reloader.<locals>.<lambda>˜  s   € ´·±¸³€ r   r£   z!Watching for file changes with %s)r?   ÚSIGTERMr¦   r§   rõ   r¨   rk  rf   rŸ   r  r   rs  r®   r"   r    ÚKeyboardInterrupt)rr  r*   r+   rq  Ú	exit_codes        r   Úrun_with_reloaderry  —  s�   € Ü
‡M�M”&—.‘.Ñ";Ô<ðÜ�:‰:�>‰>Ô/Ó0°FÒ:Ü#“~ˆHÜ�K‰KØ3°X×5GÑ5G×5PÑ5Pôô ˜ 9Ð>¨tÒ>°vÓ>ä-Ó/ˆIÜ�H‰H�YÕøÜò Ùðús   §A*B2 ÂB2 Â2	B>Â=B>)>rb   Úloggingr¦   r?   r©   r"   r³   rö   r&   rJ   Úcollectionsr   Ú	functoolsr   r   Úpathlibr   Útypesr   Ú	zipimportr   r   Údjango.appsr	   Údjango.core.signalsr
   Údjango.dispatchr   Údjango.utils.functionalr   Údjango.utils.versionr   rÒ   rç   r¨   Ú	getLoggerrf   r(   r$   r9   ÚImportErrorr  r   r   r1   r5   rE   rW   rT   r„   r‡   r�   r¡   r®   r°   rò   r˜   r  r  rk  rs  ry  r4   r   r   ú<module>r‡     sa  ðÛ Û Û 	Û Û Û 
Û Û Û Û Ý #ß &Ý Ý Ý !ã Ý Ý 0Ý "Ý 3Ý 2á“XÐ Ù‹x€à"Ð à	ˆ×	Ñ	Ð4Ó	5€ð
 €Ø€
ðÛð
Ûò
1ò
>ò
ò2ò7ò&Dñ �1Ôñ.ó ð.ñb �1Ôñ"ó ð"ò< ò")òXò
 ÷f#ñ f#ôR(�<ô (ôV	˜,ô 	ôNL�|ô NLòbò)óøða ò Ø‚Gðûð ò Ø‚Jðús$   ÂD ÂD ÄDÄDÄD#Ä"D#