o
    Fh                     @   sx   d dl Z d dlmZmZmZmZ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)AnyIteratorOptionalTupleTypeno_type_check)TelegramObjectc                   @   s   e Zd ZdZddee dee ddfddZed d	d
Zedee 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e 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   D/var/www/html/venv/lib/python3.10/site-packages/aiogram/fsm/state.py__init__   s   
zState.__init__Type[StatesGroup]c                 C   s   | j std| j S )NzThis state is not in any group.)r   RuntimeErrorr   r   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	td|| _d S )Nz%Group must be subclass of StatesGroup)
issubclassStatesGroup
ValueErrorr   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__/   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__4   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__9   s
   

zState.__eq__c                 C   
   t | jS r   )hashr
   r   r   r   r   __hash__@      
zState.__hash__)NN)r   r   )r   r   r   Nr   )__name__
__module____qualname____doc__r   r0   r   propertyr   r
   r!   r$   r(   __repr__r   boolr,   r   r2   intr5   r   r   r   r   r	      s     
r	   c                       s*  e Zd ZU ded< d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 )!StatesGroupMetazOptional[Type[StatesGroup]]
__parent__zTuple[Type[StatesGroup], ...]
__childs__.
__states____state_names__r   __all_childs____all_states____all_states_names__c           
         s   t  | |||}g }g }| D ]#\}}t|tr || qt|r4t|t	r4|
|}	||	 qd |_t||_t||_tdd |D |_| |_| |_| |_|S )Nc                 s   s    | ]}|j V  qd S r   r'   .0r
   r   r   r   	<genexpr>^   s    z*StatesGroupMeta.__new__.<locals>.<genexpr>)super__new__itemsr.   r	   appendinspectisclassr   r   _prepare_childr@   tuplerA   rB   rC   _get_all_childsrD   _get_all_statesrE   _get_all_states_namesrF   )
mcsr#   bases	namespacekwargsclsstateschildsargchildr/   r   r   rK   M   s$   







zStatesGroupMeta.__new__r   c                 C   s    | j rd| j j| jfS | jS )N.)r@   joinr   r7   rY   r   r   r   r   j   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@   rT   rF   )rY   r]   r   r   r   rP   p   s   

zStatesGroupMeta._prepare_childc                 C   s    | j }| j D ]}||j 7 }q|S r   )rA   )rY   resultr]   r   r   r   rR   ~      
zStatesGroupMeta._get_all_childsc                 C   s    | j }| jD ]}||j7 }q|S r   )rB   rA   rE   )rY   rb   r   r   r   r   rS      rc   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'   rG   r   r   r   rI      s    z8StatesGroupMeta._get_all_states_names.<locals>.<genexpr>)rQ   rE   ra   r   r   r   rT      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.   r0   rF   r	   rE   r?   rD   )rY   rd   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   r3   r   )iterrE   r   r   r   r   __iter__   r6   zStatesGroupMeta.__iter__)r7   r8   r9   __annotations__r   r	   r0   r   r   rK   r;   r   rP   rR   rS   rT   r   r=   re   r(   r   rh   __classcell__r   r   r^   r   r?   D   s&   
 	r?   c                   @   sL   e Zd Zeded  fddZddedee 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_rootra   r   r   r   rk      s   

zStatesGroup.get_rootNr)   r*   c                 C   s   |t | jv S r   )typerF   r+   r   r   r   r,      rf   zStatesGroup.__call__c                 C   s   dt | j S )NzStatesGroup )rl   r   r   r   r   r   r(      s   zStatesGroup.__str__r   )r7   r8   r9   classmethodr   rk   r   r   r0   r=   r,   r(   r   r   r   r   r      s
    r   )	metaclassr   r'   )rN   typingr   r   r   r   r   r   aiogram.typesr   r	   rl   r?   r   default_state	any_stater   r   r   r   <module>   s     =Y