
    A>qjd                    r   d dl mZ d dlZd dlmZ d dlmZmZ ddlm	Z	m
Z
mZmZmZmZ ddlmZmZmZ ddlmZmZmZ d	d
lmZmZmZ g dZdZ edd      D  cg c]
  }  e|        c} Z G d de      Z	 	 	 	 	 	 	 	 	 	 ddZ 	 	 	 	 	 	 ddZ! G d de      Z"	 	 	 	 ddZ# G d de      Z$	 	 	 	 ddZ%yc c} w )    )annotationsN)Sequence)AnyLiteral   )DuplicateParameterInvalidParameterNameInvalidParameterValueNegotiationErrorPayloadTooBigProtocolError)CONTCTRL_OPCODESFrame)	BytesLikeExtensionNameExtensionParameter   )ClientExtensionFactory	ExtensionServerExtensionFactory)PerMessageDeflateClientPerMessageDeflateFactory enable_client_permessage_deflateServerPerMessageDeflateFactory enable_server_permessage_deflates           c                  j    e Zd ZdZ ed      Z	 d		 	 	 	 	 	 	 	 	 	 	 d
dZddZdd	 	 	 	 	 ddZddZ	y)r   z)
    Per-Message Deflate extension.

    permessage-deflateNc                   |i }|dv sJ |dv sJ d|cxk  rdk  sJ  J d|cxk  rdk  sJ  J d|vsJ || _         || _        || _        || _        || _        | j                   s&t        j                  | j                         | _        | j                  s1t        j                  dd| j                   i| j                  | _	        d| _
        y)	z?
        Configure the Per-Message Deflate extension.

        N)FTr      wbitsr#   F )remote_no_context_takeoverlocal_no_context_takeoverremote_max_window_bitslocal_max_window_bitscompress_settingszlibdecompressobjdecodercompressobjencoderdecode_cont_data)selfr&   r'   r(   r)   r*   s         g/opt/rentech/trading_bot/.venv/lib/python3.12/site-packages/websockets/extensions/permessage_deflate.py__init__zPerMessageDeflate.__init__)   s     $ ")]:::(M999*0b00000)/R/////////*D')B&&<#%:"!2..--T5P5P4PQDL--++ 111((DL !&    c           	     p    d| j                    d| j                   d| j                   d| j                   d	S )Nz-PerMessageDeflate(remote_no_context_takeover=z, local_no_context_takeover=z, remote_max_window_bits=z, local_max_window_bits=))r&   r'   r(   r)   r1   s    r2   __repr__zPerMessageDeflate.__repr__S   sV    **.*I*I)J K))-)G)G(H I&&*&A&A%B C%%)%?%?$@	C	
r4   )max_sizec                  |j                   t        v r|S |j                   t        u r9| j                  s|S |j                  rt        d      |j                  r[d| _        nS|j                  s|S |j                  sd| _        | j                  r&t        j                  | j                         | _        |j                  r5t        |j                        dk  rt        |j                        t        z   }n|j                  }|dn|}	 | j                  j!                  ||      }| j                  j"                  rt%        d|      |j                  rDt        |j                        dk\  r,| j                  j!                  t        d      rt%        d|      |j                  r| j                  r| `t)        |j                   ||j                  d|j*                  |j,                        S # t        j&                  $ r}t        d	      |d}~ww xY w)
z,
        Decode an incoming frame.

        z"RSV1 bit set in continuation frameFTr$   i  Nr   r   zdecompression failed)opcoder   r   r0   rsv1r   finr&   r+   r,   r(   r-   lendatabytes_EMPTY_UNCOMPRESSED_BLOCK
