o
    FhH                     @  sB   d dl mZ d dlmZmZmZ ddlmZmZ G dd dZ	dS )    )annotations)AnyCallableList   )CallbackTypeHandlerObjectc                   @  s8   e Zd ZdZdddZddd	ZdddZdddZdS )EventObserveran  
    Simple events observer

    Is used for managing events is not related with Telegram
    (For example startup/shutdown processes)

    Handlers can be registered via decorator or method

    .. code-block:: python

        <observer>.register(my_handler)

    .. code-block:: python

        @<observer>()
        async def my_handler(*args, **kwargs): ...
    returnNonec                 C  s
   g | _ d S N)handlersself r   Q/var/www/html/venv/lib/python3.10/site-packages/aiogram/dispatcher/event/event.py__init__   s   
zEventObserver.__init__callbackr   c                 C  s   | j t|d dS )z0
        Register callback with filters
        r   N)r   appendr   )r   r   r   r   r   register   s   zEventObserver.registerargsr   kwargsc                   s(   | j D ]}|j|i |I dH  qdS )zk
        Propagate event to handlers.
        Handler will be called when all its filters is pass.
        N)r   call)r   r   r   handlerr   r   r   trigger$   s   
zEventObserver.trigger&Callable[[CallbackType], CallbackType]c                   s   d fdd}|S )z:
        Decorator for registering event handlers
        r   r   r
   c                   s     |  | S r   )r   r   r   r   r   wrapper1   s   
z'EventObserver.__call__.<locals>.wrapperN)r   r   r
   r   r   )r   r   r   r   r   __call__,   s   zEventObserver.__call__N)r
   r   )r   r   r
   r   )r   r   r   r   r
   r   )r
   r   )__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   r	      s    


r	   N)

__future__r   typingr   r   r   r   r   r   r	   r   r   r   r   <module>   s    