o
    ]i+                     @  s~   d Z ddlmZ ddlZddlmZmZ ddlmZ ddl	m
Z
mZmZmZmZ G dd	 d	eZG d
d deZejeiZdS )z>
wsproto/extensions
~~~~~~~~~~~~~~~~~~

WebSocket extensions.
    )annotationsN)ABCabstractmethod)Optional   )CloseReasonFrameDecoderFrameProtocolOpcodeRsvBitsc                   @  sj   e Zd ZU ded< d)ddZed*dd	Zd+ddZd,ddZd-ddZ	d.dd Z
d/d#d$Zd0d&d'Zd(S )1	Extensionstrnamereturnboolc                 C  s   dS NF selfr   r   W/var/www/html/stock_analysis/be/venv/lib/python3.10/site-packages/wsproto/extensions.pyenabled      zExtension.enabled
bool | strc                 C     d S Nr   r   r   r   r   offer   s   zExtension.offerr   bool | str | Nonec                 C  r   r   r   r   r   r   r   r   accept   r   zExtension.acceptNonec                 C  r   r   r   r   r   r   r   finalize   r   zExtension.finalizeprotoFrameDecoder | FrameProtocolopcoder
   rsvr   payload_lengthintCloseReason | RsvBitsc                 C  s   t dddS r   )r   )r   r!   r#   r$   r%   r   r   r   frame_inbound_header    s   zExtension.frame_inbound_headerdatabytesbytes | CloseReasonc                 C  s   |S r   r   r   r!   r)   r   r   r   frame_inbound_payload_data)      z$Extension.frame_inbound_payload_datafinbytes | CloseReason | Nonec                 C  r   r   r   )r   r!   r/   r   r   r   frame_inbound_complete.   r.   z Extension.frame_inbound_completetuple[RsvBits, bytes]c                 C  s   ||fS r   r   )r   r!   r#   r$   r)   r/   r   r   r   frame_outbound3   s   zExtension.frame_outboundNr   r   r   r   )r   r   r   r   r   r   r   r   
r!   r"   r#   r
   r$   r   r%   r&   r   r'   r!   r"   r)   r*   r   r+   r!   r"   r/   r   r   r0   r!   r"   r#   r
   r$   r   r)   r*   r/   r   r   r2   )__name__
__module____qualname____annotations__r   r   r   r   r    r(   r-   r1   r3   r   r   r   r   r      s   
 




	
r   c                   @  s   e Zd ZdZdZdZ				dAdBddZedCddZej	dDddZedCddZ
e
j	dDddZ
dEddZdFddZdGddZdHd"d#ZdId&d'ZdJd)d*ZdKd1d2ZdLd6d7ZdMd:d;ZdNd=d>ZdOd?d@ZdS )PPerMessageDeflatezpermessage-deflate   FNclient_no_context_takeoverr   client_max_window_bits
int | Noneserver_no_context_takeoverserver_max_window_bitsr   r   c                 C  sZ   || _ || _| j| _| j| _|d ur|| _|d ur|| _d | _d | _	d | _
d | _d| _d S r   )rA   rD   DEFAULT_CLIENT_MAX_WINDOW_BITS_client_max_window_bitsDEFAULT_SERVER_MAX_WINDOW_BITS_server_max_window_bitsrB   rE   _compressor_decompressor_inbound_is_compressible_inbound_compressed_enabled)r   rA   rB   rD   rE   r   r   r   __init__D   s   
zPerMessageDeflate.__init__r&   c                 C     | j S r   )rG   r   r   r   r   rB   _      z(PerMessageDeflate.client_max_window_bitsvaluec                 C  &   |dk s|dkrd}t ||| _d S N	   r@   z.Window size must be between 9 and 15 inclusive)
ValueErrorrG   r   rR   msgr   r   r   rB   c      
c                 C  rP   r   )rI   r   r   r   r   rE   j   rQ   z(PerMessageDeflate.server_max_window_bitsc                 C  rS   rT   )rV   rI   rW   r   r   r   rE   n   rY   r#   r
   c                 C  s   |t jt jt jfv S r   )r
   TEXTBINARYCONTINUATION)r   r#   r   r   r   _compressible_opcodeu   s   z&PerMessageDeflate._compressible_opcodec                 C  rP   r   )rN   r   r   r   r   r   x   s   zPerMessageDeflate.enabledr   c                 C  sB   d| j  d| j g}| jr|d | jr|d d|S )Nclient_max_window_bits=server_max_window_bits=rA   rD   ; )rB   rE   rA   appendrD   join)r   
