o
    .j                     @  s8   d dl mZ ddlmZ ddlmZ G dd deZdS )	    )annotations   )HttpVersion   )ExtensionFromHTTPc                   @  sp   e Zd ZdZedddZd d	d
Z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 )'RawExtensionFromHTTPzERaw I/O from given HTTP stream after a 101 Switching Protocol Status.returnset[HttpVersion]c                   C  s   t jt jt jhS N)r   h11h2h3 r   r   ]/home/thesage/.local/lib/python3.10/site-packages/urllib3_future/contrib/webextensions/raw.pysupported_svn
   s   z"RawExtensionFromHTTP.supported_svnhttp_versionr   dict[str, str]c                 C  s   i S )zHSpecific HTTP headers required (request) before the 101 status response.r   )selfr   r   r   r   headers      zRawExtensionFromHTTP.headersNonec                 C  sf   | j dur!|   | j   W d   n1 sw   Y  d| _ | jdur.| j  d| _d| _dS )z"End/Notify close for sub protocol.N)_dsa_write_error_catcherclose	_response_police_officer)r   r   r   r   r      s   




zRawExtensionFromHTTP.closestrc                   C  s   dS )Nrawr   r   r   r   r   implementation   r   z#RawExtensionFromHTTP.implementationset[str]c                   C  s   t  S r
   )setr   r   r   r   supported_schemes!   s   z&RawExtensionFromHTTP.supported_schemesschemec                 C  s   | S r
   r   )r"   r   r   r   scheme_to_http_scheme%   r   z*RawExtensionFromHTTP.scheme_to_http_schemebytes | Nonec              	   C  s   | j d u s
| jd u rtd| j | j' |   | jd \}}}W d    n1 s.w   Y  |W  d    S 1 s?w   Y  d S Nz-The HTTP extension is closed or uninitialized)r   r   OSErrorborrowr   _read_error_catcherrecv_extended)r   dataeot_r   r   r   next_payload)   s   
$z!RawExtensionFromHTTP.next_payloadbufstr | bytesc              	   C  s   | j d u s
| jd u rtdt|tr| }| j | j+ |   | j	| W d    n1 s4w   Y  W d    d S W d    d S 1 sLw   Y  d S r%   )
r   r   r&   
isinstancer   encoder'   r   r   sendall)r   r.   r   r   r   send_payload1   s   

"z!RawExtensionFromHTTP.send_payloadN)r   r	   )r   r   r   r   )r   r   )r   r   )r   r   )r"   r   r   r   )r   r$   )r.   r/   r   r   )__name__
__module____qualname____doc__staticmethodr   r   r   r   r!   r#   r-   r3   r   r   r   r   r      s    


r   N)
__future__r   backendr   protocolr   r   r   r   r   r   <module>   s    