o
    .j                     @  s|   d dl mZ d dlZd dlZd dlZd dlmZ ejr!ddlm	Z	 ddl
mZ ddlmZ G d	d
 d
ZG dd deZdS )    )annotationsN)RLock   )HTTPResponse)HttpVersion   )ExtensionFromHTTPc                   @  sl   e Zd Z				ddd
dZedddZedddZedddZedddZdddZ	dddZ
dS )ServerSentEventNevent
str | Nonedataidretry
int | NonereturnNonec                 C  s<   |sd}|d u r
d}|d u rd}|| _ || _|| _|| _d S )Nmessage )_event_data_id_retry)selfr
   r   r   r    r   ]/home/thesage/.local/lib/python3.10/site-packages/urllib3_future/contrib/webextensions/sse.py__init__   s   
zServerSentEvent.__init__strc                 C     | j S N)r   r   r   r   r   r
   %      zServerSentEvent.eventc                 C  r   r   )r   r   r   r   r   r   )   r    zServerSentEvent.datac                 C  r   r   )r   r   r   r   r   r   -   r    zServerSentEvent.idc                 C  r   r   )r   r   r   r   r   r   1   r    zServerSentEvent.retry
typing.Anyc                 C  s   t | jS r   )jsonloadsr   r   r   r   r   r"   5   s   zServerSentEvent.jsonc                 C  st   d| j g}| jdkr|d| j | jdkr#|d| j | jd ur1|d| j dd| dS )	Nzevent=r   zdata=zid=zretry=zServerSentEvent(z, ))r
   r   appendr   r   join)r   piecesr   r   r   __repr__8   s   


zServerSentEvent.__repr__)NNNN)
r
   r   r   r   r   r   r   r   r   r   r   r   )r   r   )r   r!   )__name__
__module____qualname__r   propertyr
   r   r   r   r"   r(   r   r   r   r   r	      s     
r	   c                      s   e Zd Zd3 fddZed4ddZed5d	d
Zed6ddZed7ddZ	d3d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 )@ ServerSideEventExtensionFromHTTPr   r   c                   s6   t    d | _d| _td | _t | _d | _	d S )Nr   zutf-8)
superr   _last_event_id_buffercodecsgetincrementaldecoder_decoderr   _lock_streamr   	__class__r   r   r   D   s   

z)ServerSideEventExtensionFromHTTP.__init__set[HttpVersion]c                   C  s   t jt jt jhS r   )r   h11h2h3r   r   r   r   supported_svnM   s   z.ServerSideEventExtensionFromHTTP.supported_svnr   c                   C  s   dS )Nnativer   r   r   r   r   implementationQ   s   z/ServerSideEventExtensionFromHTTP.implementationdict[str, typing.Any]c                 C  s   ddiS )Npreload_contentFr   r   r   r   r   urlopen_kwargsU      z/ServerSideEventExtensionFromHTTP.urlopen_kwargsboolc                 C  s
   | j d u S r   )r6   r   r   r   r   closedY   s   
z'ServerSideEventExtensionFromHTTP.closedc                 C  s   | j d urI| jd urK| j   | jjd ur>| jd ur>t| jjdr>| j| j | jj  W d    n1 s9w   Y  d | _ d | _d | _d S d S d S )Nabort)r6   	_responseclose_fp_police_officerhasattrborrowrF   r   r   r   r   rH   ]   s   


z&ServerSideEventExtensionFromHTTP.closeresponser   c                   s    t  | |jddd| _d S )NT)decode_content)r/   startstreamr6   )r   rM   r7   r   r   rP   k   s   z&ServerSideEventExtensionFromHTTP.starthttp_versionr   dict[str, str]c                 C  s
   dddS )Nztext/event-streamzno-store)acceptzcache-controlr   )r   rR   r   r   r   headersp   s   
z(ServerSideEventExtensionFromHTTP.headersT)rawrV   typing.Literal[True]r   c                C     d S r   r   r   rV   r   r   r   next_payloads   s   z-ServerSideEventExtensionFromHTTP.next_payloadFtyping.Literal[False]ServerSentEvent | Nonec                C  rX   r   r   rY   r   r   r   rZ   v   s   ServerSentEvent | str | Nonec                C  sJ  | j du s
| jdu rtd| j 	 d| jvrdd| jvrdz|  j| jt| j7  _W n+ tyY   | jjddd}|sPd| _| j	  Y W d   dS |  j|7  _Y nw d| jvrdd| 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 ]@}	|	sq|	d	\}
}}|
d
vrq|dr|dd }|
dkrd|v rq|
dkrzt|}W n ttfy   Y qw |||
< q|sqd|vr| jdur| j|d< tdi |}|jr|j| _|du r|| W  d   S |W  d   S 1 sw   Y  dS )z5Unpack the next received message/payload from remote.Nz-The HTTP extension is closed or uninitializedTz

z

    )finalrN   :>   r   r   r
   r    r   r    r   r   )rG   r6   OSErrorr5   r1   r4   decodenextStopIterationresetfindlen
splitlines	partition
startswithint
ValueError	TypeErrorr0   r	   r   )r   rV   
last_chunklfcrlfboundarysep
event_textkwargslinekey_valuer
   r   r   r   rZ   {   sn   
 





=&bufstr | bytesc                 C  s   t d)zDispatch a buffer to remote.z*SSE is only one-way. Sending is forbidden.)NotImplementedError)r   r{   r   r   r   send_payload   rC   z-ServerSideEventExtensionFromHTTP.send_payloadset[str]c                   C  s   ddhS )Nssepsser   r   r   r   r   supported_schemes   rC   z2ServerSideEventExtensionFromHTTP.supported_schemesschemec                 C  s   ddd|  S )Nhttpshttp)r   r   r   )r   r   r   r   scheme_to_http_scheme   s   z6ServerSideEventExtensionFromHTTP.scheme_to_http_scheme)r   r   )r   r9   r)   )r   r@   )r   rD   )rM   r   r   r   )rR   r   r   rS   )rV   rW   r   r   )rV   r[   r   r\   )rV   rD   r   r]   )r{   r|   r   r   )r   r   )r   r   r   r   )r*   r+   r,   r   staticmethodr=   r?   r-   rB   rE   rH   rP   rU   typingoverloadrZ   r~   r   r   __classcell__r   r   r7   r   r.   C   s0    	


Cr.   )
__future__r   r2   r"   r   	threadingr   TYPE_CHECKINGrM   r   backendr   protocolr   r	   r.   r   r   r   r   <module>   s    4