ó
    Ãu„jâ  ã                  óÚ   • S r SSKJr  SSKrSSKJr  SSKJr  SSKJ	r	J
r
JrJr  SSKrSSKJrJrJr  \	(       a  SSKJr  SS	KJr  \R.                  R1                  S
S9 " S S5      5       rg)zÈ
Contains `WorkerManager`, a class to manage [workers](/guide/workers) for an app.

You access this object via [App.workers][textual.app.App.workers] or [Widget.workers][textual.dom.DOMNode.workers].
é    )ÚannotationsN)ÚCounter)Ú
attrgetter)ÚTYPE_CHECKINGÚAnyÚIterableÚIterator)ÚWorkerÚWorkerStateÚWorkType)ÚApp)ÚDOMNodeT)Úangularc                  ó   • \ rS rSrSrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jr S       S S jjrSSSS
S
SSS.                   S!S jjrS"S jrS#S jrS#S jrS$S jrS%S jrS&S'S jjrSrg)(ÚWorkerManageré   z¸An object to manage a number of workers.

You will not have to construct this class manually, as widgets, screens, and apps
have a worker manager accessibly via a `workers` attribute.
c                ó0   • Xl          [        5       U l        g)z>Initialize a worker manager.

Args:
    app: An App instance.
N)Ú_appÚsetÚ_workers)ÚselfÚapps     Ú¤C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\textual/worker_manager.pyÚ__init__ÚWorkerManager.__init__   s   € ð Œ	Ø%Ü%(£UˆŒØ(ó    c              #  óÈ   #   • [        5       nUR                  S U R                   5       5        [        UR	                  5       5       H  u  p#UR
                  U4v •  M     g 7f)Nc              3  ó8   #   • U  H  oR                   v •  M     g 7f©N)Ústate)Ú.0Úworkers     r   Ú	<genexpr>Ú.WorkerManager.__rich_repr__.<locals>.<genexpr>,   s   é € Ð@²-¨—|–|²-ùs   ‚)r   Úupdater   ÚsortedÚitemsÚname)r   Úcounterr    Úcounts       r   Ú__rich_repr__ÚWorkerManager.__rich_repr__*   sH   é € Ü(/«	ˆØ�‰Ñ@°$·-²-Ó@Ô@Ü" 7§=¡=£?Ö3‰LˆEØ—*‘*˜eÐ#Ô#ò 4ùs   ‚A A"c                óN   • [        [        U R                  [        S5      S95      $ )NÚ_created_time)Úkey©Úiterr&   r   r   ©r   s    r   Ú__iter__ÚWorkerManager.__iter__0   s   € Ü”F˜4Ÿ=™=¬j¸Ó.IÑJÓKÐKr   c                óP   • [        [        U R                  [        S5      SS95      $ )Nr.   T)r/   Úreverser0   r2   s    r   Ú__reversed__ÚWorkerManager.__reversed__3   s$   € ÜÜ�4—=‘=¤j°Ó&AÈ4ÑPó
ð 	
r   c                ó,   • [        U R                  5      $ r   )Úboolr   r2   s    r   Ú__bool__ÚWorkerManager.__bool__8   s   € Ü�D—M‘MÓ"Ð"r   c                ó,   • [        U R                  5      $ r   )Úlenr   r2   s    r   Ú__len__ÚWorkerManager.__len__;   s   € Ü�4—=‘=Ó!Ð!r   c                ó   • XR                   ;   $ r   )r   ©r   r"   s     r   Ú__contains__ÚWorkerManager.__contains__>   s   € ØŸ™Ñ&Ð&r   Tc                ó  • U(       a7  UR                   (       a&  U R                  UR                  UR                   5        U R                  R	                  U5        U(       a'  UR                  U R                  U R                  5        gg)zÍAdd a new worker.

Args:
    worker: A Worker instance.
    start: Start the worker if True, otherwise the worker must be started manually.
    exclusive: Cancel all workers in the same group as `worker`.
