o
    Òó·i�  ã                   @  sŽ   d Z ddlmZ ddl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 G d	d
„ d
eƒZejZe
eƒG dd„ dƒƒZddd„ZdS )z>
Implementation of an in-memory worker that defers execution.
é    )Úannotations)ÚEnumÚauto)ÚCallableÚLiteral)Úimplementeré   )ÚQuit)ÚIExclusiveWorkerc                   @  s   e Zd Zeƒ ZdS )ÚNoMoreN)Ú__name__Ú
__module__Ú__qualname__r   ÚWork© r   r   ú^C:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-packages\twisted/_threads/_memory.pyr      s    
r   c                   @  s2   e Zd ZdZefddd„Zdd
d„Zddd„ZdS )ÚMemoryWorkerz|
    An L{IWorker} that queues work for later performance.

    @ivar _quit: a flag indicating
    @type _quit: L{Quit}
    Úpendingú?Callable[[], list[Callable[[], object] | Literal[NoMore.Work]]]ÚreturnÚNonec                 C  s   t ƒ | _|ƒ | _dS )z+
        Create a L{MemoryWorker}.
        N)r	   Ú_quitÚ_pending)Úselfr   r   r   r   Ú__init__$   s   zMemoryWorker.__init__ÚworkúCallable[[], object]c                 C  s   | j  ¡  | j |¡ dS )z}
        Queue some work for to perform later; see L{createMemoryWorker}.

        @param work: The work to perform.
        N)r   Úcheckr   Úappend)r   r   r   r   r   Údo.   s   
zMemoryWorker.doc                 C  s   | j  ¡  | j t¡ dS )z#
        Quit this worker.
        N)r   Úsetr   r   Ú
NoMoreWork)r   r   r   r   Úquit7   s   
zMemoryWorker.quitN)r   r   r   r   )r   r   r   r   )r   r   )r   r   r   Ú__doc__Úlistr   r   r"   r   r   r   r   r      s    	þ

	r   r   ú'tuple[MemoryWorker, Callable[[], bool]]c                    s   d‡ fdd„} t ƒ ‰ ˆ | fS )zÞ
    Create an L{IWorker} that does nothing but defer work, to be performed
    later.

    @return: a worker that will enqueue work to perform later, and a callable
        that will perform one element of that work.
    r   Úboolc                    s6   ˆ j sdS ˆ j d } | tu rdS ˆ j  d¡ | ƒ  dS )NFr   T)r   r!   Úpop)Úpeek©Zworkerr   r   ÚperformH   s   
z#createMemoryWorker.<locals>.performN)r   r&   )r   )r*   r   r)   r   ÚcreateMemoryWorker?   s   	
r+   N)r   r%   )r#   Ú
__future__r   Úenumr   r   Útypingr   r   Zzope.interfacer   Z_conveniencer	   Z	_ithreadsr
   r   r   r!   r   r+   r   r   r   r   Ú<module>   s   #