
    ,h                        d dl mZ d dlZd dlmZmZ d dl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 dd	lmZ 	 dd
lmZ  G d de	      ZddZddZeZddlmZ ddZddZy# e$ r	 dd
lmZ Y 1w xY w)    )annotationsN)	AwaitableSequence)AnyCallable
NamedTuple   )
extensionsframes)PayloadTooBigProtocolError)	BytesLike)Data)
apply_maskc                      e Zd ZU ded<   ded<   ded<   dZded<   dZded	<   dZded
<   edd       ZddZ	ddZ
eddd	 	 	 	 	 	 	 	 	 dd       Zdd	 	 	 	 	 	 	 ddZy)Frameboolfinzframes.OpcodeopcodebytesdataFrsv1rsv2rsv3c                    t        j                  | j                  | j                  | j                  | j
                  | j                  | j                        S N)r   r   r   r   r   r   r   r   selfs    [/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/websockets/legacy/framing.py	new_framezFrame.new_frame   s=    ||KKIIHHIIIIII
 	
    c                ,    t        | j                        S r   )strr    r   s    r   __str__zFrame.__str__&   s    4>>""r!   c                6    | j                   j                         S r   )r    checkr   s    r   r&   zFrame.check)   s    ~~##%%r!   N)max_sizer
   c                 K    |d       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        j                  |d
z        }|dz  rdnd|k7  rt        d      |dz  }|dk(  r) |d       d{   }t        j                  d|      \  }n-|dk(  r( |d       d{   }t        j                  d|      \  }|||kD  rt        ||      |r |d       d{   } ||       d{   }|rt        |      }t        j                  ||||	|
|      }|g }t        |      D ]  }|j                  ||      } |j                           | |j                  |j                  |j                  |j                  |j                   |j"                        S 7 # t        $ r}t        d      |d}~ww xY w7 H7 7 7 ԭw)a@  
        Read a WebSocket frame.

        Args:
            reader: Coroutine that reads exactly the requested number of
                bytes, unless the end of file is reached.
            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:
            PayloadTooBig: If the frame exceeds ``max_size``.
            ProtocolError: If the frame contains incorrect values.

        r	   Nz!BB   TF@             zinvalid opcodezincorrect masking   ~   z!H   z!Q   )r'   )structunpackr   Opcode
ValueErrorr   r   r   r   reverseddecoder&   r   r   r   r   r   r   )clsreadermaskr'   r
   r   head1head2r   r   r   r   r   exclength	mask_bitsr    	extensions                     r   readz
Frame.read,   s    6 AY}}UD1u j(dez)tuz)tuz)tu	;]]5:#56F J&DEd: 344#S=?DdD1IVs]?DdD1IVFX$511$QiI F^#dI.DLLsD$E	J!*- 	GI!((X(FI	G 	MMNNNNNNNN
 	
W   	; 01s:	; # #
 ( $sw   G'F=AG'G  ),G'G-G'G <G' G#G'G%B-G' 	G	GGG' G'#G'%G')r
   c               J     || j                   j                  ||             y)a  
        Write a WebSocket frame.

        Args:
            frame: Frame to write.
            write: Function that writes bytes.
            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.

        )r:   r
   N)r    	serialize)r   writer:   r
   s       r   rD   zFrame.write{   s     0 	dnn&&DZ&HIr!   )returnzframes.Frame)rE   r#   )rE   None)
r9   z!Callable[[int], Awaitable[bytes]]r:   r   r'   z
int | Noner
   %Sequence[extensions.Extension] | NonerE   r   )rD   zCallable[[bytes], Any]r:   r   r
   rG   rE   rF   )__name__
__module____qualname____annotations__r   r   r   propertyr    r$   r&   classmethodrA   rD    r!   r   r   r      s    	I
KD$D$D$
 
#&   $<@L
1L
 	L

 L
 :L
 
L
 L
f =AJ%J 	J
 :J 
Jr!   r   c                    t        | t              r*t        j                  j                  | j                         fS t        | t              rt        j                  j                  | 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.

    data must be str or bytes-like)	
isinstancer#   r   r4   TEXTencoder   BINARY	TypeErrorr   s    r   prepare_datarW      sT      $}}!!4;;=00	D)	$}}##T))899r!   c                    t        | t              r| j                         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.

    rP   )rQ   r#   rS   r   r   rU   rV   s    r   prepare_ctrlrY      s:     ${{}	D)	$T{899r!   )Closec                \    t        j                  |       }|j                  |j                  fS )z
    Parse the payload from a close frame.

    Returns:
        Close code and reason.

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

    )rZ   parsecodereason)r   closes     r   parse_closer`      s%     KKE::u||##r!   c                6    t        | |      j                         S )z3
    Serialize the payload for a close frame.

    )rZ   rC   )r]   r^   s     r   serialize_closerb      s    
 v((**r!   )r   r   rE   ztuple[int, bytes])r   r   rE   r   )r   r   rE   ztuple[int, str])r]   intr^   r#   rE   r   )
__future__r   r2   collections.abcr   r   typingr   r   r    r
   r   
exceptionsr   r   r   r   speedupsr   ImportErrorutilsr   rW   rY   encode_datarZ   r`   rb   rN   r!   r   <module>rm      sn    "  / , , ! 5  #%
@JJ @JF:0:0  $ +[  #"#s   A$ $A21A2