decompressunconsumed_tailr   errorr   rsv2rsv3)r1   framer9   r?   
max_lengthexcs         r2   decodezPerMessageDeflate.decode\   s    <<<'L
 <<4((zz#$HIIyy(-% ::99(,% ..#119T9T8TU 99UZZ4/ $'@@D::D"*Q
		A<<**4<D||++#D(33yyS_4<<**+DaH'h77
 9988LLIIJJJJ
 	
 zz 	A 67S@	As   BG' 'H:HHc                   |j                   t        v r|S |j                   t        ur=| j                  r1t	        j
                  dd| j                   i| j                  | _        | j                  j                  |j                        | j                  j                  t        j                        z   }|j                  r0|dd t        k(  sJ t        |      dk  r|dd }nt!        |      dd }|j                  r| j                  r| `t#        |j                   ||j                  |j                   t        u|j$                  |j&                        S )z,
        Encode an outgoing frame.

        r#   Ni   r%   )r;   r   r   r'   r+   r.   r)   r*   r/   compressr?   flushZ_SYNC_FLUSHr=   rA   r>   
memoryviewr   rE   rF   )r1   rG   r?   s      r2   encodezPerMessageDeflate.encode   s%    <<<'L
 <<t#--#//  555 ,,  ||$$UZZ04<<3E3EdFWFW3XX99 9 99994y4CRy!$', 9977LLIILL$JJJJ
 	
r4   N)r&   boolr'   rS   r(   intr)   rT   r*   zdict[Any, Any] | NonereturnNone)rU   str)rG   r   r9   
int | NonerU   r   )rG   r   rU   r   )
__name__
__module____qualname____doc__r   namer3   r8   rJ   rQ   r%   r4   r2   r   r   !   s    
 -.D 48&&$(&& $(&& !$	&&
  #&& 1&& 
&&T
  $	I
I
 	I

 
I
V-
r4   r   c                    g }| r|j                  d       |r|j                  d       |r|j                  dt        |      f       |du r|j                  d       |S |r|j                  dt        |      f       |S )zS
    Build a list of ``(name, value)`` pairs for some compression parameters.

    )server_no_context_takeoverN)client_no_context_takeoverNserver_max_window_bitsT)client_max_window_bitsNrb   )appendrW   )r_   r`   ra   rb   paramss        r2   _build_parametersre      s     (*F!:;!:;/5K1LMN%67 M 
 /5K1LMNMr4   c                  d}d}d}d}| D ]  \  }}|dk(  r|rt        |      |d}t        ||      |dk(  r|rt        |      |d}@t        ||      |dk(  r-|t        |      |t        v rt        |      }rt        ||      |dk(  r4|t        |      |r|d}|t        v rt        |      }t        ||      t	        |       ||||fS )z
    Extract compression parameters from a list of ``(name, value)`` pairs.

    If ``is_server`` is :obj:`True`, ``client_max_window_bits`` may be
    provided without a value. This is only allowed in handshake requests.

    FNr_   Tr`   ra   rb   )r   r
   _MAX_WINDOW_BITS_VALUESrT   r	   )rd   	is_serverr_   r`   ra   rb   r]   values           r2   _extract_parametersrj      s5    (-',)-9= $-e//)(..}-1*+D%8811)(..}-1*+D%88--%1(..//),U&+D%88--%1(..U])-&11),U&+D%88 't,,I$-N 	#"	 r4   c                  f    e Zd ZdZ ed      Z	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZd	dZ	 	 	 	 	 	 d
dZy)r   a  
    Client-side extension factory for the Per-Message Deflate extension.

    Parameters behave as described in `section 7.1 of RFC 7692`_.

    .. _section 7.1 of RFC 7692: https://datatracker.ietf.org/doc/html/rfc7692#section-7.1

    Set them to :obj:`True` to include them in the negotiation offer without a
    value or to an integer value to include them with this value.

    Args:
        server_no_context_takeover: Prevent server from using context takeover.
        client_no_context_takeover: Prevent client from using context takeover.
        server_max_window_bits: Maximum size of the server's LZ77 sliding window
            in bits, between 8 and 15.
        client_max_window_bits: Maximum size of the client's LZ77 sliding window
            in bits, between 8 and 15, or :obj:`True` to indicate support without
            setting a limit.
        compress_settings: Additional keyword arguments for :func:`zlib.compressobj`,
            excluding ``wbits``.

    r    Nc                   |"d|cxk  rdk  st        d       t        d      |&|du s"d|cxk  rdk  st        d       t        d      |d|v rt        d      || _        || _        || _        || _        || _        y)	G
        Configure the Per-Message Deflate extension factory.

        Nr   r"   /server_max_window_bits must be between 8 and 15T/client_max_window_bits must be between 8 and 15r#   zLcompress_settings must not include wbits, set client_max_window_bits instead)
