
    RPf`                    Z   d dl mZ d dlZd dlZd dlmZmZmZmZm	Z	m
Z
mZ ddlmZmZ ddl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)AnyDictListOptionalSequenceTupleUnion   )
exceptionsframes)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         b/var/www/fastapitest/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595K5K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%   r-   s    r.   __repr__zPerMessageDeflate.__repr__J   sV    **.*I*I)J K))-)G)G(H I&&*&A&A%B C%%)%?%?$@	C	
r0   )max_sizec               8   |j                   t        j                  v r|S |j                   t        j                  u r"| j                  s|S |j
                  rrd| _        nj|j                  s|S t        j                  |d      }|j
                  sd| _        | j                  r&t        j                  | j                         | _        |j                  }|j
                  r	|t        z  }|dn|}	 | j                  j!                  ||      }| j                  j(                  rt%        j*                  d| d	      |j
                  r| j                  r| `t        j                  ||
      S # t        j"                  $ r}t%        j&                  d      |d}~ww xY w)z,
        Decode an incoming frame.

        Frsv1Tr    Nr   zdecompression failedzover size limit (? > z bytes)data)opcoder   CTRL_OPCODESOP_CONTr,   finr8   dataclassesreplacer"   r'   r(   r$   r)   r:   _EMPTY_UNCOMPRESSED_BLOCK
decompresserrorr   ProtocolErrorunconsumed_tailPayloadTooBig)r-   framer5   r:   
max_lengthexcs         r.   decodezPerMessageDeflate.decodeS   sc    <<6...L
 <<6>>)((yy(-% ::''E:E99(,% ..#119T9T8TU
 zz99--D"*Q
	L<<**4<D <<''**-B8*G+TUU 9988""5t44 zz 	L**+ABK	Ls   /E+ +F>FFc                j   |j                   t        j                  v r|S |j                   t        j                  urTt	        j
                  |d      }| j                  r1t        j                  dd| j                   i| j                  | _        | j                  j                  |j                        | j                  j                  t        j                        z   }|j                   r|j#                  t$              r|dd }|j                   r| j                  r| `t	        j
                  ||      S )z,
        Encode an outgoing frame.

        Tr7   r   Nr9   r!   )r;   r   r<   r=   r?   r@   r#   r'   r*   r%   r&   r+   compressr:   flushZ_SYNC_FLUSHr>   endswithrA   )r-   rG   r:   s      r.   encodezPerMessageDeflate.encode   s     <<6...L
 <<v~~-''D9E--#//  555 9=9O9O 
 ||$$UZZ04<<3E3EdFWFW3XX99'@A9D 9977""5t44r0   N)r"   boolr#   rS   r$   intr%   rT   r&   zOptional[Dict[Any, Any]]returnNone)rU   str)rG   frames.Framer5   Optional[int]rU   rX   )rG   rX   rU   rX   )
