Ë
    Eêñi'0  ã                  ó   — U d dl mZ d dlZd dlZd dlmZmZmZmZ d dl	m
Z
mZ d dlmZ d dlmZ d dlmZmZmZ erd dlmZ d d	lmZ d d
lmZ  ee«      Zded<    G d„ de«      Zdaded<    G d„ d«      Zdd„Z dd„Z!y)é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚFinalÚ
NamedTuple)ÚconfigÚ	file_util)Ú
get_logger)ÚFolderBlackList)ÚNoOpPathWatcherÚPathWatcherTypeÚget_default_path_watcher_class)ÚCallable)Ú
ModuleType)ÚPagesManagerr   Ú_LOGGERc                  ó"   — e Zd ZU ded<   ded<   y)ÚWatchedModuler   Úwatcherú
str | NoneÚmodule_nameN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    úi/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/streamlit/watcher/local_sources_watcher.pyr   r   '   s   … ØƒLØÔr   r   zPathWatcherType | NoneÚPathWatcherc                  ó‚   — e Zd ZdZdd„Zdd„Zdd„Zdd„Zdd„Z	 d	 	 	 	 	 	 	 dd„Z	dd„Z
dd	„Zdd
„Zdd„Zdd„Zdd„Zy)ÚLocalSourcesWatcheraK  Watch local Python sources and pages to trigger app reruns.

    Purpose
    -------
    This watcher powers Streamlit's core developer workflow: save a Python file
    and the app reruns. It tracks Python modules, the main script directory, and
    configured watch folders to notify the runtime when a relevant file changes.
    c                óÞ  — || _         t        j                  j                  | j                   j                  «      | _        t        j                  d«      | _        t        j                  j                  | j
                  «      | _
        g | _        d| _        t        «       | _        t        t        j                  d«      «      | _        i | _        t        «       | _        | j'                  «        y )Nzserver.folderWatchListFzserver.folderWatchBlacklist)Ú_pages_managerÚosÚpathÚrealpathÚmain_script_pathÚ_main_script_pathr   Ú
get_optionÚ_watch_foldersÚdirnameÚ_script_folderÚ_on_path_changedÚ
_is_closedÚsetÚ_cached_sys_modulesr   Ú_folder_black_listÚ_watched_modulesÚ_watched_pagesÚupdate_watched_pages)ÚselfÚpages_managers     r   Ú__init__zLocalSourcesWatcher.__init__;   s³   € Ø+ˆÔÜ!#§¡×!1Ñ!1°$×2EÑ2E×2VÑ2VÓ!WˆÔÜ$×/Ñ/Ð0HÓIˆÔÜ Ÿg™gŸo™o¨d×.DÑ.DÓEˆÔØ=?ˆÔØˆŒÜ-0«UˆÔ ô #2Ü×ÑÐ;Ó<ó#
ˆÔð ;=ˆÔÜ(+«ˆÔà×!Ñ!Õ#r   c                óŠ  — | j                   j                  «       }t        «       }| j                  j	                  «       j                  «       D ]]  }|d   sŒ	t        j                  j                  |d   «      }|j                  |«       || j                   vsŒK| j                  |d ¬«       Œ_ | j                  D ]�  }t        j                  j                  |«      st        j                  d|«       Œ9t        j                  d|«       t        j                  j                  |«      }|| j                   vsŒ}| j                  |d d¬«       Œ’ |D ]S  }||vsŒt        j                  j!                  |«      rŒ(| j#                  |«       | j                   j%                  |«       ŒU | j                   j'                  |«      | _         y )NÚscript_path)r   z#Watch folder is not a directory: %szRegistering watch folder: %sT)r   Úis_directory)r3   Úcopyr/   r#   Ú	get_pagesÚvaluesr$   r%   r&   ÚaddÚ_register_watcherr*   Úisdirr   ÚwarningÚdebugÚisfileÚ_deregister_watcherÚremoveÚunion)r5   Úold_page_pathsÚnew_pages_pathsÚ	page_infoÚ	page_pathÚwatch_folderÚwatch_folder_pathÚold_page_paths           r   r4   z(LocalSourcesWatcher.update_watched_pagesN   sŽ  € Ø×,Ñ,×1Ñ1Ó3ˆÜ$'£Eˆà×,Ñ,×6Ñ6Ó8×?Ñ?ÓAò 
	ˆIØ˜]Ò+ØäŸ™×(Ñ(¨°=Ñ)AÓBˆIØ×Ñ 	Ô*Ø × 3Ñ 3Ò3Ø×&Ñ&ØØ $ð 'õ ð
	ð !×/Ñ/ò 	ˆLä—7‘7—=‘= Ô.Ü—‘Ð EÀ|ÔTØÜ�M‰MÐ8¸,ÔGÜ "§¡× 0Ñ 0°Ó >ÐØ ¨×(;Ñ(;Ò;Ø×&Ñ&Ø%Ø $Ø!%ð 'õ ð	ð ,ò 	:ˆMà OÒ3¼B¿G¹G¿N¹NØõ=ð ×(Ñ(¨Ô7Ø×#Ñ#×*Ñ*¨=Õ9ð	:ð #×1Ñ1×7Ñ7¸ÓHˆÕr   c                ó:   — | j                   j                  |«       y ©N)r-   Úappend)r5   Úcbs     r   Úregister_file_change_callbackz1LocalSourcesWatcher.register_file_change_callbackx   s   € Ø×Ñ×$Ñ$ RÕ(r   c                óî  — t         j                  d|«       t        j                  j	                  |«      }|| j
                  vr�| j
                  D ]w  }t        j                  j                  |«      sŒ#t        j                  j                  ||g«      |k(  sŒHt         j                  d|«       | j                  D ]
  } ||«       Œ  y  t         j                  d|«       y | j
                  j                  «       D �ch c]6  }|j                  �(|j                  t        j                  v r|j                  ’Œ8 }}|rœt        d„ |D «       «      }|j                  «       }t!        t        j                  j#                  «       «      D ]%  }	|	j%                  |«      sŒ|j'                  |	«       Œ' |D ]&  }
