B
    Ce3                 @   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   ^/var/www/downstreamdata.science/rtclock/rtclock-venv/lib/python3.7/site-packages/h11/_state.pyr      s   )	metaclassc               @   s   e Zd ZdS )r   N)r   r   r   r   r   r   r   r      s   c               @   s   e Zd ZdS )r   N)r   r   r   r   r   r   r   r      s   c               @   s   e Zd ZdS )r   N)r   r   r   r   r   r   r   r      s   c               @   s   e Zd ZdS )r   N)r   r   r   r   r   r   r   r      s   c               @   s   e Zd ZdS )r   N)r   r   r   r   r   r   r   r      s   c               @   s   e Zd ZdS )r   N)r   r   r   r   r   r   r   r      s   c               @   s   e Zd ZdS )r   N)r   r   r   r   r   r   r   r      s   c               @   s   e Zd ZdS )r   N)r   r   r   r   r   r   r   r      s   c               @   s   e Zd ZdS )r   N)r   r   r   r   r   r   r   r      s   c               @   s   e Zd ZdS )r   N)r   r   r   r   r   r   r   r      s   c               @   s   e Zd ZdS )_SWITCH_UPGRADEN)r   r   r   r   r   r   r   r      s   r   c               @   s   e Zd ZdS )_SWITCH_CONNECTN)r   r   r   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 )N)r&   addr+   )r(   r.   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*   r1   r2   Z_event_typer   r   r   process_event  s    
zConnectionState.process_event)r*   r1   r#   c          
   C   sl   | j | }y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   r4   r   )r(   r*   r1   state	new_stater   r   r   r6   -  s    

z1ConnectionState._fire_event_triggered_transitionsc             C   s   xt | j}| jr*| jt tkr*t| jt< | jsH| jt tkrHt| jt< | jsxx(ttfD ]}| j| tkrXt| j|< qXW | jt | jt f}t	
|i }| j| | j|krd S qW d S )N)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   r4   r$   r3   r&   r   )r(   r   r   r   start_next_cyclef  s    

z ConnectionState.start_next_cycle)N)r   r   r   r)   r   r   r,   r-   r0   r:   r   r8   r   r   r6   r+   rA   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EventTransitionTyper7   ZConnectionClosedDataZEndOfMessager5   ZInformationalResponser    __annotations__ZStateTransitionTyper!   r"   r   r   r   r   <module>q   s    $4

*