o
    Th!                     @   s   d dl Z d dlZddlmZ g adddZg adddZG dd	 d	eZ	e	d
e
fi ZG dd deZG dd de
ZG dd de
ZG dd de
ZG dd de
ZG dd deZG dd deZG dd deZG dd deZdd ZdS )     N   )callablec                 C   s   t | ||||g d S N)_transition_gathererappend)eventfrom_toactionguard r   Q/var/www/html/venv/lib/python3.10/site-packages/invoke/vendor/fluidity/machine.py
transition	      r   c                 C   s   t | ||g d S r   )_state_gathererr   nameenterexitr   r   r   state      r   c                       s   e Zd Z fddZ  ZS )MetaStateMachinec                    sV   t t| | |||}g |_i |_tD ]}|j|  qtD ]}|j|  qg ag a|S r   )	superr   __new___class_transitions_class_statesr   _add_class_stater   _add_class_transition)clsr   bases
dictionaryMachinesi	__class__r   r   r      s   zMetaStateMachine.__new__)__name__
__module____qualname__r   __classcell__r   r   r$   r   r      s    r   StateMachineBasec                       s   e Zd Zdd Z fddZdd Zdd Zd	d
 Zedd Z	d*ddZ
dd ZeeZdd Zdd Zdd Zdd Zedd Zd*ddZdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Z  ZS )+StateMachinec                 C   sR   |    |   |   t| jr|  | _| | j| _| j|  |   d S r   )	"_bring_definitions_to_object_level_inject_into_parts_validate_machine_definitionsr   initial_state_state_by_name_current_state_object	run_enter_create_state_gettersselfr   r   r   __init__'   s   

zStateMachine.__init__c                    s    t t| | }i |_g |_|S r   )r   r+   r   _states_transitions)r   argskwargsobjr$   r   r   r   1   s   zStateMachine.__new__c                 C   s$   | j | jj | j| jj d S r   )r7   updater%   r   r8   extendr   r4   r   r   r   r,   7   s   z/StateMachine._bring_definitions_to_object_levelc                 C   s*   | j  | jfD ]
}|D ]}| |_qqd S r   )r7   valuesr8   machine)r5   
collection	componentr   r   r   r-   ;   s
   zStateMachine._inject_into_partsc                 C   s.   t | jdk rtdt| dd stdd S )N   z!There must be at least two statesr/   z!There must exist an initial state)lenr7   InvalidConfigurationgetattrr4   r   r   r   r.   @   s
   z*StateMachine._validate_machine_definitionsc                 C   s   t |||| j|< d S r   )_Stater   )r   r   r   r   r   r   r   r   F   s   zStateMachine._add_class_stateNc                 C   s8   t |||}t| | | | | j || j|< d S r   )rF   setattrgetter_namegetter_method__get__r%   r7   )r5   r   r   r   r   r   r   r   	add_stateJ   s   zStateMachine.add_statec                 C   s   | j jS r   )r1   r   r4   r   r   r   _current_state_nameO   s   z StateMachine._current_state_namec                 C   s   dS )zK
        This method is called whenever a state change is executed
        Nr   )r5   r   r	   r   r   r   changing_stateT   s   zStateMachine.changing_statec                 C   s   |  | jj|j || _d S r   )rM   r1   r   r5   r   r   r   r   
_new_stateZ   s   
zStateMachine._new_statec                 C   s   t | j S r   )listr7   r>   r4   r   r   r   _state_objects^      zStateMachine._state_objectsc                 C   s   dd |   D S )Nc                 S   s   g | ]}|j qS r   r   .0r"   r   r   r   
<listcomp>b   s    z'StateMachine.states.<locals>.<listcomp>)rQ   r4   r   r   r   statesa   s   zStateMachine.statesc                    sH   t | fddt|D  j| ||} j| t ||  d S )Nc                    s   g | ]} j | qS r   )r   rT   r   r   r   rV   f       z6StateMachine._add_class_transition.<locals>.<listcomp>)_Transition_listizer   r   r   rG   event_method)r   r   r   r	   r
   r   r   r   rX   r   r   d   s
   z"StateMachine._add_class_transitionc                    sR   t | fddt|D  |||} j| t ||   j d S )Nc                    s   g | ]}  |qS r   )r0   rT   r4   r   r   rV   l   rY   z/StateMachine.add_transition.<locals>.<listcomp>)	rZ   r[   r0   r8   r   rG   r\   rJ   r%   )r5   r   r   r	   r
   r   r   r   r4   r   add_transitionk   s
   zStateMachine.add_transitionc                 O   s:   |  |}| |}| |}|j| g|R i | d S r   )_transitions_by_name_ensure_from_validity_check_guardsrun)r5   
event_namer9   r:   transitionsthis_transitionr   r   r   _process_transitionsq   s   


z!StateMachine._process_transitionsc                 C   s0   |   D ]}t| | | | | j qd S r   )rQ   rG   rH   rI   rJ   r%   rN   r   r   r   r3   w   s    z"StateMachine._create_state_gettersc                 C   s$   |   D ]}|j|kr|  S qd S r   )rQ   r   )r5   r   r   r   r   r   r0   {   s
   
