
    d                    z    d dl mZ d dlmZ d dlmZ d dlmZ erd dlmZ eeedgdf         Z	 G d d          Z
dS )	    )annotations)TYPE_CHECKING)Callable)cast)EventEventDispatcherNc                  Z    e Zd ZddZddd	Z	 dddZddZdd dZ	 d!d"dZd#dZ	d$dZ
dS )%r   returnNonec                "    i | _         i | _        d S N)
_listeners_sorted)selfs    `/home/feoh/.local/pipx/venvs/poetry/lib/python3.11/site-packages/cleo/events/event_dispatcher.py__init__zEventDispatcher.__init__   s    @B24    Neventr   
event_name
str | Nonec                    ||j         j        }t          d|                     |                    }|r|                     |||           |S )Nlist[Listener])	__class____name__r   get_listeners_do_dispatch)r   r   r   	listenerss       r   dispatchzEventDispatcher.dispatch   sU    1J)4+=+=j+I+IJJ	 	<iU;;;r   *list[Listener] | dict[str, list[Listener]]c                    |6|| j         vrg S || j        vr|                     |           | j        |         S | j                                         D ] }|| j        vr|                     |           !| j        S r   )r   r   _sort_listenerskeysr   r   s     r   r   zEventDispatcher.get_listeners   s     !00	--$$Z000<
++/..00 	1 	1J--$$Z000|r   strlistenerListener
int | Nonec                    || j         vrd S | j         |                                         D ]\  }}|D ]}||k    r|c c S d S r   )r   items)r   r   r%   priorityr   vs         r   get_listener_priorityz%EventDispatcher.get_listener_priority0   sq    T_,,4#'?:#>#D#D#F#F 	$ 	$Hi $ $==#OOOOO !$ tr   boolc                    |)|| j         vrdS t          | j         |                   dk    S t          | j                                                   S )NFr   )r   lenanyvaluesr#   s     r   has_listenerszEventDispatcher.has_listeners;   sP    !00utz233a774?))++,,,r   r   r*   intc                    || j         vr
i | j         |<   || j         |         vrg | j         |         |<   | j         |         |                             |           || j        v r
| j        |= d S d S r   )r   appendr   )r   r   r%   r*   s       r   add_listenerzEventDispatcher.add_listenerD   s     T_,,*,DOJ'4?:66646DOJ'1
#H-44X>>>%%Z((( &%r   r   r   c                X    |D ]&}|                                 r d S  ||||            'd S r   )is_propagation_stopped)r   r   r   r   r%   s        r   r   zEventDispatcher._do_dispatchR   sO     " 	. 	.H++-- HUJ----		. 	.r   c                    g | j         |<   t          | j        |                                         d           D ]*\  }}|D ]"}| j         |                             |           #+dS )zW
        Sorts the internal list of listeners for the given event by priority.
        c                    | d          S )Nr    )ts    r   <lambda>z1EventDispatcher._sort_listeners.<locals>.<lambda>b   s    !u r   )keyN)r   sortedr   r)   r5   )r   r   _r   r%   s        r   r!   zEventDispatcher._sort_listeners[   s     $&Z "OJ'--//__
 
 
 	: 	:LAy & : :Z(//9999:	: 	:r   )r
   r   r   )r   r   r   r   r
   r   )r   r   r
   r   )r   r$   r%   r&   r
   r'   )r   r   r
   r-   )r   )r   r$   r%   r&   r*   r3   r
   r   )r   r   r   r$   r   r   r
   r   )r   r$   r
   r   )r   
__module____qualname__r   r   r   r,   r2   r6   r   r!   r;   r   r   r   r      s        5 5 5 5	 	 	 	 	 (,    $	 	 	 	- - - - - DE) ) ) ) ). . . .
: 
: 
: 
: 
: 
:r   )
__future__r   typingr   r   r   cleo.events.eventr   r$   r&   r   r;   r   r   <module>rF      s    " " " " " "                          ?''''''%67=>HW: W: W: W: W: W: W: W: W: W:r   