
    jd                    >   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d  edd          D             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$dS )0    )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                ,    g | ]}t          |          S  )str).0bitss     r/workspace/show-city-briefing-agent/.venv/lib/python3.11/site-packages/websockets/extensions/permessage_deflate.py
<listcomp>r#      s    >>>3t99>>>          c                  R    e Zd ZdZ ed          Z	 dddZddZddddZddZ	dS )r   z)
    Per-Message Deflate extension.

    permessage-deflateNremote_no_context_takeoverboollocal_no_context_takeoverremote_max_window_bitsintlocal_max_window_bitscompress_settingsdict[Any, Any] | NonereturnNonec                l   |i }|dv sJ |dv sJ d|cxk    rdk    sn J d|cxk    rdk    sn J d|vsJ || _         || _        || _        || _        || _        | j         s t          j        | j                   | _        | j        s#t          j        dd| j         i| j        | _	        d| _
        dS )	z?
        Configure the Per-Message Deflate extension.

        N)FTr%      wbitsr5   Fr   )r)   r+   r,   r.   r/   zlibdecompressobjdecodercompressobjencoderdecode_cont_data)selfr)   r+   r,   r.   r/   s         r"   __init__zPerMessageDeflate.__init__)   s,    $ ")]::::(M9999*0000b000000)////R///////////*D')B&&<#%:"!2. 	R-T5P4PQQQDL- 	+  11( DL !&r$   r   c           	     H    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__S   s_    C*.*IC C)-)GC C '+&AC C &*%?	C C C	
r$   )max_sizeframer   rC   
int | Nonec               v   |j         t          v r|S |j         t          u r.| j        s|S |j        rt          d          |j        rd| _        n>|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        rt%          d|          |j        rHt          |j                  dk    r0| j                            t          d          rt%          d|          n'# t          j        $ r}t          d	          |d}~ww xY w|j        r	| j        r| `t)          |j         ||j        d|j        |j                  S )
z,
        Decode an incoming frame.

        z"RSV1 bit set in continuation frameFTr6   i  Nr   r   zdecompression failed)opcoder   r   r<   rsv1r   finr)   r7   r8   r,   r9   lendatabytes_EMPTY_UNCOMPRESSED_BLOCK
decompressunconsumed_tailr   errorr   rsv2rsv3)r=   rD   rC   rK   
max_lengthexcs         r"   decodezPerMessageDeflate.decode\   s    <<''L
 <4( z J#$HIIIy .(-% : 9 -(,% . V#19T8TUUU 9 	UZ4// $$'@@DD:D"*QQ
		A<**4<<D|+ 4#D(333y 8S__44<**+DaHH 8'h777z 	A 	A 	A 677S@	A 9 	8 	LIJJ
 
 	
s   BE F +E;;F c                D   |j         t          v r|S |j         t          ur*| j        r#t	          j        dd| j         i| j        | _        | j        	                    |j
                  | j                            t          j                  z   }|j        rJ|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.

        r5   Ni   r   )rG   r   r   r+   r7   r:   r.   r/   r;   compressrK   flushZ_SYNC_FLUSHrI   rM   rJ   
memoryviewr   rQ   rR   )r=   rD   rK   s      r"   encodezPerMessageDeflate.encode   s=    <<''L
 <t##- #/    55 ,    |$$UZ004<3E3EdFW3X3XX9 	- 9 999994yy4CRCy!$'', 9 	7 	LIL$JJ
 
 	
r$   N)r)   r*   r+   r*   r,   r-   r.   r-   r/   r0   r1   r2   )r1   r   )rD   r   rC   rE   r1   r   )rD   r   r1   r   )
__name__
__module____qualname____doc__r   namer>   rB   rU   r\   r   r$   r"   r   r   !   s         
 =-..D 48&& && && && &&T
 
 
 
  $	I
 I
 I
 I
 I
 I
V-
 -
 -
 -
 -
 -
