a
    9g                     @   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ee ee ddddZedddd	Zeee dd
dZ	dddddZ
deddddZedddZeZdeee edddZeedddZed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   n/var/www/vosh/data/www/fastworkle.ru/webshop-tgbot-v.1.0/venv/lib/python3.9/site-packages/aiogram/fsm/state.py__init__   s    zState.__init__zType[StatesGroup]r   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 r4| jr4| jj}n| jrB| j}nd}| d| j  S )N*@:)r   r   r   __full_group_name__r   r   r   r   r   r
      s    
zState.state)r   r   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namer   c                 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_stater   c                 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__)otherr   c                 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   s
   t | jS r   )hashr
   r   r   r   r   __hash__@   s    zState.__hash__)NN)N)__name__
__module____qualname____doc__r   r1   r   propertyr   r
   r!   r$   r(   __repr__r   boolr-   r   r3   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
edddZed ed dddZeed df dddZeedf dddZeedf dddZeedddZedddZee d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 ]F\}}t|tr@|| q"t|r"t|t	r"|
|}	||	 q"d |_t||_t||_tdd |D |_| |_| |_| |_|S )Nc                 s   s   | ]}|j V  qd S r   r'   .0r
   r   r   r   	<genexpr>^       z*StatesGroupMeta.__new__.<locals>.<genexpr>)super__new__itemsr/   r	   appendinspectisclassr   r   _prepare_childr?   tupler@   rA   rB   _get_all_childsrC   _get_all_statesrD   _get_all_states_namesrE   )
Zmcsr#   bases	namespacekwargsclsZstatesZchildsargchildr0   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   r6   rX   r   r   r   r   j   s    z#StatesGroupMeta.__full_group_name__)rZ   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   rE   )rX   rZ   r   r   r   rP   p   s    

zStatesGroupMeta._prepare_childc                 C   s    | j }| j D ]}||j 7 }q|S r   )r@   )rX   resultrZ   r   r   r   rR   ~   s    
zStatesGroupMeta._get_all_childsc                 C   s    | j }| jD ]}||j7 }q|S r   )rA   r@   rD   )rX   r_   r   r   r   r   rS      s    
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'   rF   r   r   r   rH      rI   z8StatesGroupMeta._get_all_states_names.<locals>.<genexpr>)rQ   rD   r^   r   r   r   rT      s    z%StatesGroupMeta._get_all_states_names)itemr   c                 C   s@   t |tr|| jv S t |tr(|| jv S t |tr<|| jv S dS )NF)r/   r1   rE   r	   rD   r>   rC   )rX   r`   r   r   r   __contains__   s    





zStatesGroupMeta.__contains__c                 C   s   d| j  dS )Nz<StatesGroup 'r&   )r   r   r   r   r   r(      s    zStatesGroupMeta.__str__c                 C   s
   t | jS r   )iterrD   r   r   r   r   __iter__   s    zStatesGroupMeta.__iter__)r6   r7   r8   __annotations__r   r	   r1   r   r   rK   r:   r   rP   rR   rS   rT   r   r<   ra   r(   r   rc   __classcell__r   r   r[   r   r>   D   s$   
	r>   c                   @   sH   e Zd Zeed  dddZd
eee e	dddZ
eddd	ZdS )r   r   c                 C   s   | j d u r| S | j  S r   )r?   get_rootr^   r   r   r   rf      s    
zStatesGroup.get_rootNr)   c                 C   s   |t | jv S r   )typerE   r,   r   r   r   r-      s    zStatesGroup.__call__c                 C   s   dt | j S )NzStatesGroup )rg   r   r   r   r   r   r(      s    zStatesGroup.__str__)N)r6   r7   r8   classmethodr   rf   r   r   r1   r<   r-   r(   r   r   r   r   r      s   r   )	metaclassr   r'   )rN   typingr   r   r   r   r   r   Zaiogram.typesr   r	   rg   r>   r   Zdefault_stateZ	any_stater   r   r   r   <module>   s    =Y