|
t        j                  v sŒt        j                  |
= Œ( | j                  D ]
  } ||«       Œ y c c}w )NzPath changed: %sz%File changed in watched directory: %sz'Received event for non-watched path: %sc              3  ó&   K  — | ]	  }|› d �–— Œ y­w)ú.Nr   )Ú.0Únames     r   ú	<genexpr>z6LocalSourcesWatcher.on_path_changed.<locals>.<genexpr>¥   s   è ø€ ÒE¨D ˜v QœZÑEùs   ‚)r   rB   r$   r%   r&   r2   r@   Ú
commonpathr-   Úerrorr=   r   ÚsysÚmodulesÚtupler;   ÚlistÚkeysÚ
startswithr>   )r5   ÚfilepathÚnorm_filepathÚwatched_pathrQ   ÚwmÚmodules_to_evictÚprefixesÚall_to_evictÚkeyrW   s              r   Úon_path_changedz#LocalSourcesWatcher.on_path_changed{   s²  € Ü�‰Ð(¨(Ô3äŸ™×(Ñ(¨Ó2ˆØ × 5Ñ 5Ñ5à $× 5Ñ 5ò 	�ä—G‘G—M‘M ,Õ/ÜŸ™×*Ñ*¨L¸-Ð+HÓIØ#ó$ô —M‘MÐ"IÈ8ÔTØ"×3Ñ3ò %˜Ù˜8�ð%áð	ô �M‰MÐCÀXÔNØð* ×+Ñ+×2Ñ2Ó4ö
àØ�~‰~Ð)¨b¯n©nÄÇÁÑ.Kð �N‹Nð
Ðð 
ñ
 ÜÑEÐ4DÔEÓEˆHØ+×0Ñ0Ó2ˆLÜœCŸK™K×,Ñ,Ó.Ó/ò *�Ø—>‘> (Õ+Ø ×$Ñ$ SÕ)ð*ð %ò *�Øœ3Ÿ;™;Ò&ÜŸ™ DÑ)ð*ð ×'Ñ'ò 	ˆBÙˆx�Lñ	ùò!
