Ë
    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ØÐ*Ô0¨bÒ0Ð0Ñ0Ð0Ð0ØÐ)Ô/¨RÒ/Ð/Ñ/Ð/Ð/ØÐ/Ñ/Ð/Ð/à*DˆÔ'Ø)BˆÔ&Ø&<ˆÔ#Ø%:ˆÔ"Ø!2ˆÔà×.Ò.Ü×-Ñ-°T×5PÑ5PÐ4PÔQˆDŒLà×-Ò-Ü×+Ñ+ñ Ø×1Ñ1Ð1ðØ59×5KÑ5KñˆDŒLð !&ˆÕó    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Ÿ>™>Ñ)Ø×(Ò(Ø�Ø�yŠyØ(-�Õ%ð —:’:Ø�Ü×'Ñ'¨°EÔ:ˆEØ—9’9Ø(,�Ô%ð ×.Ò.Ü#×1Ñ1¸×9TÑ9TÐ8TÔU�”ð
 �z‰zˆØ�9Š9ØÔ-Ñ-ˆDØ"Ð*‘Q°ˆ
ð	LØ—<‘<×*Ñ*¨4°Ó<ˆDð �<‰<×'Ò'Ü×*Ñ*Ð-BÀ8À*ÈGÐ+TÓUÐUð �9Š9˜×8Ò8Ø�ä×"Ñ" 5¨tÔ4Ð4øô �z‰zò 	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   Néüÿÿÿr9   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Ô9ˆEà×-Ò-Ü#×/Ñ/ñ  Ø×5Ñ5Ð5ð Ø9=×9OÑ9Oñ �”ð
 �|‰|×$Ñ$ U§Z¡ZÓ0°4·<±<×3EÑ3EÄd×FWÑFWÓ3XÑXˆØ�9Š9˜Ÿ™Ô'@ÔAØ˜˜�9ˆDð �9Š9˜×7Ò7Ø�ä×"Ñ" 5¨tÔ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5ôt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Ù!Ø�‰Ð:Ô;Ù!Ø�‰Ð:Ô;ÙØ�‰Ð/´Ð5KÓ1LÐMÔNØ Ñ%Ø�‰Ð6Ô7ð €Mñ 
 Ø�‰Ð/´Ð5KÓ1LÐ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Ñ3°DÓ9Ð9Øˆ}Ø-1Ñ*ä ×6Ñ6°t¸UÓCÐCàÐ1Ò1Ù)Ü ×3Ñ3°DÓ9Ð9Øˆ}Ø-1Ñ*ä ×6Ñ6°t¸UÓCÐCàÐ-Ò-Ø%Ð1Ü ×3Ñ3°DÓ9Ð9ØÔ/Ñ/Ü),¨U«Ñ&ä ×6Ñ6°t¸UÓCÐCàÐ-Ò-Ø%Ð1Ü ×3Ñ3°DÓ9Ð9Ù˜U˜]Ø)-Ñ&ØÔ1Ñ1Ü),¨U«Ñ&ä ×6Ñ6°t¸UÓCÐCô ×1Ñ1°$Ó7Ð7ðI$8ðN 	#Ø"ØØð	ð 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º   € ð 'Ð.°!Ð7MÔ2SÐQSÒ2SÜÐNÓOÐOð 3TÜÐNÓOÐOà"Ð*Ø%¨Ñ-ØÐ*Ô0¨bÒ0äÐNÓOÐOð 1äÐNÓOÐOØÐ(¨WÐ8IÑ-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  ó   øè ø€ ÒH¨5ˆu�z‰z˜TŸY™YÕ&Ñ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  ø€ ô ÓHÐ4GÔHÔHÜ×-Ñ-Ð0CÀDÇIÁIÀ;Ð.OÓPÐPô   °%Ô8ñ	
Ø&Ø&Ø"Ø"ð ×*Ò*Ù-Ü ×1Ñ1Ð2WÓXÐXð ×*Ò*Ù-Ø-1Ð*ð ×&Ñ&Ð.Øð &Ð-Ü ×1Ñ1Ð2SÓTÐTØ'¨$×*EÑ*EÒEÜ ×1Ñ1Ð2VÓWÐWð ×&Ñ&Ð.Ø%Ð1Ü ×1Ñ1Ð2UÓVÐVà×(Ñ(¨DÑ0Øð &Ð-Ø)-×)DÑ)DÑ&Ø'¨$×*EÑ*EÒEÜ ×1Ñ1Ð2VÓ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Ø+0Ø04Ø=AØ6:ð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Ø   € ð 'Ð.°!Ð7MÔ2SÐQSÒ2SÜÐNÓOÐOð 3TÜÐNÓOÐOØ&Ð.°!Ð7MÔ2SÐQSÒ2SÜÐNÓOÐOð 3TÜÐNÓOÐOØÐ(¨WÐ8IÑ-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  ø€ ô ÓHÐ4GÔHÔHÜ×-Ñ-Ð0BÀ4Ç9Á9À+Ð.NÓOÐOô   °$Ô7ñ	
Ø&Ø&Ø"Ø"ð" ×*Ò*Ù-Ø-1Ð*ð ×*Ò*Ù-Ø-1Ð*ð ×&Ñ&Ð.Øð &Ð-Ø)-×)DÑ)DÑ&Ø'¨$×*EÑ*EÒEØ)-×)DÑ)DÐ&ð ×&Ñ&Ð.Ø%¨Ñ-Ø)-×)DÑ)DÑ&ð &Ð-Ø×6Ò6Ü$×5Ñ5Ð6WÓ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Ø+0Ø04Ø04Ø6:Ø/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Ð á16°q¸"³Ö>¨™3˜t�9Ò>Ð ôR5˜	ô R5ðjØ $ðà $ðð *ðð 7ð	ð
 óð0:Ø(ð:Ø8<ð:àAó:ôzm
Ð%;ô m
ð`Ø:ðà%óô0o
Ð%;ô o
ðdØ:ðà%ôùòO ?s   ÁB(