__name__
__module____qualname____doc__r   namer/   r4   rJ   rQ   r!   r0   r.   r   r      s    
 -.D 7;%&$(%& $(%& !$	%&
  #%& 4%& 
%&R
 #'	8585  	85
 
85t5r0   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_bitsNrc   )appendrW   )r`   ra   rb   rc   paramss        r.   _build_parametersrf      s     (*F!:;!:;/5K1LMN%67 M 
 /5K1LMNMr0   c               ^   d}d}d}d}| D ]  \  }}|dk(  r2|rt        j                  |      |d}(t        j                  ||      |dk(  r2|rt        j                  |      |d}_t        j                  ||      |dk(  rA|t        j                  |      |t        v rt	        |      }t        j                  ||      |dk(  rH|t        j                  |      |r|d}|t        v rt	        |      }t        j                  ||      t        j
                  |       ||||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`   Tra   rb   rc   )r   DuplicateParameterInvalidParameterValue_MAX_WINDOW_BITS_VALUESrT   InvalidParameterName)re   	is_serverr`   ra   rb   rc   r^   values           r.   _extract_parametersrn      sk    (-',,09= $8e//) 33D99}-1* 66tUCC11) 33D99}-1* 66tUCC--%1 33D99//),U& 66tUCC--%1 33D99U])-&11),U& 66tUCC 11$77I$8N 	#"	 r0   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://www.rfc-editor.org/rfc/rfc7692.html#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`   ra   rb   rc   r&   )r-   r`   ra   rb   rc   r&   s         r.   r/   z'ClientPerMessageDeflateFactory.__init__  s     '.!7M2SQS2SNOO 3TNOO"*%-*0b0NOO 1NOO(W8I-I5 
 +E'*D'&<#&<#!2r0   c                n    t        | j                  | j                  | j                  | j                        S )z,
        Build request parameters.

        )rf   r`   ra   rb   rc   r3   s    r.   get_request_paramsz1ClientPerMessageDeflateFactory.get_request_params=  s5    
 !++++''''	
 	
r0   c                    t         fd|D              r"t        j                  d j                         t	        |d      \  }}}} j
                  r|st        j                  d       j                  r|sd} j                  n;|t        j                  d      | j                  kD  rt        j                  d       j                  |Wt        j                  d	       j                  du rn3| j                  }n$| j                  kD  rt        j                  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otherr-   s     r.   	<genexpr>zIClientPerMessageDeflateFactory.process_response_params.<locals>.<genexpr>T       H5uzzTYY&H   #&zreceived duplicate Frl   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   NegotiationErrorr^   rn   r`   ra   rb   rc   r   r&   r-   re   accepted_extensionsr`   ra   rb   rc   s   `      r.   process_response_paramsz6ClientPerMessageDeflateFactory.process_response_paramsI  sd    H4GHH--0CDII;.OPP  %8	
&&"" **- 112WXX **--1* &&. &- 112STT'$*E*EE 112VWW &&.%1 112UVV((D0 &-)-)D)D&'$*E*EE 112VWW &&"(b"(b""
 	
r0   )FFNTN)r`   rS   ra   rS   rb   rY   rc   Optional[Union[int, bool]]r&   Optional[Dict[str, Any]]rU   rV   )rU   List[ExtensionParameter])re   Sequence[ExtensionParameter]r   Sequence[Extension]rU   r   )	rZ   r[   r\   r]   r   r^   r/   rv   r   r!   r0   r.   r   r     s    . -.D ,1+004=A6:3$(3 %)3 !.	3
 !;3 43 
3@

g
,g
 1g
 
	g
r0   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   )r{   extension_factorys     r.   r}   z3enable_client_permessage_deflate.<locals>.<genexpr>  s*       	"@"E"EE   ')memLevel   )r&   )r   listr   
extensionss    r.   r   r     sQ     
 !+  *%*#-q/)
 


 r0   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://www.rfc-editor.org/rfc/rfc7692.html#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)	rq   Nr   r   rr   rs   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)rt   r`   ra   rb   rc   r&   require_client_max_window_bits)r-   r`   ra   rb   rc   r&   r   s          r.   r/   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+r0   c                x    t         fd|D              r"t        j                  d j                         t	        |d      \  }}}} j
                  r|sd} j                  r|sd} j                  n*| j                  }n| j                  kD  r j                  } j                  |du r\ j                  }nO|! j                  rAt        j                  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   ry   rz   s     r.   r}   zHServerPerMessageDeflateFactory.process_request_params.<locals>.<genexpr>  r~   r   zskipped duplicate Tr   zrequired client_max_window_bitsr   )r   r   r   r^   rn   r`   ra   rb   rc   r   rf   r   r&   r   s   `      r.   process_request_paramsz5ServerPerMessageDeflateFactory.process_request_params  sr    H4GHH--0B499+.NOO  $7	
&&""" **--1* **--1* &&. &-)-)D)D&'$*E*EE)-)D)D& &&.%-)-)D)D& &-66$556WXX'4/)-)D)D&,,/EE)-)D)D& **&&	 **&,"&,"&&
 	
r0   )FFNNNF)r`   rS   ra   rS   rb   rY   rc   rY   r&   r   r   rS   rU   rV   )re   r   r   r   rU   z2Tuple[List[ExtensionParameter], PerMessageDeflate])rZ   r[   r\   r]   r   r^   r/   r   r!   r0   r.   r   r     s    4 -.D ,1+004046:/4!M$(!M %)!M !.	!M
 !.!M 4!M )-!M 
!MFo
,o
 1o
 
<	o
r0   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   )r{   ext_factorys     r.   r}   z3enable_server_permessage_deflate.<locals>.<genexpr>  s*       	:???r      r   r   )rb   rc   r&   )r   r   r   r   s    r.   r   r   }  sW     
 %  *%*')')#-q/)
 

 r0   )
r`   rS   ra   rS   rb   rY   rc   r   rU   r   )re   r   rl   rS   rU   z<Tuple[bool, bool, Optional[int], Optional[Union[int, bool]]])r   z*Optional[Sequence[ClientExtensionFactory]]rU   z Sequence[ClientExtensionFactory])r   z*Optional[Sequence[ServerExtensionFactory]]rU   z Sequence[ServerExtensionFactory])!
__future__r   r?   r'   typingr   r   r   r   r   r	   r
    r   r   r   r   baser   r   r   __all__rA   rangerW   rj   r   rf   rn   r   r   r   r   )bitss   0r.   <module>r      s    "   D D D ! 6 K K 0 16q">3t9> R5	 R5j $ $ * 7	
 0:(:8<:A:zm
%; m
`:%0o
%; o
d:%O ?s   B(