s   Ã=;G2c                ó°   — | j                   j                  «       D ]  }|j                  j                  «        Œ i | _         t	        «       | _        d| _        y )NT)r2   r=   r   Úcloser/   r3   r.   )r5   rd   s     r   rk   zLocalSourcesWatcher.close²   sI   € Ø×'Ñ'×.Ñ.Ó0ò 	ˆBØ�J‰J×ÑÕð	à "ˆÔÜ!›eˆÔØˆ�r   c                ó  — t         €
t        «       a t         t        u ry 	 |rdnd }t        t        || j                  |d¬«      |¬«      }|| j
                  |<   y # t        $ r"}t        j                  d||¬«       Y d }~y d }~ww xY w)Nz**/*F)Úglob_patternÚallow_nonexistent)r   r   zFailed to watch file %s: %s©Úexc_info)	r   r   r   r   ri   r2   Ú	Exceptionr   rA   )r5   ra   r   r:   rm   rd   Úexs          r   r?   z%LocalSourcesWatcher._register_watcher¹   sŽ   € ô ÐÜ8Ó:ˆKäœ/Ñ)Øð	á%1™6°tˆLäÜ#ØØ×(Ñ(Ø!-Ø&+ô	ð (ôˆBð /1ˆD×!Ñ! (Ò+øÜò 	ô �O‰OÐ9¸8ÈbˆOÔQÜûð		ús   Ÿ9A Á	BÁ"A?Á?Bc                ó®   — || j                   vry || j                  k(  ry | j                   |   }|j                  j                  «        | j                   |= y rO   )r2   r(   r   rk   )r5   ra   rd   s      r   rD   z'LocalSourcesWatcher._deregister_watcher×   sR   € Ø˜4×0Ñ0Ñ0Øà�t×-Ñ-Ò-Øà×"Ñ" 8Ñ,ˆØ
�
‰
×ÑÔØ×!Ñ! (Ñ+r   c                ó   — || j                   vS rO   )r2   ©r5   ra   s     r   Ú_file_is_newz LocalSourcesWatcher._file_is_newâ   s   € Ø˜t×4Ñ4Ð4Ð4r   c                ó–   — | j                  |«      xr7 t        j                  || j                  «      xs t        j                  |«      S rO   )rv   r	   Úfile_is_in_folder_globr,   Úfile_in_pythonpathru   s     r   Ú_file_should_be_watchedz+LocalSourcesWatcher._file_should_be_watchedå   sC   € à× Ñ  Ó*ò 
Ü×,Ñ,¨X°t×7JÑ7JÓKò 6Ü×+Ñ+¨HÓ5ð	
r   c           
     óz  — | j                   ry t        t        j                  «      | j                  k7  r‚t        t        j                  «      j                  «       D ��ci c]   \  }}|| j                  t        |«      «      “Œ" }}}t        t        j                  «      | _        | j                  |«       y y c c}}w rO   )
