Ë
    RPf„5  ã                  óê  — U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlmZm	Z	m
Z
mZmZ ddlmZmZ ddlmZ 	 ddlmZ g d¢Z G d	„ d
ej,                  «      Zej0                  Zej4                  Zej8                  Zej<                  Zej@                  Z!ejD                  Z#eeefZ$ee!e#fZ% G d„ dej,                  «      Z&e&jN                  de&jP                  de&jR                  de&jT                  de&jV                  de&jX                  de&jZ                  de&j\                  de&j^                  de&j`                  de&jb                  de&jd                  de&jf                  de&jh                  de&jj                  diZ6de7d<   e&jN                  e&jP                  e&jR                  e&jT                  e&jZ                  e&j\                  e&j^                  e&j`                  e&jb                  e&jd                  e&jf                  e&jh                  hZ8e&jN                  e&jP                  e&jV                  hZ9e:e;e<fZ=ej|                   G d„ d«      «       Z?d$d „Z@d%d!„ZAej|                   G d"„ d#«      «       ZBy# e$ r
 ddlmZ Y �Œ2w xY w)&é    )ÚannotationsN)ÚCallableÚ	GeneratorÚOptionalÚSequenceÚTupleé   )Ú
exceptionsÚ
extensions)ÚData)Ú
apply_mask)ÚOpcodeÚOP_CONTÚOP_TEXTÚ	OP_BINARYÚOP_CLOSEÚOP_PINGÚOP_PONGÚDATA_OPCODESÚCTRL_OPCODESÚFrameÚprepare_dataÚprepare_ctrlÚClosec                  ó(   — e Zd ZdZd\  ZZZd\  ZZZ	y)r   z#Opcode values for WebSocket frames.)r   r	   é   )é   é	   é
   N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚCONTÚTEXTÚBINARYÚCLOSEÚPINGÚPONG© ó    úK/var/www/fastapitest/venv/lib/python3.12/site-packages/websockets/frames.pyr   r   %   s   „ Ù-à)Ñ€Dˆ$�Ø(Ñ€Eˆ4‘r+   r   c                  óL   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZy)Ú	CloseCodez-Close code values for WebSocket close frames.iè  ié  iê  ië  ií  iî  iï  ið  iñ  iò  ió  iô  iõ  iö  i÷  N)r    r!   r"   r#   ÚNORMAL_CLOSUREÚ
GOING_AWAYÚPROTOCOL_ERRORÚUNSUPPORTED_DATAÚNO_STATUS_RCVDÚABNORMAL_CLOSUREÚINVALID_DATAÚPOLICY_VIOLATIONÚMESSAGE_TOO_BIGÚMANDATORY_EXTENSIONÚINTERNAL_ERRORÚSERVICE_RESTARTÚTRY_AGAIN_LATERÚBAD_GATEWAYÚTLS_HANDSHAKEr*   r+   r,   r.   r.   7   sT   „ Ù7à€NØ€JØ€NØÐà€NØÐØ€LØÐØ€OØÐØ€NØ€OØ€OØ€KØ�Mr+   r.   ÚOKz
going awayzprotocol errorzunsupported datazno status received [internal]zabnormal closure [internal]zinvalid frame payload datazpolicy violationzmessage too bigzmandatory extensionzinternal errorzservice restartztry again laterzbad gatewayz TLS handshake failure [internal]zdict[int, str]ÚCLOSE_CODE_EXPLANATIONSc                  ó²   — e Zd ZU dZded<   ded<   dZded<   d	Zded
<   d	Zded<   d	Zded<   dd„Z	e
dddœ	 	 	 	 	 	 	 	 	 dd„«       Zddœ	 	 	 	 	 dd„Zdd„Zy)r   aN  
    WebSocket frame.

    Attributes:
        opcode: Opcode.
        data: Payload data.
        fin: FIN bit.
        rsv1: RSV1 bit.
        rsv2: RSV2 bit.
        rsv3: RSV3 bit.

    Only these fields are needed. The MASK bit, payload length and masking-key
    are handled on the fly when parsing and serializing frames.

    r   ÚopcodeÚbytesÚdataTÚboolÚfinFÚrsv1Úrsv2Úrsv3c                ó  — d}t        | j                  «      › dt        | j                  «      dk(  rdnd› �}| j                  rdnd}| j                  t        u r$t        | j                  j                  «       «      }nÏ| j                  t        u rM| j                  }t        |«      dkD  rdj                  |dd	 d