ValueErrorr_   r`   ra   rb   r*   )r1   r_   r`   ra   rb   r*   s         r2   r3   z'ClientPerMessageDeflateFactory.__init__F  s     '.!7M2SQS2SNOO 3TNOO"*%-*0b0NOO 1NOO(W8I-I5 
 +E'*D'&<#&<#!2r4   c                n    t        | j                  | j                  | j                  | j                        S )z,
        Build request parameters.

        )re   r_   r`   ra   rb   r7   s    r2   get_request_paramsz1ClientPerMessageDeflateFactory.get_request_paramsf  s5    
 !++++''''	
 	
r4   c                    t         fd|D              rt        d j                         t        |d      \  }}}} j                  r|st        d       j
                  r|sd} j                  n'|t        d      | j                  kD  rt        d       j                  |Ct        d	       j                  du rn)| j                  }n| j                  kD  rt        d
      t        |||xs d|xs d j                        S )zV
        Process response parameters.

        Return an extension instance.

        c              3  P   K   | ]  }|j                   j                   k(    y wrR   r]   .0otherr1   s     r2   	<genexpr>zIClientPerMessageDeflateFactory.process_response_params.<locals>.<genexpr>}       H5uzzTYY&H   #&zreceived duplicate Frh   z#expected server_no_context_takeoverTzexpected server_max_window_bitsz"unsupported server_max_window_bitsz!unexpected client_max_window_bitsz"unsupported client_max_window_bitsr"   )
anyr   r]   rj   r_   r`   ra   rb   r   r*   r1   rd   accepted_extensionsr_   r`   ra   rb   s   `      r2   process_response_paramsz6ClientPerMessageDeflateFactory.process_response_paramsr  s@    H4GHH"%8#DEE  %8	
&&"" **-&'LMM **--1* &&. &-&'HII'$*E*EE&'KLL &&.%1&'JKK((D0 &-)-)D)D&'$*E*EE&'KLL &&"(b"(b""
 	
