o
    LDi                     @   st   d dl Z d dlmZ d dlmZmZ d dlmZ G dd dZG dd de	Z
G d	d
 d
e
dZe ZeddZdS )    N)Iterator)Anyno_type_check)TelegramObjectc                   @   s   e Zd ZdZddedB dedB ddfddZed d	d
ZededB fddZd!ddZ	dddeddfddZ
defddZeZd"dededB defddZdedefddZdefddZdS )#Statez
    State object
    Nstate
group_namereturnc                 C   s   || _ || _d | _d S N)_state_group_name_group)selfr   r    r   ]/var/www/www-root/data/www/77.83.87.30/venv/lib/python3.10/site-packages/aiogram/fsm/state.py__init__   s   
zState.__init__type[StatesGroup]c                 C   s   | j s	d}t|| j S )NzThis state is not in any group.)r   RuntimeError)r   msgr   r   r   group   s   zState.groupc                 C   sV   | j d u s
| j dkr| j S | jd u r| jr| jj}n	| jr!| j}nd}| d| j  S )N*@:)r   r   r   __full_group_name__)r   r   r   r   r   r      s   
zState.stater   c                 C   s    t |tsd}t||| _d S )Nz%Group must be subclass of StatesGroup)
issubclassStatesGroup
ValueErrorr   )r   r   r   r   r   r   
set_parent'   s   

zState.set_parentownernamec                 C   s   | j d u r|| _ | | d S r
   )r   r   )r   r   r   r   r   r   __set_name__-   s   
zState.__set_name__c                 C   s   d| j pd dS )Nz<State ' '>r   r   r   r   r   __str__2   s   zState.__str__event	raw_statec                 C   s   | j dkrdS || j kS )Nr   Tr#   r   r&   r'   r   r   r   __call__7   s   

zState.__call__otherc                 C   s0   t || jr| j|jkS t |tr| j|kS tS r
   )
isinstance	__class__r   strNotImplemented)r   r*   r   r   r   __eq__<   s
   

zState.__eq__c                 C   
   t | jS r
   )hashr   r$   r   r   r   __hash__C      
zState.__hash__)NN)r	   r   )r   r   r	   Nr
   )__name__
__module____qualname____doc__r-   r   propertyr   r   r   r    r%   __repr__r   boolr)   objectr/   intr2   r   r   r   r   r      s     
r   c                       s>  e Zd ZU ed dB ed< eed df ed< eedf ed< eedf ed< eed df ed< eedf ed	< eedf ed
< e fddZ	e
defddZded ded fddZdeed df fddZdeedf fddZdeedf fddZdedefddZdefddZdee fddZ  ZS ) StatesGroupMetar   N
__parent__.
__childs__
__states____state_names____all_childs____all_states____all_states_names__c           
         s   t  | |||}g }g }| D ]!}t|tr|| qt|r2t|t	r2|
|}	||	 qd |_t||_t||_tdd |D |_| |_| |_| |_|S )Nc                 s   s    | ]}|j V  qd S r
   r#   .0r   r   r   r   	<genexpr>a   s    z*StatesGroupMeta.__new__.<locals>.<genexpr>)super__new__valuesr+   r   appendinspectisclassr   r   _prepare_childr>   tupler?   r@   rA   _get_all_childsrB   _get_all_statesrC   _get_all_states_namesrD   )
mcsr   bases	namespacekwargsclsstateschildsargchildr,   r   r   rI   P   s$   







zStatesGroupMeta.__new__r	   c                 C   s    | j r| j j d| j S | jS )N.)r>   r   r4   rW   r   r   r   r   m   s   z#StatesGroupMeta.__full_group_name__r[   c                 C   s   | |_ | |_|S )a  Prepare child.

        While adding `cls` for its children, we also need to recalculate
        the parameter `__all_states_names__` for each child
        `StatesGroup`. Since the child class appears before the
        parent, at the time of adding the parent, the child's
        `__all_states_names__` is already recorded without taking into
        account the name of current parent.
        )r>   rR   rD   )rW   r[   r   r   r   rN   s   s   

zStatesGroupMeta._prepare_childc                 C   s    | j }| j D ]}||j 7 }q|S r
   )r?   )rW   resultr[   r   r   r   rP         
zStatesGroupMeta._get_all_childsc                 C   s    | j }| jD ]}||j7 }q|S r
   )r@   r?   rC   )rW   r_   r   r   r   r   rQ      r`   zStatesGroupMeta._get_all_statesc                 C   s   t dd | jD S )Nc                 s   s    | ]	}|j r|j V  qd S r
   r#   rE   r   r   r   rG      s    z8StatesGroupMeta._get_all_states_names.<locals>.<genexpr>)rO   rC   r^   r   r   r   rR      s   z%StatesGroupMeta._get_all_states_namesitemc                 C   s@   t |tr
|| jv S t |tr|| jv S t |tr|| jv S dS )NF)r+   r-   rD   r   rC   r=   rB   )rW   ra   r   r   r   __contains__   s   





zStatesGroupMeta.__contains__c                 C   s   d| j  dS )Nz<StatesGroup 'r"   )r   r$   r   r   r   r%         zStatesGroupMeta.__str__c                 C   r0   r
   )iterrC   r$   r   r   r   __iter__   r3   zStatesGroupMeta.__iter__)r4   r5   r6   type__annotations__rO   r   r-   r   rI   r8   r   rN   rP   rQ   rR   r   r:   rb   r%   r   re   __classcell__r   r   r\   r   r=   G   s&   
 	r=   c                   @   sL   e Zd Zeded  fddZddededB defddZ	defd	d
Z
dS )r   r	   c                 C   s   | j d u r| S | j  S r
   )r>   get_rootr^   r   r   r   ri      s   

zStatesGroup.get_rootNr&   r'   c                 C   s   |t | jv S r
   )rf   rD   r(   r   r   r   r)      rc   zStatesGroup.__call__c                 C   s   dt | j S )NzStatesGroup )rf   r   r$   r   r   r   r%      s   zStatesGroup.__str__r
   )r4   r5   r6   classmethodrf   ri   r   r-   r:   r)   r%   r   r   r   r   r      s
    r   )	metaclassr   r#   )rL   collections.abcr   typingr   r   aiogram.typesr   r   rf   r=   r   default_state	any_stater   r   r   r   <module>   s    ?Y