|dd g«      }dj                  d„ |D «       «      }np| j                  t        u r)t        t        j                  | j                  «      «      }n5| j                  r'	 t        | j                  j                  «       «      }d}nd}t        |«      dkD  r|dd dz   |dd z   }dj                  t        d|||g«      «      }| j                  j                   › d|› d|› d�S # t        t        f$ rQ | j                  }t        |«      dkD  rdj                  |dd	 d
|dd g«      }dj                  d„ |D «       «      }d}Y Œ¸w xY w)zE
        Return a human-readable representation of a frame.

        Nz byter	   Ú ÚsÚ	continuedé   r+   é   s     iøÿÿÿú c              3  ó$   K  — | ]  }|d ›–— Œ
 y­w©Ú02xNr*   ©Ú.0Úbytes     r,   ú	<genexpr>z Frame.__str__.<locals>.<genexpr>¨   s   è ø€ Ò=¨d˜t C˜j›MÑ=ùó   ‚Útextc              3  ó$   K  — | ]  }|d ›–— Œ
 y­wrQ   r*   rS   s     r,   rV   z Frame.__str__.<locals>.<genexpr>¸   s   è ø€ ÒA°$ 4¨ *£ÑAùrW   Úbinaryz''éK   é0   z...ièÿÿÿz, z [ú])ÚlenrC   rE   rA   r   ÚreprÚdecoder   Újoinr   Ústrr   ÚparseÚUnicodeDecodeErrorÚAttributeErrorÚfilterÚname)ÚselfÚcodingÚlengthÚ	non_finalrC   rZ   Úmetadatas          r,   Ú__str__zFrame.__str__•   sÛ  € ð
 ˆÜ˜Ÿ	™	“NÐ# 5¬s°4·9±9«~ÀÒ/B©ÈÐ(LÐMˆØŸ(š(‘B¨ˆ	à�;‰;œ'Ñ!ô ˜Ÿ	™	×(Ñ(Ó*Ó+‰DØ�[‰[œIÑ%ð —Y‘YˆFÜ�6‹{˜RÒØŸ™ 6¨#¨2 ;°¸VÀBÀC¸[Ð"IÓJ�Ø—8‘8Ñ=°fÔ=Ó=‰DØ�[‰[œHÑ$Ü”u—{‘{ 4§9¡9Ó-Ó.‰DØ�YŠYð"Ü˜DŸI™I×,Ñ,Ó.Ó/�Ø‘ð ˆDäˆt‹9�rŠ>Ø˜˜�9˜uÑ$ t¨C¨D zÑ1ˆDà—9‘9œV D¨6°6¸9Ð*EÓFÓGˆà—+‘+×"Ñ"Ð# 1 T F¨"¨X¨J°aÐ8Ð8øô '¬Ð7ò "ØŸ™�Ü�v“; Ò#Ø ŸX™X v¨c¨r {°KÀÈÈÀÐ&MÓN�FØ—x‘xÑA¸&ÔAÓA�Ø!’ð"ús   Ä$%F% Æ%AHÈHN)Úmax_sizer   c             #  ó\  K  —  |d«      E d{  –—† }t        j                  d|«      \  }}|dz  rdnd}|dz  rdnd}	|dz  rdnd}
|d	z  rdnd}	 t        |d
z  «      }|dz  rdnd|k7  rt	        j
                  d«      ‚|dz  }|dk(  r) |d«      E d{  –—† }t        j                  d|«      \  }n-|dk(  r( |d«      E d{  –—† }t        j                  d|«      \  }|�!||kD  rt	        j                  d|› d|› d�«      ‚|r |d«      E d{  –—† } ||«      E d{  –—† }|rt        |«      } | ||||	|
|«      }|€g }t        |«      D ]  }|j                  ||¬«      }Œ |j                  «        |S 7 �Œk# t        $ r}t	        j
                  d«      |‚d}~ww xY w7 �Œ7 Œâ7 Œ—7 Œ‰­w)a&  
        Parse a WebSocket frame.

        This is a generator-based coroutine.

        Args:
            read_exact: generator-based coroutine that reads the requested
                bytes or raises an exception if there isn't enough data.
            mask: whether the frame should be masked i.e. whether the read
                happens on the server side.
            max_size: maximum payload size in bytes.
            extensions: list of extensions, applied in reverse order.

        Raises:
            EOFError: if the connection is closed without a full WebSocket frame.
            UnicodeDecodeError: if the frame contains invalid UTF-8.
            PayloadTooBig: if the frame's payload size exceeds ``max_size``.
            ProtocolError: if the frame contains incorrect values.

        r   Nú!BBé€   TFé@   é    rN   é   zinvalid opcodezincorrect maskingé   é~   ú!Hr   z!Qzover size limit (z > z bytes)é   )rn   )ÚstructÚunpackr   Ú
