Ë
    :vžjy  ã                  óº   — 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
 erd dlmZ g d¢Z ej                  «       Zded	<    G d
„ d«      Z G d„ d«      Zy)é    )ÚannotationsN)Údeque)ÚTYPE_CHECKING)ÚSignal)ÚIterator)Ú_VIRTUAL_FILESÚFileContentsÚVirtualFileContentsz5weakref.WeakValueDictionary[str, VirtualFileContents]r   c                  ój   — e Zd ZdZ ee«      Zddd„Zed	d„«       Z	e	j                  d
d„«       Z	d	d„Zy)r
   a  Stores text file contents in memory and emits a signal when it changes.

    Calling `str(obj)` on this object will always return the current contents.

    Parameters
    ----------
    contents : str, optional
        The initial contents of the file (default: "")
    c                ó   — || _         y ©N©Ú	_contents)ÚselfÚcontentss     úi/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/anywidget/_file_contents.pyÚ__init__zVirtualFileContents.__init__"   s	   € Ø!ˆ�ó    c                ó   — | j                   S r   r   ©r   s    r   r   zVirtualFileContents.contents%   s   € à�~‰~Ðr   c                óH   — || _         | j                  j                  |«       y r   )r   ÚchangedÚemit)r   Úvalues     r   r   zVirtualFileContents.contents)   s   € àˆŒØ�‰×Ñ˜%Õ r   c                ó   — | j                   S r   )r   r   s    r   Ú__str__zVirtualFileContents.__str__.   s   € Ø�}‰}Ðr   N)Ú )r   ÚstrÚreturnÚNone©r   r   )r   r   r   r    )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   Úpropertyr   Úsetterr   © r   r   r
   r
      sH   „ ññ �S‹k€Gô"ð òó ðð ‡_�_ò!ó ð!ôr   r
   c                  óX   — e Zd ZdZ ee«      Z e«       Zdd	d„Zd
d„Z	d
d„Z
dd„Zdd„Zy)r	   a»  Object that watches for file changes and emits a signal when it changes.

    Calling `str(obj)` on this object will always return the current contents of the
    file (as long as the thread is running).

    Parameters
    ----------
    path : str | pathlib.Path
        The file to read and watch for content changes
    start_thread : bool, optional
        Whether to start watching for changes in a separate thread (default: `True`)
    c                óL  — t        j                  |«      j                  «       j                  «       | _        | j                  j                  «       sd| j                  › �}t        |«      ‚d | _        t        j                  «       | _
        d | _        |r| j                  «        y y )NzFile does not exist: )ÚpathlibÚPathÚ
expanduserÚabsoluteÚ_pathÚis_fileÚ
ValueErrorr   Ú	threadingÚEventÚ_stop_eventÚ_background_threadÚwatch_in_thread)r   ÚpathÚstart_threadÚmsgs       r   r   zFileContents.__init__C   s€   € Ü—\‘\ $Ó'×2Ñ2Ó4×=Ñ=Ó?ˆŒ
Ø�z‰z×!Ñ!Ô#Ø)¨$¯*©*¨Ð6ˆCÜ˜S“/Ð!Ø%)ˆŒÜ$Ÿ?™?Ó,ˆÔØ;?ˆÔÙØ× Ñ Õ"ð r   c                óÆ   ‡ — ‰ j                   �y‰ j                  j                  «        t        j                  ˆ fd„d¬«      ‰ _         ‰ j                   j                  «        y)zEWatch for file changes (and emitting signals) from a separate thread.Nc                 ó:   •— t        ‰ j                  «       d¬«      S )Nr   )Úmaxlen)r   Úwatchr   s   €r   Ú<lambda>z.FileContents.watch_in_thread.<locals>.<lambda>W   s   ø€ œ5 §¡£°aÕ8r   T)ÚtargetÚdaemon)r5   r4   Úclearr2   ÚThreadÚstartr   s   `r   r6   zFileContents.watch_in_threadN   sS   ø€ à×"Ñ"Ð.ØØ×Ñ×ÑÔ Ü"+×"2Ñ"2ó 9Øô#
ˆÔð 	×Ñ×%Ñ%Õ'r   c                ó”   — | j                   €y| j                  j                  «        | j                   j                  «        d| _         y)z.Stops an actively running thread if it exists.N)r5   r4   ÚsetÚjoinr   s    r   Ústop_threadzFileContents.stop_thread\   s=   € à×"Ñ"Ð*ØØ×Ñ×ÑÔØ×Ñ×$Ñ$Ô&Ø"&ˆÕr   c              #  óÜ  K  — 	 ddl m}m}  || j                  | j
                  ¬«      D ]Ÿ  }|D ]˜  \  }}||j                  k(  r7| j                  j                  «       s| j                  j                  «          y||j                  |j                  fv sŒgd| _        | j                  j                  t        | «      «       ||f–—  ŒŸ Œ¡ y# t        $ r}d}t        |«      |‚d}~ww xY w­w)a  Watch for file changes and emit changed/deleted signal events.

        Blocks indefinitely.

        Returns
        -------
        changes : Iterator[tuple[int, str]]
            An iterator that yields any time the file changes until the file is deleted.
        r   )ÚChanger=   zkwatchfiles is required to watch for file changes during development. Install with `pip install watchfiles`.N)Ú
stop_event)Ú
watchfilesrI   r=   ÚImportErrorr/   r4   ÚdeletedÚexistsr   ÚmodifiedÚaddedr   r   r   )r   rI   r=   Úexcr9   ÚchangesÚchanger7   s           r   r=   zFileContents.watchd   s×   è ø€ ð		ß0ñ ˜TŸZ™Z°D×4DÑ4D×EˆGÛ '‘�˜Ø˜VŸ^™^Ò+°D·J±J×4EÑ4EÔ4GØ—L‘L×%Ñ%Ô'Úà˜fŸo™o¨v¯|©|Ð<Ò<Ø%)�D”NØ—L‘L×%Ñ%¤c¨$£iÔ0Ø! 4˜.Ò(Ùñ !(ñ Føô ò 	ð9ð ô Øóàðûð	üs.   ‚C,„C ŒB	C,Â7C,Ã	C)ÃC$Ã$C)Ã)C,c                ót   — | j                   €!| j                  j                  d¬«      | _         | j                   S )Nzutf-8)Úencoding)r   r/   Ú	read_textr   s    r   r   zFileContents.__str__…   s/   € Ø�>‰>Ð!Ø!ŸZ™Z×1Ñ1¸7Ð1ÓCˆDŒNØ�~‰~Ðr   N)T)r7   zstr | pathlib.Pathr8   Úboolr   r    )r   r    )r   zIterator[tuple[int, str]]r!   )r"   r#   r$   r%   r   r   r   rM   r   r6   rG   r=   r   r(   r   r   r	   r	   2   s3   „ ññ �S‹k€GÙ‹h€Gô	#ó(ó'óôBr   r	   )Ú
__future__r   r+   r2   ÚweakrefÚcollectionsr   Útypingr   Úpsygnalr   Úcollections.abcr   Ú__all__ÚWeakValueDictionaryr   Ú__annotations__r
   r	   r(   r   r   Ú<module>ra      sX   ðÞ "ã Û Û Ý Ý  å áÝ(â
C€ð  €G×ÑÓ!ð ÐEó ÷
ñ ÷:Vò Vr   