r4   )FFNTN)r_   rS   r`   rS   ra   rX   rb   int | Literal[True] | Noner*   dict[str, Any] | NonerU   rV   )rU   Sequence[ExtensionParameter])rd   r   r   Sequence[Extension]rU   r   )	rY   rZ   r[   r\   r   r]   r3   rr   r   r%   r4   r2   r   r   ,  s    . -.D ,1+0-1=A373$(3 %)3 !+	3
 !;3 13 
3@

g
,g
 1g
 
	g
r4   r   c                h    | g } t        d | D              st        |       t        ddi      gz   } | S )z
    Enable Per-Message Deflate with default settings in client extensions.

    If the extension is already present, perhaps with non-default settings,
    the configuration isn't changed.

    c              3  V   K   | ]!  }|j                   t        j                   k(   # y wrR   )r]   r   )rw   extension_factorys     r2   ry   z3enable_client_permessage_deflate.<locals>.<genexpr>  s*       	"@"E"EE   ')memLevel   )r*   )r}   listr   
extensionss    r2   r   r     sQ     
 !+  *%*#-q/)
 


 r4   c                  d    e Zd ZdZ ed      Z	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZy)	r   a  
    Server-side extension factory for the Per-Message Deflate extension.

    Parameters behave as described in `section 7.1 of RFC 7692`_.

    .. _section 7.1 of RFC 7692: https://datatracker.ietf.org/doc/html/rfc7692#section-7.1

    Set them to :obj:`True` to include them in the negotiation offer without a
    value or to an integer value to include them with this value.

    Args:
        server_no_context_takeover: Prevent server from using context takeover.
        client_no_context_takeover: Prevent client from using context takeover.
        server_max_window_bits: Maximum size of the server's LZ77 sliding window
            in bits, between 8 and 15.
        client_max_window_bits: Maximum size of the client's LZ77 sliding window
            in bits, between 8 and 15.
        compress_settings: Additional keyword arguments for :func:`zlib.compressobj`,
            excluding ``wbits``.
        require_client_max_window_bits: Do not enable compression at all if
            client doesn't advertise support for ``client_max_window_bits``;
            the default behavior is to enable compression without enforcing
            ``client_max_window_bits``.

    r    Nc                (   |"d|cxk  rdk  st        d       t        d      |"d|cxk  rdk  st        d       t        d      |d|v rt        d      ||rt        d      || _        || _        || _        || _        || _        || _        y)	rm   Nr   r"   rn   ro   r#   zLcompress_settings must not include wbits, set server_max_window_bits insteadzVrequire_client_max_window_bits is enabled, but client_max_window_bits isn't configured)rp   r_   r`   ra   rb   r*   require_client_max_window_bits)r1   r_   r`   ra   rb   r*   r   s          r2   r3   z'ServerPerMessageDeflateFactory.__init__  s     '.!7M2SQS2SNOO 3TNOO&.!7M2SQS2SNOO 3TNOO(W8I-I5  ").L> 
 +E'*D'&<#&<#!2.L+r4   c                P    t         fd|D              rt        d j                         t        |d      \  }}}} j                  r|sd} j
                  r|sd} j                  n*| j                  }n| j                  kD  r j                  } j                  |du rR j                  }nE| j                  r7t        d      |du r j                  }n j                  |k  r j                  }t        ||||      t        |||xs d|xs d j                        fS )zi
        Process request parameters.

        Return response params and an extension instance.

        c              3  P   K   | ]  }|j                   j                   k(    y wrR   ru   rv   s     r2   ry   zHServerPerMessageDeflateFactory.process_request_params.<locals>.<genexpr>?  rz   r{   zskipped duplicate Tr|   zrequired client_max_window_bitsr"   )r}   r   r]   rj   r_   r`   ra   rb   r   re   r   r*   r~   s   `      r2   process_request_paramsz5ServerPerMessageDeflateFactory.process_request_params4  sf    H4GHH"%7		{#CDD  $7	
&&""" **--1* **--1* &&. &-)-)D)D&'$*E*EE)-)D)D& &&.%-)-)D)D& &-66*+LMM'4/)-)D)D&,,/EE)-)D)D& **&&	 **&,"&,"&&
 	
r4   )FFNNNF)r_   rS   r`   rS   ra   rX   rb   rX   r*   r   r   rS   rU   rV   )rd   r   r   r   rU   z2tuple[list[ExtensionParameter], PerMessageDeflate])rY   rZ   r[   r\   r   r]   r3   r   r%   r4   r2   r   r     s    4 -.D ,1+0-1-137/4!M$(!M %)!M !+	!M
 !+!M 1!M )-!M 
!MFo
,o
 1o
 
<	o
r4   r   c                l    | g } t        d | D              st        |       t        ddddi      gz   } | S )z
    Enable Per-Message Deflate with default settings in server extensions.

    If the extension is already present, perhaps with non-default settings,
    the configuration isn't changed.

    c              3  V   K   | ]!  }|j                   t        j                   k(   # y wrR   )r]   r   )rw   ext_factorys     r2   ry   z3enable_server_permessage_deflate.<locals>.<genexpr>  s*       	:???r      r   r   )ra   rb   r*   )r}   r   r   r   s    r2   r   r     sW     
 %  *%*')')#-q/)
 

 r4   )
r_   rS   r`   rS   ra   rX   rb   r   rU   zlist[ExtensionParameter])rd   r   rh   rS   rU   z9tuple[bool, bool, int | None, int | Literal[True] | None])r   z'Sequence[ClientExtensionFactory] | NonerU   z Sequence[ClientExtensionFactory])r   z'Sequence[ServerExtensionFactory] | NonerU   z Sequence[ServerExtensionFactory])&
__future__r   r+   collections.abcr   typingr   r   
exceptionsr   r	   r
   r   r   r   framesr   r   r   r   r   r   baser   r   r   __all__rA   rangerW   rg   r   re   rj   r   r   r   r   )bitss   0r2   <module>r      s	   "  $   / . A A K K 0 16q">3t9> s
	 s
l $ $ ' 7	
 0:(:8<:>:zm
%; m
`7%0o
%; o
d7%Q ?s   B4