ValueErrorr
   ÚProtocolErrorÚPayloadTooBigr   Úreversedr`   Úcheck)ÚclsÚ
read_exactÚmaskrn   r   rC   Úhead1Úhead2rE   rF   rG   rH   rA   Úexcrj   Ú
mask_bytesÚframeÚ	extensions                     r,   rc   zFrame.parseÄ   sî  è ø€ ñ< % Q›-×'ˆÜ—}‘} U¨DÓ1‰ˆˆuð ˜jÒ(‰d¨eˆØ˜zÒ)‰t¨uˆØ˜zÒ)‰t¨uˆØ˜zÒ)‰t¨uˆð	FÜ˜E JÑ.Ó/ˆFð ˜JÒ&‰D¨E°dÒ:Ü×*Ñ*Ð+>Ó?Ð?à˜Ñ#ˆØ�SŠ=Ù(¨›m×+ˆDÜŸ™ d¨DÓ1‰I‰VØ�sŠ]Ù(¨›m×+ˆDÜŸ™ d¨DÓ1‰IˆVØÐ F¨XÒ$5Ü×*Ñ*Ø# F 8¨3¨x¨j¸Ð@óð ñ Ù$.¨q£M×1ˆJñ % VÓ,×,ˆÙÜ˜d JÓ/ˆDá�F˜D # t¨T°4Ó8ˆàÐØˆJÜ! *Ó-ò 	?ˆIØ×$Ñ$ U°XÐ$Ó>‰Eð	?ð 	�‰Œàˆð[ (úô ò 	FÜ×*Ñ*Ð+;Ó<À#ÐEûð	Fúð ,ùð ,øð 2øð -úsx   ‚F,ŽE9�AF,ÁE< Á6F,ÂF#Â-F,ÃF&ÃAF,ÄF(ÄF,Ä F*Ä!AF,Å<	F ÆFÆF Æ F,Æ&F,Æ(F,Æ*F,)r   c               óF  — | j                  «        |€g }|D ]  }|j                  | «      } Œ t        j                  «       }| j                  rdnd| j
                  rdndz  | j                  rdndz  | j                  rdndz  | j                  z  }|rdnd}t        | j                  «      }|dk  r*|j                  t        j                  d|||z  «      «       nZ|dk  r+|j                  t        j                  d	||dz  |«      «       n*|j                  t        j                  d
||dz  |«      «       |r&t        j                  d«      }|j                  |«       |rt!        | j                  «      }	n| j                  }	|j                  |	«       |j#                  «       S )aH  
        Serialize a WebSocket frame.

        Args:
            mask: whether the frame should be masked i.e. whether the write
                happens on the client side.
            extensions: list of extensions, applied in order.

        Raises:
            ProtocolError: if the frame contains incorrect values.

        rq   r   rr   rs   rN   rv   rp   i   z!BBHz!BBQru   rx   )r   ÚencodeÚioÚBytesIOrE   rF   rG   rH   rA   r^   rC   Úwritery   ÚpackÚsecretsÚtoken_bytesr   Úgetvalue)
rh   r‚   r   rˆ   Úoutputrƒ   r„   rj   r†   rC   s
             r,   Ú	serializezFrame.serialize  sm  € ð$ 	�
‰
ŒàÐØˆJØ#ò 	*ˆIØ×#Ñ# DÓ)‰Dð	*ô —‘“ˆð  Ÿ8š8‰Z¨Ø!ŸYšY‰z¨Añ/à!ŸYšY‰z¨Añ/ð "ŸYšY‰z¨Añ/ð �k‰kñ	ð 	ñ #‘
¨ˆä�T—Y‘Y“ˆØ�CŠ<Ø�L‰LœŸ™ U¨E°5¸6±>ÓBÕCØ�eŠ^Ø�L‰LœŸ™ V¨U°E¸C±KÀÓHÕIà�L‰LœŸ™ V¨U°E¸C±KÀÓHÔIáÜ ×,Ñ,¨QÓ/ˆJØ�L‰L˜Ô$ñ Ü˜dŸi™i¨Ó4‰Dà—9‘9ˆDØ�‰�TÔà�‰Ó Ð r+   c                ó8  — | j                   s| j                  s| j                  rt        j                  d«      ‚| j
                  t        v rOt        | j                  «      dkD  rt        j                  d«      ‚| j                  st        j                  d«      ‚yy)z¦
        Check that reserved bits and opcode have acceptable values.

        Raises:
            ProtocolError: if a reserved bit or the opcode is invalid.

        zreserved bits must be 0é}   zcontrol frame too longzfragmented control frameN)
rF   rG   rH   r
   r|   rA   r   r^   rC   rE   ©rh   s    r,   r   zFrame.checkL  sz   € ð �9Š9˜Ÿ	š	 T§Y¢YÜ×*Ñ*Ð+DÓEÐEà�;‰;œ,Ñ&Ü�4—9‘9‹~ Ò#Ü ×.Ñ.Ð/GÓHÐHØ—8’8Ü ×.Ñ.Ð/IÓJÐJð ð 'r+   ©Úreturnrb   )
r�   z-Callable[[int], Generator[None, None, bytes]]r‚   rD   rn   zOptional[int]r   ú(Optional[Sequence[extensions.Extension]]r˜   zGenerator[None, None, Frame])r‚   rD   r   r™   r˜   rB   ©r˜   ÚNone)r    r!   r"   r#   Ú__annotations__rE   rF   rG   rH   rm   Úclassmethodrc   r“   r   r*   r+   r,   r   r   |   sÆ   … ñð  ƒNØ
ƒKØ€CˆÓØ€Dˆ$ÓØ€Dˆ$ÓØ€Dˆ$Óó-9ð^ ð #'Ø?CñJàAðJð ð	Jð
  ðJð =ðJð 
&òJó ðJð` @Dñ	9!ð ð9!ð =ð	9!ð
 
