o
    HEDi%                     @   s   d dl Z d dlZd dlmZ d dlmZ edZedZeG dd dZG dd	 d	e	Z
G d
d de	ZdefddZde jdefddZG dd dZdS )    N)
ContextVar)	dataclassctx_handler_datacurrent_handlerc                   @   s&   e Zd ZU eed< eed< eed< dS )	FilterObjfilterkwargsis_asyncN)__name__
__module____qualname__callable__annotations__dictbool r   r   i/var/www/www-root/data/www/ovozai.pdev.uz/venv/lib/python3.10/site-packages/aiogram/dispatcher/handler.pyr   
   s   
 r   c                   @      e Zd ZdS )SkipHandlerNr
   r   r   r   r   r   r   r          r   c                   @   r   )CancelHandlerNr   r   r   r   r   r      r   r   funcc                 C   s$   t | dr| j} t | dst| S )N__wrapped__)hasattrr   inspectgetfullargspec)r   r   r   r   	_get_spec   s   


r   specr   c                    s     j r|S  fdd| D S )Nc                    s*   i | ]\}}|t  j j v r||qS r   )setargs
kwonlyargs).0kvr   r   r   
<dictcomp>#   s   * z_check_spec.<locals>.<dictcomp>)varkwitems)r   r   r   r%   r   _check_spec   s   r)   c                   @   sB   e Zd ZdddZdddZdd Zd	d
 ZeG dd dZdS )HandlerTNc                 C   s   || _ || _g | _|| _d S )N)
dispatcheroncehandlersmiddleware_key)selfr+   r,   r.   r   r   r   __init__'   s   
zHandler.__init__c                 C   st   ddl m} t|}|rt|tttfs|g}|| j|}tj	|||d}|du r1| j
| dS | j
|| dS )z
        Register callback

        Filters can be awaitable or not.

        :param handler: coroutine
        :param filters: list of filters
        :param index: you can reorder handlers
           )get_filters_spec)handlerr   filtersN)r4   r2   r   
isinstancelisttupler   r+   r*   
HandlerObjr-   appendinsert)r/   r3   r4   indexr2   r   recordr   r   r   register.   s   
zHandler.registerc                 C   s8   | j D ]}||ks||jkr| j |  dS qtd)zS
        Remove handler

        :param handler: callback
        :return:
        TzThis handler is not registered!)r-   r3   remove
ValueError)r/   r3   handler_objr   r   r   
unregisterF   s   
zHandler.unregisterc           
         s  ddl m}m} g }i }t| | jr5z| jjd| j ||f I dH  W n t	y4   | Y S w z| j
D ]}z|||j |I dH  W n	 |yR   Y q9w t|j}zcz=| jrp| jjd| j ||f I dH  t|j|}|j|i |I dH }	|	dur||	 | jrW W t|  n-W n ty   Y W t| q9 t	y   Y W t|  nw W t| q9t| w W | jr| jjd| j |||f I dH  |S | jr| jjd| j |||f I dH  w w )zH
        Notify handlers

        :param args:
        :return:
        r1   )check_filtersFilterNotPassedpre_process_Nprocess_post_process_)r4   rB   rC   ctx_datar   r.   r+   
middlewaretriggerr   r-   updater   r3   r)   r   r9   r,   resetr   )
r/   r    rB   rC   resultsdatar@   	ctx_tokenpartial_dataresponser   r   r   notifyU   sd   
(
$



zHandler.notifyc                   @   s8   e Zd ZU eed< ejed< dZej	ej
e  ed< dS )zHandler.HandlerObjr3   r   Nr4   )r
   r   r   r   r   r   FullArgSpecr4   typingOptionalIterabler   r   r   r   r   r8      s   
 
r8   )TN)NN)	r
   r   r   r0   r=   rA   rQ   r   r8   r   r   r   r   r*   &   s    

2r*   )r   rS   contextvarsr   dataclassesr   rG   r   r   	Exceptionr   r   r   r   rR   r   r)   r*   r   r   r   r   <module>   s    