o
    Fh                  	   @   sH  d dl mZ d dlmZmZmZmZ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rLG dd deZG dd dZdedeeef fddZdedeeef f deeef fddZdddedeeef f dedee defddZdedeeef f dedefddZdS )     )	dataclass)TYPE_CHECKINGAnyCallableDictOptionalUnioncastoverload)AttrDictMagicFilter)HandlerObjectT)frozenc                   @   s   e Zd ZU eed< eed< dS )FlagnamevalueN)__name__
__module____qualname__str__annotations__r    r   r   K/var/www/html/venv/lib/python3.10/site-packages/aiogram/dispatcher/flags.pyr   
   s   
 r   c                
   @   s   e Zd ZU eed< ededd fddZdedd fddZe	de
def de
def fd	d
Ze	dedd fdd
Ze	dedd fdd
Z	ddee dedee
def d f fdd
ZdS )FlagDecoratorflagreturnc                 C   s   | |S Nr   )clsr   r   r   r   
_with_flag   s   zFlagDecorator._with_flagr   c                 C   s   t | jj|}| |S r   )r   r   r   r   )selfr   new_flagr   r   r   _with_value   s   
zFlagDecorator._with_value.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%   Nc                 K   sl   |r|rt d|d ur(t|r(i t|| jj| jji|_ttdt	f |S | 
|d u r3t|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&   r   r   r   r$   (   s   r   )r   r   r   r   r   classmethodr   r   r!   r
   r   r$   r   r   r   r   r   r   r      s&   
 $r   c                   @   s2   e Zd Z			d
dededededef
ddZd	S )_ChatActionFlagProtocol.actionintervalinitial_sleepr&   r   c                 K   r"   r   r   )r   r-   r.   r/   r&   r   r   r   r$   <   s   z _ChatActionFlagProtocol.__call__N)...)r   r   r   r   floatr   r   r$   r   r   r   r   r,   ;   s    r,   c                   @   s0   e Zd ZU dedefddZereed< dS dS )FlagGeneratorr   r   c                 C   s"   |d dkr
t dtt|dS )Nr   _z(Flag name must NOT start with underscoreT)AttributeErrorr   r   )r   r   r   r   r   __getattr__G   s   zFlagGenerator.__getattr__chat_actionN)	r   r   r   r   r   r4   r   r,   r   r   r   r   r   r1   F   s
   
 r1   objr   c                 C   s"   t | dsi S ttttf | jS )Nr*   )hasattrr	   r   r   r   r*   )r6   r   r   r   r)   P   s   
r)   handlerr   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
    r8   flags)
isinstancedictr7   r9   )r8   r   r   r   extract_flagsV   s
   
r<   N)defaultr   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)r8   r   r=   r9   r   r   r   get_flagd   s   r?   magicc                 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   )r8   r@   r9   r   r   r   check_flagsv   s   rB   )dataclassesr   typingr   r   r   r   r   r   r	   r
   magic_filterr   r    aiogram.dispatcher.event.handlerr   r   r   r,   r1   r   r)   r<   r?   rB   r   r   r   r   <module>   s2    ((
*
*