ó9!ôvKr+   r   c                ó–   — t        | t        «      rt        | j                  d«      fS t        | t        «      rt
        | fS t        d«      ‚)až  
    Convert a string or byte-like object to an opcode and a bytes-like object.

    This function is designed for data frames.

    If ``data`` is a :class:`str`, return ``OP_TEXT`` and a :class:`bytes`
    object encoding ``data`` in UTF-8.

    If ``data`` is a bytes-like object, return ``OP_BINARY`` and a bytes-like
    object.

    Raises:
        TypeError: if ``data`` doesn't have a supported type.

    úutf-8údata must be str or bytes-like)Ú
isinstancerb   r   rŠ   Ú	BytesLiker   Ú	TypeError©rC   s    r,   r   r   ^  sB   € ô  �$œÔÜ˜Ÿ™ GÓ,Ð,Ð,Ü	�Dœ)Ô	$Ü˜$ˆÐäÐ8Ó9Ð9r+   c                ó�   — t        | t        «      r| j                  d«      S t        | t        «      rt	        | «      S t        d«      ‚)ai  
    Convert a string or byte-like object to bytes.

    This function is designed for ping and pong frames.

    If ``data`` is a :class:`str`, return a :class:`bytes` object encoding
    ``data`` in UTF-8.

    If ``data`` is a bytes-like object, return a :class:`bytes` object.

    Raises:
        TypeError: if ``data`` doesn't have a supported type.

    rŸ   r    )r¡   rb   rŠ   r¢   rB   r£   r¤   s    r,   r   r   v  s=   € ô �$œÔØ�{‰{˜7Ó#Ð#Ü	�Dœ)Ô	$Ü�T‹{ÐäÐ8Ó9Ð9r+   c                  óP   — e Zd ZU dZded<   ded<   dd„Zedd„«       Zdd„Zdd	„Z	y
)r   z
    Code and reason for WebSocket close frames.

    Attributes:
        code: Close code.
        reason: Close reason.

    ÚintÚcoderb   Úreasonc                ó  — d| j                   cxk  rdk  rn nd}n;d| j                   cxk  rdk  rn nd}n t        j                  | j                   d«      }| j                   › d|› d�}| j                  r|› d	| j                  › �}|S )
zU
        Return a human-readable representation of a close code and reason.

        é¸  i   Ú