zStateMachine._state_by_namec                    s   t t fdd| jS )Nc                    s
   | j  kS r   )r   r   rS   r   r   <lambda>   s   
 z3StateMachine._transitions_by_name.<locals>.<lambda>)rP   filterr8   )r5   r   r   rS   r   r^      r   z!StateMachine._transitions_by_namec                    s>   t t fdd|}t|dkrtd|d j jf |S )Nc                    s   |   jS r   )is_valid_fromr1   rf   r4   r   r   rg      s    z4StateMachine._ensure_from_validity.<locals>.<lambda>r   zCannot %s from %s)rP   rh   rC   InvalidTransitionr   current_state)r5   rc   valid_transitionsr   r4   r   r_      s   
z"StateMachine._ensure_from_validityc                 C   sR   g }|D ]}| | r|| qt|dkrtdt|dkr%td|d S )Nr   z*Guard is not satisfied for this transitionr   z3More than one transition was allowed for this event)check_guardr   rC   GuardNotSatisfiedForkedTransition)r5   rc   allowed_transitionsr   r   r   r   r`      s   

zStateMachine._check_guardsNN)r&   r'   r(   r6   r   r,   r-   r.   classmethodr   rK   rL   propertyrk   rM   rO   rQ   rW   r   r]   re   r3   r0   r^   r_   r`   r)   r   r   r$   r   r+   %   s0    




	r+   c                   @   4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )rZ   c                 C   s&   || _ || _|| _|| _t|| _d S r   )r   r   r	   r
   _Guardr   )r5   r   r   r	   r
   r   r   r   r   r6      s
   z_Transition.__init__c                    s$    fdd}d j  |_ j |_|S )Nc                    s   | j  jg|R i |}d S r   )re   r   )r?   r9   r:   these_transitionsr4   r   r   generated_event   s   z1_Transition.event_method.<locals>.generated_eventzevent %s)r   __doc__r&   )r5   rw   r   r4   r   r\      s   z_Transition.event_methodc                 C   s   |t | jv S r   )r[   r   )r5   r   r   r   r   ri      rR   z_Transition.is_valid_fromc                 C   s   | j |S r   )r   checkr5   r?   r   r   r   rm         z_Transition.check_guardc                 O   sF   |j | || j | j| t|j| jg|R i | d S r   )r1   run_exitrO   r	   r2   _ActionRunnerra   r
   )r5   r?   r9   r:   r   r   r   ra      s   "z_Transition.runN)r&   r'   r(   r6   r\   ri   rm   ra   r   r   r   r   rZ      s    rZ   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )ru   c                 C   
   || _ d S r   )r
   )r5   r
   r   r   r   r6         
z_Guard.__init__c                 C   s:   | j d u rdS t| j }d}|D ]
}|o| ||}q|S )NT)r
   r[   	_evaluate)r5   r?   itemsresultitemr   r   r   ry      s   

z_Guard.checkc                 C   s,   t |r||S t||}t |r| }|S r   )r   rE   )r5   r?   r   r   r   r   r   r      s   
z_Guard._evaluateN)r&   r'   r(   r6   ry   r   r   r   r   r   ru      s    	ru   c                   @   rt   )rF   c                 C   s   || _ || _|| _d S r   r   )r5   r   r   r   r   r   r   r6      s   
z_State.__init__c                 C   s
   d| j  S )Nzis_%srS   r4   r   r   r   rH      r   z_State.getter_namec                    s    fdd}|S )Nc                    s   | j  jkS r   )rk   r   )self_machiner4   r   r   state_getter   r{   z*_State.getter_method.<locals>.state_getterr   )r5   r   r   r4   r   rI      s   z_State.getter_methodc                 C      t || j d S r   )r}   ra   r   rz   r   r   r   r2      r   z_State.run_enterc                 C   r   r   )r}   ra   r   rz   r   r   r   r|      r   z_State.run_exitN)r&   r'   r(   r6   rH   rI   r2   r|   r   r   r   r   rF      s    rF   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
r}   c                 C   r~   r   )r?   rz   r   r   r   r6      r   z_ActionRunner.__init__c                 O   s6   |sd S t |}|D ]}| j|g|R i | q
d S r   )r[   _run_action)r5   action_paramr9   r:   action_itemsaction_itemr   r   r   ra      s   z_ActionRunner.runc                 O   sL   t |r| j|| jg|R i | d S | jt| j|g|R i | d S r   )r   _try_to_run_with_argsr?   rE   r5   r
   r9   r:   r   r   r   r      s    $z_ActionRunner._run_actionc                 O   s0   z
||i | W d S  t y   |  Y d S w r   )	TypeErrorr   r   r   r   r      s
   z#_ActionRunner._try_to_run_with_argsN)r&   r'   r(   r6   ra   r   r   r   r   r   r   r}      s
    r}   c                   @      e Zd ZdS )rD   Nr&   r'   r(   r   r   r   r   rD          rD   c                   @   r   )rj   Nr   r   r   r   r   rj      r   rj   c                   @   r   )rn   Nr   r   r   r   r   rn     r   rn   c                   @   r   )ro   Nr   r   r   r   r   ro     r   ro   c                 C   s   t | ttfv r
| p| gS r   )typerP   tuple)valuer   r   r   r[     s   r[   rq   )reinspectbackwardscompatr   r   r   r   r   r   r   objectr*   r+   rZ   ru   rF   r}   	ExceptionrD   rj   rn   ro   r[   r   r   r   r   <module>   s&    

s