o
    Uj                     @  s   d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	m
Z
 d dlmZmZ er.d dlmZ eddG d	d
 d
ZeddG dd dZerPG dd deZG dd dZd'ddZd(ddZddd)d!d"Zd*d%d&ZdS )+    )annotations)Callable)	dataclass)TYPE_CHECKINGAnycastoverload)AttrDictMagicFilter)HandlerObjectT)frozenc                   @  s   e Zd ZU ded< ded< dS )Flagstrnamer   valueN)__name__
__module____qualname____annotations__ r   r   Q/opt/telega-widget/.venv/lib/python3.10/site-packages/aiogram/dispatcher/flags.pyr      s   
 r   c                   @  sf   e Zd ZU ded< edddZddd	ZedddZedddZedddZ	ddddZdS )FlagDecoratorr   flagreturnc                 C  s   | |S Nr   )clsr   r   r   r   
_with_flag   s   zFlagDecorator._with_flagr   r   c                 C  s   t | jj|}| |S r   )r   r   r   r   )selfr   new_flagr   r   r   _with_value   s   
zFlagDecorator._with_valueCallable[..., Any]c                C     d S r   r   r   r   r   r   r   __call__      zFlagDecorator.__call__c                C  r!   r   r   r"   r   r   r   r#   #   r$   kwargsc                 K  r!   r   r   )r   r%   r   r   r   r#   '   r$   N
Any | None"Callable[..., Any] | FlagDecoratorc                 K  sp   |r
|r
d}t ||d ur*t|r*i t|| jj| jji|_ttdt	f |S | 
|d u r5t|S |S )Nz;The arguments `value` and **kwargs can not be used together.)
ValueErrorcallableextract_flags_from_objectr   r   r   aiogram_flagr   r   r   r   r	   )r   r   r%   msgr   r   r   r#   +   s   )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   classmethodr   r   r   r#   r   r   r   r   r      s   
 
r   c                   @  s   e Zd Z			ddddZdS )_ChatActionFlagProtocol.actionr   intervalfloatinitial_sleepr%   r   r   r   c                 K  r!   r   r   )r   r/   r0   r2   r%   r   r   r   r#   @   s   z _ChatActionFlagProtocol.__call__N)...)
r/   r   r0   r1   r2   r1   r%   r   r   r   )r   r   r   r#   r   r   r   r   r.   ?   s
    r.   c                   @  s(   e Zd ZU d
ddZerded< d	S d	S )FlagGeneratorr   r   r   r   c                 C  s&   |d dkrd}t |tt|dS )Nr   _z(Flag name must NOT start with underscoreT)AttributeErrorr   r   )r   r   r,   r   r   r   __getattr__K   s   zFlagGenerator.__getattr__r.   chat_actionN)r   r   r   r   )r   r   r   r6   r   r   r   r   r   r   r3   J   s
   
 
r3   objr   r   dict[str, Any]c                 C  s"   t | dsi S ttttf | jS )Nr+   )hasattrr   dictr   r   r+   )r8   r   r   r   r*   U   s   
r*   handlerHandlerObject | dict[str, Any]c                 C  s.   t | trd| v r| d } t| dr| jS i S )z
    Extract flags from handler or middleware context data

    :param handler: handler object or data
    :return: dictionary with all handler flags
    r<   flags)
isinstancer;   r:   r>   )r<   r   r   r   extract_flags[   s
   
r@   N)defaultr   r   rA   r&   c                C  s   t | }|||S )z
    Get flag by name

    :param handler: handler object or data
    :param name: name of the flag
    :param default: default value (None)
    :return: value of the flag or default
    )r@   get)r<   r   rA   r>   r   r   r   get_flagi   s   rC   magicr
   c                 C  s   t | }|t|S )z
    Check flags via magic filter

    :param handler: handler object or data
    :param magic: instance of the magic
    :return: the result of magic filter check
    )r@   resolver	   )r<   rD   r>   r   r   r   check_flags{   s   rF   )r8   r   r   r9   )r<   r=   r   r9   )r<   r=   r   r   rA   r&   r   r   )r<   r=   rD   r
   r   r   )
__future__r   collections.abcr   dataclassesr   typingr   r   r   r   magic_filterr	   r
    aiogram.dispatcher.event.handlerr   r   r   r.   r3   r*   r@   rC   rF   r   r   r   r   <module>   s&    )

