o
    .j                     @  sn   d dl mZ d dlZd dlZd dlZejrddlmZ ddlm	Z	 ddl
mZ dd	lmZ G d
d deZdS )    )annotationsN   )AsyncHTTPResponse)HttpVersion   )ServerSentEvent   )AsyncExtensionFromHTTPc                      s   e Zd Zd3 fddZed4ddZed5d	d
Zed6ddZd3ddZ	ed7ddZ
d8 fddZd9ddZejddd:d!d"Zejd#dd;d&d"Zd#dd<d(d"Zd=d+d,Zed>d.d/Zed?d1d2Z  ZS )@%AsyncServerSideEventExtensionFromHTTPreturnNonec                   s4   t    d | _d | _d| _td | _d | _d S )N zutf-8)	super__init___next_value_task_last_event_id_buffercodecsgetincrementaldecoder_decoder_streamself	__class__ d/home/thesage/.local/lib/python3.10/site-packages/urllib3_future/contrib/webextensions/_async/sse.pyr      s   

z.AsyncServerSideEventExtensionFromHTTP.__init__set[HttpVersion]c                   C  s   t jt jt jhS N)r   h11h2h3r   r   r   r   supported_svn   s   z3AsyncServerSideEventExtensionFromHTTP.supported_svnstrc                   C  s   dS )Nnativer   r   r   r   r   implementation   s   z4AsyncServerSideEventExtensionFromHTTP.implementationdict[str, typing.Any]c                 C  s   ddiS )Npreload_contentFr   r   r   r   r   urlopen_kwargs!      z4AsyncServerSideEventExtensionFromHTTP.urlopen_kwargsc              	     s   | j d urj| jd url| jd ur| j  | jI d H  | j  I d H  | jjd ur_| jd ur_t| jjdr_| j| j4 I d H  | jj	 I d H  W d   I d H  n1 I d H sZw   Y  d | _ d | _d | _d S d S d S )Nabort)
r   	_responser   cancelaclose_fp_police_officerhasattrborrowr*   r   r   r   r   close%   s"   


(
z+AsyncServerSideEventExtensionFromHTTP.closeboolc                 C  s
   | j d u S r   )r   r   r   r   r   closed7   s   
z,AsyncServerSideEventExtensionFromHTTP.closedresponser   c                   s(   t  |I d H  |jddd| _d S )NT)decode_content)r   startstreamr   )r   r5   r   r   r   r8   ;   s   z+AsyncServerSideEventExtensionFromHTTP.starthttp_versionr   dict[str, str]c                 C  s
   dddS )Nztext/event-streamzno-store)acceptzcache-controlr   )r   r:   r   r   r   headers@   s   
z-AsyncServerSideEventExtensionFromHTTP.headersT)rawr>   typing.Literal[True]
str | Nonec                     d S r   r   r   r>   r   r   r   next_payloadC   s   z2AsyncServerSideEventExtensionFromHTTP.next_payloadFtyping.Literal[False]ServerSentEvent | Nonec                  rA   r   r   rB   r   r   r   rC   F   s   ServerSentEvent | str | Nonec             
     sn  | j du s| jdu rtd	 d| jvrd| jvrzazt| j | _| jI dH }|  j| j	|7  _W n? tj
yF   Y W d| _dS  tyv   | jj	ddd}|sm| j I dH  d| _| j  Y W d| _dS |  j|7  _Y nw W d| _nd| _w d| jvrd| jvs| jd}| jd}|dkr|dks||k r|d}}n|d}}| jd| }| j|t| d | _i }	| D ]B}
|
sq|
d	\}}}|d
vrq|dr|dd }|dkrd|v rq|dkrzt|}W n ttfy   Y qw ||	|< q|	sqd|	vr| jdur| j|	d< tdi |	}|jr,|j| _|du r5|| S |S )z5Unpack the next received message/payload from remote.Nz-The HTTP extension is closed or uninitializedTz

z

    )finalr6   :>   iddataeventretry r   rJ    rM   r   )r+   r   OSErrorr   asynciocreate_task	__anext__r   r   decodeCancelledErrorStopAsyncIterationr-   resetfindlen
splitlines	partition
startswithint
ValueError	TypeErrorr   r   rJ   )r   r>   chunk
last_chunklfcrlfboundarysep
event_textkwargslinekey_valuerL   r   r   r   rC   K   s~   



	





bufstr | bytesc                   s
   t d)zDispatch a buffer to remote.z*SSE is only one-way. Sending is forbidden.)NotImplementedError)r   rl   r   r   r   send_payload   s   z2AsyncServerSideEventExtensionFromHTTP.send_payloadset[str]c                   C  s   ddhS )Nssepsser   r   r   r   r   supported_schemes   r)   z7AsyncServerSideEventExtensionFromHTTP.supported_schemesschemec                 C  s   ddd|  S )Nhttpshttp)rq   rr   r   )rt   r   r   r   scheme_to_http_scheme   s   z;AsyncServerSideEventExtensionFromHTTP.scheme_to_http_scheme)r   r   )r   r   )r   r#   )r   r&   )r   r3   )r5   r   r   r   )r:   r   r   r;   )r>   r?   r   r@   )r>   rD   r   rE   )r>   r3   r   rF   )rl   rm   r   r   )r   rp   )rt   r#   r   r#   )__name__
__module____qualname__r   staticmethodr"   r%   propertyr(   r2   r4   r8   r=   typingoverloadrC   ro   rs   rw   __classcell__r   r   r   r   r
      s0    	


Lr
   )
__future__r   rQ   r   r}   TYPE_CHECKING_async.responser   backendr   rq   r   protocolr	   r
   r   r   r   r   <module>   s    