registeredéˆ  zprivate useÚunknownz (ú)rO   )r¨   r?   Úgetr©   )rh   ÚexplanationÚresults      r,   rm   zClose.__str__›  s|   € ð
 �4—9‘9Ô#˜tÕ#Ø&‰KØ�T—Y‘YÔ% Õ%Ø'‰Kä1×5Ñ5°d·i±iÀÓKˆKØ—I‘I�;˜b  ¨QÐ/ˆà�;Š;Ø�x˜q §¡ Ð.ˆFàˆr+   c                ó&  — t        |«      dk\  rJt        j                  d|dd «      \  }|dd j                  d«      } | ||«      }|j	                  «        |S t        |«      dk(  r | t
        j                  d«      S t        j                  d«      ‚)z÷
        Parse the payload of a close frame.

        Args:
            data: payload of the close frame.

        Raises:
            ProtocolError: if data is ill-formed.
            UnicodeDecodeError: if the reason isn't valid UTF-8.

        r   rw   NrŸ   r   rJ   zclose frame too short)	r^   ry   rz   r`   r   r.   r3   r
   r|   )r€   rC   r¨   r©   Úcloses        r,   rc   zClose.parse­  s…   € ô ˆt‹9˜Š>Ü—m‘m D¨$¨r°¨(Ó3‰GˆTØ˜!˜"�X—_‘_ WÓ-ˆFÙ˜˜fÓ%ˆEØ�K‰KŒMØˆLÜ�‹Y˜!Š^Ù”y×/Ñ/°Ó4Ð4ä×*Ñ*Ð+BÓCÐCr+   c                óš   — | j                  «        t        j                  d| j                  «      | j                  j                  d«      z   S )z:
        Serialize the payload of a close frame.

        rw   rŸ   )r   ry   rŽ   r¨   r©   rŠ   r–   s    r,   r“   zClose.serializeÅ  s6   € ð
 	�
‰
ŒÜ�{‰{˜4 §¡Ó+¨d¯k©k×.@Ñ.@ÀÓ.IÑIÐIr+   c                ó‚   — | j                   t        v s-d| j                   cxk  rdk  sn t        j                  d«      ‚yy)z›
        Check that the close code has a valid value for a close frame.

        Raises:
            ProtocolError: if the close code is invalid.

        r«   r­   zinvalid status codeN)r¨   ÚEXTERNAL_CLOSE_CODESr
   r|   r–   s    r,   r   zClose.checkÍ  s<   € ð —	‘	Ô1Ñ1°T¸T¿Y¹YÔ5MÈÔ5MÜ×*Ñ*Ð+@ÓAÐAð 6NÐ1r+   Nr—   )rC   rB   r˜   r   )r˜   rB   rš   )
r    r!   r"   r#   rœ   rm   r�   rc   r“   r   r*   r+   r,   r   r   �  s:   … ñð ƒIØƒKóð$ òDó ðDó.Jô	Br+   r   )rC   r   r˜   zTuple[int, bytes])rC   r   r˜   rB   )CÚ
__future__r   ÚdataclassesÚenumr‹   r�   ry   Útypingr   r   r   r   r   rJ   r
   r   r   Úspeedupsr   ÚImportErrorÚutilsÚ__all__ÚIntEnumr   r$   r   r%   r   r&   r   r'   r   r(   r   r)   r   r   r   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r?   rœ   r·   ÚOK_CLOSE_CODESrB   Ú	bytearrayÚ
memoryviewr¢   Ú	dataclassr   r   r   r   r*   r+   r,   ú<module>rÅ      sy  ðÞ "ã Û Û 	Û Û ß AÕ Aç $Ý ð"Ý$ò
€ô")ˆT�\‰\ô )ð �+‰+€Ø
�+‰+€Ø�M‰M€	Ø�<‰<€Ø
�+‰+€Ø
�+‰+€à˜ Ð*€Ø˜ 'Ð)€ô�—‘ô ð. ×Ñ˜dØ×Ñ˜,Ø×ÑÐ.Ø×ÑÐ 2Ø×ÑÐ=Ø×ÑÐ =Ø×ÑÐ8Ø×ÑÐ 2Ø×ÑÐ0Ø×!Ñ!Ð#8Ø×ÑÐ.Ø×ÑÐ0Ø×ÑÐ0Ø×Ñ˜=Ø×ÑÐ?ð+Ð ˜ó ð, ×ÑØ×ÑØ×ÑØ×ÑØ×ÑØ×ÑØ×ÑØ×!Ñ!Ø×ÑØ×ÑØ×ÑØ×ÑðÐ ð" ×ÑØ×ÑØ×Ñð€ð �9˜jÐ(€	ð ×Ñ÷^Kð ^Kó ð^KóB:ó0:ð. ×Ñ÷HBð HBó ñHBøð} ò "ß!Ð!ð"ús   ¹I# É#I2É1I2