r.   r/   r[   r\   r0   ÚdictÚitemsÚ_exclude_blacklisted_pathsÚget_module_pathsÚ_register_necessary_watchers)r5   rW   ÚmoduleÚmodules_pathss       r   Úupdate_watched_modulesz*LocalSourcesWatcher.update_watched_modulesì   s™   € Ø�?Š?ØäŒs�{‰{Ó˜t×7Ñ7Ò7ô %)¬¯©Ó$5×$;Ñ$;Ó$=÷á �D˜&ð �d×5Ñ5Ô6FÀvÓ6NÓOÑOðˆMñ ô (+¬3¯;©;Ó'7ˆDÔ$Ø×-Ñ-¨mÕ<ð 8ùós   Á%B7c                óÄ   — |j                  «       D ]M  \  }}|D ]C  }| j                  |«      sŒ| j                  t        j                  j                  |«      |«       ŒE ŒO y rO   )r}   rz   r?   r$   r%   r&   )r5   Úmodule_pathsrW   Úpathsr%   s        r   r€   z0LocalSourcesWatcher._register_necessary_watchersø   s^   € Ø'×-Ñ-Ó/ò 	I‰KˆD�%Øò I�Ø×/Ñ/°Õ5Ø×*Ñ*¬2¯7©7×+;Ñ+;¸DÓ+AÀ4ÕHñIñ	Ir   c                ód   — |D �ch c]   }| j                   j                  |«      rŒ|’Œ" c}S c c}w rO   )r1   Úis_blacklisted)r5   r†   Úps      r   r~   z.LocalSourcesWatcher._exclude_blacklisted_pathsþ   s)   € Ø ÖR�a¨×(?Ñ(?×(NÑ(NÈqÕ(Q’ÒRÐRùÒRs   … -¦-N)r6   r   ÚreturnÚNone)rŠ   r‹   )rQ   zCallable[[str], None]rŠ   r‹   )ra   ÚstrrŠ   r‹   )F)ra   rŒ   r   r   r:   ÚboolrŠ   r‹   )ra   rŒ   rŠ   r�   )r…   zdict[str, set[str]]rŠ   r‹   )r†   úset[str]rŠ   rŽ   )r   r   r   Ú__doc__r7   r4   rR   ri   rk   r?   rD   rv   rz   rƒ   r€   r~   r   r   r   r!   r!   1   so   „ ñó$ó&(IóT)ó5ónð LQðØðØ*4ðØDHðà	óó<	,ó5ó
ó
=óIôSr   r!   c                óp  — d„ d„ d„ g}t        «       }|D ]^  }g }	  || «      }|j                  |D �cg c]6  }t        |«      sŒt        j                  j                  t        |«      «      ‘Œ8 c}«       Œ` |S # t        $ r Y Œ`t        $ r% t        j	                  d| j
                  d¬«       Y ŒŒw xY wc c}w )Nc                ó8   — t        | d«      r| j                  gS g S )NÚ__file__)Úhasattrr’   ©Úms    r   ú<lambda>z"get_module_paths.<locals>.<lambda>  s   € ¤'¨!¨ZÔ"8�1—:‘:�,€ ¸b€ r   c                ód   — t        | d«      r#| j                  �| j                  j                  gS g S )NÚ__spec__)r“   r˜   Úoriginr”   s    r   r–   z"get_module_paths.<locals>.<lambda>  s6   € ä�q˜*Ô%¨!¯*©*Ð*@ð �Z‰Z×ÑÐð ð ð r   c                óÌ   — t        | d«      rWt        | j                  «      j                  dk(  r5t        | j                  d«      rt	        | j                  j
                  «      S g S )NÚ__path__Ú_NamespacePathÚ_path)r“   Útyper›   r   r^   r�   r”   s    r   r–   z"get_module_paths.<locals>.<lambda>  sW   € ä�q˜*Ô%ô �Q—Z‘ZÓ ×)Ñ)Ð-=Ò=Ü˜Ÿ
™
 GÔ,ô �—‘×!Ñ!Ó"ð ð ð r   z Examining the path of %s raised:Tro   )r/   ÚAttributeErrorrq   r   rA   r   ÚupdateÚ_is_valid_pathr$   r%   r&   rŒ   )r�   Úpaths_extractorsÚ	all_pathsÚextract_pathsÚpotential_pathsr‰   s         r   r   r     sÆ   € ñ 	Añ	
ñ	
ð1!HÐôF “€IØ)ò 
ˆØˆð	Ù+¨FÓ3ˆOð 	×ÑØ/>ÖT¨!Ä.ÐQRÕBSŒR�W‰W×Ñœc !›fÕ%ÒTõ	
ð
ð Ðøô ò 	áÜò 	Ü�O‰OØ2°F·O±OÈdð ö ð	üò Us"   ›A8²B3
Á*B3
Á8	B0Â*B0Â/B0c                ó¦   — t        | t        «      xr@ t        j                  j	                  | «      xs t        j                  j                  | «      S rO   )Ú
isinstancerŒ   r$   r%   rC   r@   )r%   s    r   r¡   r¡   9  s3   € Ü�dœCÓ ÒR¤b§g¡g§n¡n°TÓ&:Ò&Q¼b¿g¹g¿m¹mÈDÓ>QÐRr   )r�   r   rŠ   rŽ   )r%   r   rŠ   r�   )"Ú
__future__r   r$   r[   Útypingr   r   r   r   Ú	streamlitr   r	   Ústreamlit.loggerr
   Ú#streamlit.watcher.folder_black_listr   Ústreamlit.watcher.path_watcherr   r   r   Úcollections.abcr   Útypesr   Ústreamlit.runtime.pages_managerr   r   r   r   r   r   r!   r   r¡   r   r   r   ú<module>r±      sz   ðö #ã 	Û 
ß 8Ó 8ç 'Ý 'Ý ?÷ñ ñ Ý(Ý å<á˜HÓ%€ˆÓ %ô�Jô ð '+€Ð#Ó *÷NSñ NSób4ônSr   