parametersr   r   r   r   {   s   




zPerMessageDeflate.offerr   r   c                 C  s   dd | dD }|dd  D ]9}|drd| _q|dr$d| _q|dr7t| d	dd  | _q|d
rIt| d	dd  | _qd| _d S )Nc                 S     g | ]}|  qS r   strip.0br   r   r   
<listcomp>       z.PerMessageDeflate.finalize.<locals>.<listcomp>;r   rA   TrD   rB   =rE   )	split
startswithrA   rD   r&   rf   rB   rE   rN   )r   r   bitsbitr   r   r   r       s   




zPerMessageDeflate.finalizeparamstuple[int | None, int | None]c                 C  s   d }d }dd | dD }|dd  D ]G}|drd| _q|dr(d| _q|drBd	|v r>t| d	dd  }q| j}q|d
r[d	|v rXt| d	dd  }q| j}q||fS )Nc                 S  rd   r   re   rg   r   r   r   rj      rk   z3PerMessageDeflate._parse_params.<locals>.<listcomp>rl   r   rA   TrD   rB   rm   rE   )rn   ro   rA   rD   r&   rf   rB   rE   )r   rr   rB   rE   rp   rq   r   r   r   _parse_params   s$   



zPerMessageDeflate._parse_paramsbool | None | strc                 C  s   |  |\}}g }| jr|d | jr|d z |d ur)|d|  || _|d ur8|d|  || _W n
 tyC   Y d S w d| _d|S )NrA   rD   r^   r_   Tr`   )	rt   rA   ra   rD   rB   rE   rV   rN   rb   )r   r   rB   rE   rc   r   r   r   r      s&   


zPerMessageDeflate.acceptr!   r"   r$   r   r%   r'   c                 C  s   |j r
| r
tjS |j r|tju rtjS | || _| jd u rD|j | _| jrD| js,J |j	r3| j
}n| j}| jd u rDtt| | _tdddS )NTF)rsv1	iscontrolr   PROTOCOL_ERRORr
   r\   r]   rL   rM   clientrE   rB   rK   zlibdecompressobjr&   r   )r   r!   r#   r$   r%   rp   r   r   r   r(      s   


z&PerMessageDeflate.frame_inbound_headerr)   r*   r+   c                 C  sL   | j r| js|S | jd usJ z	| jt|W S  tjy%   tj Y S w r   )	rM   rL   rK   
decompressr*   rz   errorr   INVALID_FRAME_PAYLOAD_DATAr,   r   r   r   r-      s   
z,PerMessageDeflate.frame_inbound_payload_datar/   r0   c                 C  s   |sd S | j sd | _d S | jsd | _d S | jd usJ z| jd}|| j 7 }W n tjy7   tj Y S w |j	r?| j
}n| j}|rGd | _d | _|S )Ns     )rL   rM   rK   r|   flushrz   r}   r   r~   ry   rD   rA   )r   r!   r/   r)   no_context_takeoverr   r   r   r1      s,   
z(PerMessageDeflate.frame_inbound_completer2   c                 C  s   |  |s	||fS |tjurtd|d |d }| jd u r;|tjus$J |jr+| j}n| j}t	tj
tjt| | _| jt|}|rc|| jtj7 }|d d }|jr[| j}n| j}|rcd | _||fS )NTr      )r]   r
   r\   r   rJ   ry   rB   rE   rz   compressobjZ_DEFAULT_COMPRESSIONDEFLATEDr&   compressr*   r   Z_SYNC_FLUSHrA   rD   )r   r!   r#   r$   r)   r/   rp   r   r   r   r   r3   	  s,   


z PerMessageDeflate.frame_outboundc                 C  sV   d| j  g}| jr|d |d| j  | jr |d d| jjd|S )Nr^   rA   r_   rD   z<{} {}>r`   )	rB   rA   ra   rE   rD   format	__class__r;   rb   )r   descrr   r   r   __repr__1  s   

zPerMessageDeflate.__repr__)FNFN)
rA   r   rB   rC   rD   r   rE   rC   r   r   )r   r&   )rR   r&   r   r   )r#   r
   r   r   r4   r5   r6   )rr   r   r   rs   )r   r   r   ru   r7   r8   r9   r:   )r   r   )r;   r<   r=   r   rF   rH   rO   propertyrB   setterrE   r]   r   r   r    rt   r   r(   r-   r1   r3   r   r   r   r   r   r?   >   s8    









(r?   )__doc__
__future__r   rz   abcr   r   typingr   frame_protocolr   r   r	   r
   r   r   r?   r   SUPPORTED_EXTENSIONSr   r   r   r   <module>   s    .  