r$   r   server_no_context_takeoverr*   client_no_context_takeoverserver_max_window_bitsrE   client_max_window_bitsint | Literal[True] | Noner1   list[ExtensionParameter]c                2   g }| r|                     d           |r|                     d           |r$|                     dt          |          f           |du r|                     d           n&|r$|                     dt          |          f           |S )zS
    Build a list of ``(name, value)`` pairs for some compression parameters.

    )rc   N)rd   Nre   T)rf   Nrf   )appendr   )rc   rd   re   rf   paramss        r"   _build_parametersrl      s     (*F! <:;;;! <:;;; O/5K1L1LMNNN%%67777	 O/5K1L1LMNNNMr$   rk   Sequence[ExtensionParameter]	is_server9tuple[bool, bool, int | None, int | Literal[True] | None]c                  d}d}d}d}| D ]\  }}|dk    r&|rt          |          |d}!t          ||          |dk    r&|rt          |          |d}Mt          ||          |dk    r:|t          |          |t          v rt          |          }t          ||          |dk    rA|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.

    FNrc   Trd   re   rf   )r   r
   _MAX_WINDOW_BITS_VALUESr-   r	   )rk   rn   rc   rd   re   rf   rb   values           r"   _extract_parametersrs      s    (-',)-9= $- $-e///) /(...}-1**+D%888111) /(...}-1**+D%888---%1(...///),U&&+D%888---%1(... 9U])-&&111),U&&+D%888 't,,, 	#"	 r$   c                  L    e Zd ZdZ ed          Z	 	 	 	 	 dddZddZddZdS )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(   FNTrc   r*   rd   re   rE   rf   rg   r/   dict[str, Any] | Noner1   r2   c                    |d|cxk    rdk    sn t          d          |"|du sd|cxk    rdk    sn t          d          |d|v rt          d          || _        || _        || _        || _        || _        dS )	G
        Configure the Per-Message Deflate extension factory.

        Nr%   r4   /server_max_window_bits must be between 8 and 15T/client_max_window_bits must be between 8 and 15r5   zLcompress_settings must not include wbits, set client_max_window_bits instead)
ValueErrorrc   rd   re   rf   r/   )r=   rc   rd   re   rf   r/   s         r"   r>   z'ClientPerMessageDeflateFactory.__init__F  s     '.!7M2S2S2S2SQS2S2S2S2SNOOO"*%--*0000b0000NOOO(W8I-I-I5  
 +E'*D'&<#&<#!2r$   rm   c                N    t          | j        | j        | j        | j                  S )z,
        Build request parameters.

        )rl   rc   rd   re   rf   rA   s    r"   get_request_paramsz1ClientPerMessageDeflateFactory.get_request_paramsf  s.    
 !++''	
 
 	
r$   rk   accepted_extensionsSequence[Extension]r   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        k    rt          d	           j        |t          d
          n. j        du rn$| j        }n| j        k    rt          d          t          |||pd|pd j	                  S )zV
        Process response parameters.

        Return an extension instance.

        c              3  8   K   | ]}|j         j         k    V  d S r]   rb   r    otherr=   s     r"   	<genexpr>zIClientPerMessageDeflateFactory.process_response_params.<locals>.<genexpr>}  ,      HH5uzTY&HHHHHHr$   zreceived duplicate Frn   z#expected server_no_context_takeoverTNzexpected server_max_window_bitsz"unsupported server_max_window_bitsz!unexpected client_max_window_bitsz"unsupported client_max_window_bitsr4   )
anyr   rb   rs   rc   rd   re   rf   r   r/   r=   rk   r}   rc   rd   re   rf   s   `      r"   process_response_paramsz6ClientPerMessageDeflateFactory.process_response_paramsr  s    HHHH4GHHHHH 	F"#D#D#DEEE  %888	
&&"" * 	N- N&'LMMM * 	2- 2-1* &. &-&'HIII'$*EEE&'KLLL &.%1&'JKKK 2 (D00 &-)-)D&&'$*EEE&'KLLL &&"(b"(b"
 
 	
r$   )FFNTN)rc   r*   rd   r*   re   rE   rf   rg   r/   ru   r1   r2   )r1   rm   )rk   rm   r}   r~   r1   r   )	r^   r_   r`   ra   r   rb   r>   r|   r   r   r$   r"   r   r   ,  s         . =-..D ,1+0-1=A373 3 3 3 3@

 

 

 

g
 g
 g
 g
 g
 g
