o
    HEDiP                     @   sJ   d dl Z d dlZe dZG dd dZG dd dZG dd deZdS )	    Nzaiogram.Middlewarec                   @   s@   e Zd ZdZdd Zedd Zdd Zded	e	j
fd
dZdS )MiddlewareManagerz:
    Middlewares manager. Works only with dispatcher.
    c                 C   s    || _ |j| _|j| _g | _dS )zI
        Init

        :param dispatcher: instance of Dispatcher
        N)
dispatcherbotstorageapplications)selfr    r   m/var/www/www-root/data/www/ovozai.pdev.uz/venv/lib/python3.10/site-packages/aiogram/dispatcher/middlewares.py__init__   s   
zMiddlewareManager.__init__c                 C   s   | j jS N)r   loopr   r   r   r	   r      s   zMiddlewareManager.loopc                 C   s\   t |tstdt| | rtd| j| ||  t	
d|jj d |S )zO
        Setup middleware

        :param middleware:
        :return:
        z8`middleware` must be an instance of BaseMiddleware, not z That middleware is already used!zLoaded middleware '')
isinstanceBaseMiddleware	TypeErrortypeis_configured
ValueErrorr   appendsetuplogdebug	__class____name__)r   
middlewarer   r   r	   r      s   

zMiddlewareManager.setupactionargsc                    s$   | j D ]}|||I dH  qdS )zz
        Call action to middlewares with args lilt.

        :param action:
        :param args:
        :return:
        N)r   trigger)r   r   r   appr   r   r	   r   ,   s   
zMiddlewareManager.triggerN)r   
__module____qualname____doc__r
   propertyr   r   strtypingIterabler   r   r   r   r	   r      s    
r   c                   @   sH   e Zd ZdZdd ZedefddZdd Zde	fd	d
Z
dd ZdS )r   z
    Base class for middleware.

    All methods on the middle always must be coroutines and name starts with "on_" like "on_process_message".
    c                 C   s   d| _ d | _d S )NF)_configured_managerr   r   r   r	   r
   ?   s   
zBaseMiddleware.__init__returnc                 C   s   | j du r	td| j S )z/
        Instance of MiddlewareManager
        NzMiddleware is not configured!)r(   RuntimeErrorr   r   r   r	   managerC   s   
zBaseMiddleware.managerc                 C   s   || _ d| _dS )zY
        Mark middleware as configured

        :param manager:
        :return:
        TN)r(   r'   )r   r+   r   r   r	   r   L   s   
zBaseMiddleware.setupc                 C   s   | j S )zB
        Check middleware is configured

        :return:
        )r'   r   r   r   r	   r   V   s   zBaseMiddleware.is_configuredc                    s2   d| }t | |d}|sdS || I dH  dS )z_
        Trigger action.

        :param action:
        :param args:
        :return:
        on_N)getattr)r   r   r   handler_namehandlerr   r   r	   r   ^   s   
zBaseMiddleware.triggerN)r   r    r!   r"   r
   r#   r   r+   r   boolr   r   r   r   r   r	   r   8   s    
r   c                   @   s8   e Zd ZdZdZedd Zdd Zdd Zdd	 Z	dS )
LifetimeControllerMiddlewareNc                 C   sL   | j d u r#g | _ | jr#| jD ]}| j d| d| d| g q| j S )Npre_process_process_post_process_)_skip_actionsskip_patternsextend)r   itemr   r   r	   skip_actionss   s   

z)LifetimeControllerMiddleware.skip_actionsc                       d S r   r   r   objdatar   r   r   r	   pre_process      z(LifetimeControllerMiddleware.pre_processc                    r:   r   r   r;   r   r   r	   post_process   r?   z)LifetimeControllerMiddleware.post_processc                    sp   || j v rdS |^}}}|dr"| j||g|R  I d H  dS |dr6| j||g|R  I d H  dS dS )NFr2   r4   T)r9   
startswithr>   r@   )r   r   r   r<   r=   r   r   r	   r      s   


z$LifetimeControllerMiddleware.trigger)
r   r    r!   r6   r5   r#   r9   r>   r@   r   r   r   r   r	   r1   m   s    
r1   )loggingr%   	getLoggerr   r   r   r1   r   r   r   r	   <module>   s    
15