N)ÚgroupÚcancel_groupÚnoder   ÚaddÚ_startr   Ú_remove_worker)r   r"   ÚstartÚ	exclusives       r   Ú
add_workerÚWorkerManager.add_workerA   sW   € ö ˜ŸŸØ×Ñ˜fŸk™k¨6¯<©<Ô8Ø�‰×Ñ˜&Ô!ÞØ�M‰M˜$Ÿ)™) T×%8Ñ%8Õ9ð r   Ú ÚdefaultF)r(   rF   ÚdescriptionÚexit_on_errorrL   rM   Úthreadc          
     ó¢   • [        UUU=(       d    [        USS5      =(       d    SUU=(       d    [        U5      UU	S9n
U R                  X§US9  U
$ )a  Create a worker from a function, coroutine, or awaitable.

Args:
    work: A callable, a coroutine, or other awaitable.
    name: A name to identify the worker.
    group: The worker group.
    description: A description of the worker.
    exit_on_error: Exit the app if the worker raises an error. Set to `False` to suppress exceptions.
    start: Automatically start the worker.
    exclusive: Cancel all workers in the same group.
    thread: Mark the worker as a thread worker.

Returns:
    A Worker instance.
Ú__name__rP   )r(   rF   rR   rS   rT   )rL   rM   )r
   ÚgetattrÚreprrN   )r   ÚworkrH   r(   rF   rR   rS   rL   rM   rT   r"   s              r   Ú_new_workerÚWorkerManager._new_workerQ   sV   € ô8 %ØØØ×<œ  z°2Ó6×<¸"ØØ#×1¤t¨D£zØ'Øñ
ˆð 	�‰˜°yˆÑAØˆr   c                ó:   • U R                   R                  U5        g)zHRemove a worker from the manager.

Args:
    worker: A Worker instance.
N)r   ÚdiscardrB   s     r   rK   ÚWorkerManager._remove_workery   s   € ð 	�‰×Ñ˜fÕ%r   c                óv   • U R                    H)  nUR                  U R                  U R                  5        M+     g)zStart all the workers.N)r   rJ   r   rK   rB   s     r   Ú	start_allÚWorkerManager.start_all�   s(   € à—m”mˆFØ�M‰M˜$Ÿ)™) T×%8Ñ%8Ö9ò $r   c                óJ   • U R                    H  nUR                  5         M     g)zCancel all workers.N)r   ÚcancelrB   s     r   Ú
cancel_allÚWorkerManager.cancel_all†   s   € à—m”mˆFØ�M‰MŽOò $r   c                óÂ   • U R                    Vs/ s H)  nUR                  U:X  d  M  UR                  U:X  d  M'  UPM+     nnU H  nUR                  5         M     U$ s  snf )z‡Cancel a single group.

Args:
    node: Worker DOM node.
    group: A group name.

Returns:
    A list of workers that were cancelled.
)r   rF   rH   rc   )r   rH   rF   r"   Úworkerss        r   rG   ÚWorkerManager.cancel_group‹   sd   € ð Ÿ-š-ó
â'�Ø—‘ Ñ%ó à*0¯+©+¸Ñ*=÷ Ù'ð 	ð 
ó
 ˆFØ�M‰MŽOñ àˆùò
s   �A§A¹Ac                óœ   • U R                    Vs/ s H  o"R                  U:X  d  M  UPM     nnU H  nUR                  5         M     U$ s  snf )z�Cancel all workers associated with a given node

Args:
    node: A DOM node (widget, screen, or App).

Returns:
    List of cancelled workers.
)r   rH   rc   )r   rH   r"   rg   s       r   Úcancel_nodeÚWorkerManager.cancel_nodež   sC   € ð )-¯ªÓMª˜f¿¹ÈÑ9L—6©ˆÐMÛˆFØ�M‰MŽOñ àˆùò Ns
   �A	¦A	Nc              ƒ  óÔ   #   •  [         R                  " U=(       d    U  Vs/ s H  o"R                  5       PM     sn6 I Sh  v•N   gs  snf  N
! [         R                   a     gf = f7f)zyWait for workers to complete.

Args:
    workers: An iterable of workers or None to wait for all workers in the manager.
N)ÚasyncioÚgatherÚwaitÚCancelledError)r   rg   r"   s      r   Úwait_for_completeÚWorkerManager.wait_for_complete¬   sR   é € ð	Ü—.’.ÀÇÈ4ÀÓ"QÂ°V§;¡;¦=ÁÑ"QÐR×RÑRùÒ"QÑRøÜ×%Ñ%ó 	Ùð	üsD   ‚A(„A ¡AºA ÁAÁA ÁA(ÁA ÁA%Á"A(Á$A%Á%A()r   r   )r   r   ÚreturnÚNone)rs   zrich.repr.Result)rs   zIterator[Worker[Any]])rs   r:   )rs   Úint)r"   Úobjectrs   r:   )TT)r"   r
   rL   r:   rM   r:   rs   rt   )rY   r   rH   r   r(   z
str | NonerF   ÚstrrR   rw   rS   r:   rL   r:   rM   r:   rT   r:   rs   r
   )r"   r
   rs   rt   )rs   rt   )rH   r   rF   rw   rs   úlist[Worker])rH   r   rs   rx   r   )rg   zIterable[Worker] | Noners   rt   )rV   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r+   r3   r7   r;   r?   rC   rN   rZ   rK   r`   rd   rG   rj   rq   Ú__static_attributes__© r   r   r   r      sù   † ñô	)ô$ôLô
ô
#ô"ô'ð EIð:Øð:Ø%)ð:Ø=Að:à	õ:ð* ØØØ"ØØØñ&àð&ð ð&ð
 ð&ð ð&ð ð&ð ð&ð ð&ð ð&ð ð&ð 
õ&ôP&ô:ô
ô
ô&÷	ñ 	r   r   )r|   Ú
__future__r   rm   Úcollectionsr   Úoperatorr   Útypingr   r   r   r	   Ú	rich.reprÚrichÚtextual.workerr
   r   r   Útextual.appr   Útextual.domr   rX   Úautor   r~   r   r   Ú<module>r‰      s[   ðñõ #ã Ý Ý ß 9Ó 9ã ç 8Ñ 8æÝÝ#ð ‡�‡�˜€Ð÷]ð ]ó ñ]r   