r$   r   
extensions'Sequence[ClientExtensionFactory] | None Sequence[ClientExtensionFactory]c                    | 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.

    Nc              3  @   K   | ]}|j         t          j         k    V  d S r]   )rb   r   )r    extension_factorys     r"   r   z3enable_client_permessage_deflate.<locals>.<genexpr>  sB         	"@"EE     r$   memLevel   )r/   )r   listr   r   s    r"   r   r     sw     
  !+     
 *%%*#-q/  )
 


 r$   c                  F    e Zd ZdZ ed          Z	 	 	 	 	 	 dddZddZdS )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(   FNrc   r*   rd   re   rE   rf   r/   ru   require_client_max_window_bitsr1   r2   c                *   |d|cxk    rdk    sn t          d          |d|cxk    rdk    sn t          d          |d|v rt          d          ||rt          d          || _        || _        || _        || _        || _        || _        dS )	rw   Nr%   r4   rx   ry   r5   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)rz   rc   rd   re   rf   r/   r   )r=   rc   rd   re   rf   r/   r   s          r"   r>   z'ServerPerMessageDeflateFactory.__init__  s     '.!7M2S2S2S2SQS2S2S2S2SNOOO&.!7M2S2S2S2SQS2S2S2S2SNOOO(W8I-I-I5   ").L)>  
 +E'*D'&<#&<#!2.L+++r$   rk   rm   r}   r~   2tuple[list[ExtensionParameter], PerMessageDeflate]c                    t           fd|D                       rt          d j                   t          |d          \  }}}} j        r|sd} j        r|sd} j        n| j        }n| j        k    r j        } j        |du r j        }n7| j        rt          d          n|du r j        }n j        |k     r j        }t          ||||          t          |||pd|pd j                  fS )zi
        Process request parameters.

        Return response params and an extension instance.

        c              3  8   K   | ]}|j         j         k    V  d S r]   r   r   s     r"   r   zHServerPerMessageDeflateFactory.process_request_params.<locals>.<genexpr>?  r   r$   zskipped duplicate Tr   Nzrequired client_max_window_bitsr4   )r   r   rb   rs   rc   rd   re   rf   r   rl   r   r/   r   s   `      r"   process_request_paramsz5ServerPerMessageDeflateFactory.process_request_params4  s    HHHH4GHHHHH 	E"#C	#C#CDDD  $777	
&&""" * 	2- 2-1* * 	2- 2-1* &. &-)-)D&&'$*EEE)-)D& &.%--)-)D& &-6 N*+LMMMN'4//)-)D&&,/EEE)-)D& **&&	  **&,"&,"& 
 	
r$   )FFNNNF)rc   r*   rd   r*   re   rE   rf   rE   r/   ru   r   r*   r1   r2   )rk   rm   r}   r~   r1   r   )r^   r_   r`   ra   r   rb   r>   r   r   r$   r"   r   r     s}         4 =-..D ,1+0-1-137/4!M !M !M !M !MFo
 o
 o
 o
 o
 o
r$   r   'Sequence[ServerExtensionFactory] | None Sequence[ServerExtensionFactory]c                    | 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.

    Nc              3  @   K   | ]}|j         t          j         k    V  d S r]   )rb   r   )r    ext_factorys     r"   r   z3enable_server_permessage_deflate.<locals>.<genexpr>  sB         	:??     r$      r   r   )re   rf   r/   )r   r   r   r   s    r"   r   r     s}     
  %     

 *%%*')')#-q/  )
 

 r$   )
rc   r*   rd   r*   re   rE   rf   rg   r1   rh   )rk   rm   rn   r*   r1   ro   )r   r   r1   r   )r   r   r1   r   )%
__future__r   r7   collections.abcr   typingr   r   
exceptionsr   r	   r
   r   r   r   framesr   r   r   r   r   r   baser   r   r   __all__rM   rangerq   r   rl   rs   r   r   r   r   r   r$   r"   <module>r      s#   " " " " " "  $ $ $ $ $ $                        / . . . . . . . . . A A A A A A A A A A K K K K K K K K K K   0 >>q">>> s
 s
 s
 s
 s
	 s
 s
 s
l   0: : : :zm
 m
 m
 m
 m
%; m
 m
 m
`   0o
 o
 o
 o
 o
%; o
 o
 o
d     r$   