U
    g3                     @   s  U d dl mZmZmZmZmZmZmZ ddlT ddl	m
Z
mZ ddddd	d
dddddgZG dd deedZG dd deedZG dd deedZG dd deedZG dd	 d	eedZG dd
 d
eedZG dd deedZG dd deedZG dd deedZG dd deedZG dd deedZG dd deedZG dd deedZeee eee eeee eee ee f f ee f f f Zeeeeeeieeeeeieeeieeeieeeiei ei ei ieeeee eeefeiee!ee ee!efee efeieeeeeieeeieeeieeeiei ei iiZ"ee#d < eeee ee f eee ee f f Z$eefeeieefeeieefeeieefeeieefeeieefeeieefeeiiZ%e$e#d!< G d"d# d#Z&d$S )%    )castDictOptionalSetTupleTypeUnion   )*)LocalProtocolErrorSentinelCLIENTSERVERIDLESEND_RESPONSE	SEND_BODYDONE
MUST_CLOSECLOSEDMIGHT_SWITCH_PROTOCOLSWITCHED_PROTOCOLERRORc                   @   s   e Zd ZdS )r   N__name__
__module____qualname__ r   r   ./tmp/pip-unpacked-wheel-ib4s2i_e/h11/_state.pyr      s   )	metaclassc                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r      s   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r      s   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r      s   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r      s   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r      s   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r      s   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r      s   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r      s   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r      s   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r      s   c                   @   s   e Zd ZdS )_SWITCH_UPGRADENr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdS )_SWITCH_CONNECTNr   r   r   r   r   r       s   r    EVENT_TRIGGERED_TRANSITIONSSTATE_TRIGGERED_TRANSITIONSc                   @   s   e Zd ZddddZee ddddZdddd	Zee dd
ddZdee ee	 e
ee  ddddZee eee	 eee	 ee f f ddddZddddZddddZdS )ConnectionStateN)returnc                 C   s    d| _ t | _tttti| _d S )NT)
keep_alivesetpending_switch_proposalsr   r   r   statesselfr   r   r   __init__   s    zConnectionState.__init__)roler$   c                 C   s   t | j|< |   d S N)r   r(   !_fire_state_triggered_transitions)r*   r,   r   r   r   process_error  s    
zConnectionState.process_errorc                 C   s   d| _ |   d S )NF)r%   r.   r)   r   r   r   process_keep_alive_disabled  s    z+ConnectionState.process_keep_alive_disabled)switch_eventr$   c                 C   s   | j | |   d S r-   )r'   addr.   )r*   r1   r   r   r   process_client_switch_proposal  s    z.ConnectionState.process_client_switch_proposal)r,   
event_typeserver_switch_eventr$   c                 C   s   |}|d k	r8|t kst|| jkr0td|||f}|d krP|tkrPt | _| || |tkr|t	kspt| t tt	f | 
  d S )Nz3Received server {} event without a pending proposal)r   AssertionErrorr'   r   formatResponser&   !_fire_event_triggered_transitionsRequestr   r.   )r*   r,   r4   r5   Z_event_typer   r   r   process_event  s"    
zConnectionState.process_event)r,   r4   r$   c              
   C   sl   | j | }zt| | | }W n> tk
r\   ttt |}td|j|| j | d Y nX || j |< d S )Nz4can't handle event type {} when role={} and state={})	r(   r!   KeyErrorr   r   Eventr   r7   r   )r*   r,   r4   stateZ	new_stater   r   r   r9   -  s    
  z1ConnectionState._fire_event_triggered_transitionsc                 C   s   t | j}| jr(| jt tkr(t| jt< | jsF| jt tkrFt| jt< | jsrttfD ]}| j| tkrTt| j|< qT| jt | jt f}t	
|i }| j| | j|kr d S q d S r-   )dictr(   r'   r   r   r   r%   r   r   r"   getupdate)r*   Zstart_statesr,   Zjoint_statechangesr   r   r   r.   >  s     



z1ConnectionState._fire_state_triggered_transitionsc                 C   sH   | j ttttikr"td| j | js,t| jr6ttt	tt	i| _ d S )Nz'not in a reusable state. self.states={})
r(   r   r   r   r   r7   r%   r6   r'   r   r)   r   r   r   start_next_cyclef  s    


z ConnectionState.start_next_cycle)N)r   r   r   r+   r   r   r/   r0   r3   r=   r   r;   r   r   r9   r.   rC   r   r   r   r   r#      s"    
(r#   N)'typingr   r   r   r   r   r   r   Z_eventsZ_utilr   r   __all__r   r   r   r   r   r   r   r   r   r   r   r   r    r=   ZEventTransitionTyper:   ZConnectionClosedDataZEndOfMessager8   ZInformationalResponser!   __annotations__ZStateTransitionTyper"   r#   r   r   r   r   <module>q   s    $*	 
 
      
        
     !&	       