o
    @BiSB                     @   s   d dl mZ d dlZd dlmZmZmZmZmZ dZ	G dd de
ZG dd deeZG d	d
 d
eeZG dd deeZG dd deeZG dd deeZdS )    )absolute_importN)PerMessageCompressOfferPerMessageCompressOfferAcceptPerMessageCompressResponse PerMessageCompressResponseAcceptPerMessageCompress)PerMessageSnappyMixinPerMessageSnappyOfferPerMessageSnappyOfferAcceptPerMessageSnappyResponsePerMessageSnappyResponseAcceptPerMessageSnappyc                   @   s   e Zd ZdZdZdS )r   z)
    Mixin class for this extension.
    zpermessage-snappyN)__name__
__module____qualname____doc__EXTENSION_NAME r   r   b/var/www/html/Trade-python/venv/lib/python3.10/site-packages/autobahn/websocket/compress_snappy.pyr   /   s    r   c                   @   sB   e Zd ZdZedd Z		dddZdd	 Zd
d Zdd Z	dS )r	   zv
    Set of extension parameters for `permessage-snappy` WebSocket extension
    offered by a client to a server.
    c                 C      d}d}|D ]K}t || dkrtd|| jf || d }|dkr4|dur1td||| jf d}q|dkrI|durFtd||| jf d}qtd	|| jf | ||}|S )
a]  
        Parses a WebSocket extension offer for `permessage-snappy` provided by a client to a server.

        :param params: Output from :func:`autobahn.websocket.WebSocketProtocol._parseExtensionsHeader`.
        :type params: list

        :returns: A new instance of :class:`autobahn.compress.PerMessageSnappyOffer`.
        :rtype: obj
        F   Bmultiple occurrence of extension parameter '%s' for extension '%s'r   client_no_context_takeoverTKillegal extension parameter value '%s' for parameter '%s' of extension '%s'server_no_context_takeover3illegal extension parameter '%s' for extension '%s'len	Exceptionr   )clsparamsaccept_no_context_takeoverrequest_no_context_takeoverpvalofferr   r   r   parse@   s&   zPerMessageSnappyOffer.parseTFc                 C   sH   t |tkrtdt | || _t |tkrtdt | || _dS )a0  

        :param accept_no_context_takeover: Iff true, client accepts "no context takeover" feature.
        :type accept_no_context_takeover: bool
        :param request_no_context_takeover: Iff true, client request "no context takeover" feature.
        :type request_no_context_takeover: bool
        z.invalid type %s for accept_no_context_takeover/invalid type %s for request_no_context_takeoverN)typeboolr   r!   r"   )selfr!   r"   r   r   r   __init__l   s   

zPerMessageSnappyOffer.__init__c                 C   s&   | j }| jr
|d7 }| jr|d7 }|S )
        Returns the WebSocket extension configuration string as sent to the server.

        :returns: PMCE configuration string.
        :rtype: str
        ; client_no_context_takeover; server_no_context_takeoverr   r!   r"   r*   pmce_stringr   r   r   get_extension_string   s   z*PerMessageSnappyOffer.get_extension_stringc                 C      | j | j| jdS )
        Returns a JSON serializable object representation.

        :returns: JSON serializable representation.
        :rtype: dict
        )	extensionr!   r"   r/   r*   r   r   r   __json__      zPerMessageSnappyOffer.__json__c                 C      d| j | jf S )
        Returns Python object representation that can be eval'ed to reconstruct the object.

        :returns: Python string representation.
        :rtype: str
        zXPerMessageSnappyOffer(accept_no_context_takeover = %s, request_no_context_takeover = %s))r!   r"   r6   r   r   r   __repr__      zPerMessageSnappyOffer.__repr__N)TF)
r   r   r   r   classmethodr&   r+   r2   r7   r;   r   r   r   r   r	   :   s    
,
r	   c                   @   s6   e Zd ZdZ		dddZdd Zdd	 Zd
d ZdS )r
   zl
    Set of parameters with which to accept an `permessage-snappy` offer
    from a client by a server.
    FNc                 C   s   t |tstdt| || _t|tkrtdt| |r)|js)td| || _|durIt|tkr>tdt| |jrI|sItd| || _dS )a  

        :param offer: The offer being accepted.
        :type offer: Instance of :class:`autobahn.compress.PerMessageSnappyOffer`.
        :param request_no_context_takeover: Iff true, server request "no context takeover" feature.
        :type request_no_context_takeover: bool
        :param no_context_takeover: Override server ("server-to-client direction") context takeover (this must be compatible with offer).
        :type no_context_takeover: bool
        zinvalid type %s for offerr'   zPinvalid value %s for request_no_context_takeover - feature unsupported by clientN'invalid type %s for no_context_takeoverzCinvalid value %s for no_context_takeover - client requested feature)	
isinstancer	   r   r(   r%   r)   r!   r"   no_context_takeover)r*   r%   r"   r@   r   r   r   r+      s   



z$PerMessageSnappyOfferAccept.__init__c                 C   s(   | j }| jjr|d7 }| jr|d7 }|S )r,   r.   r-   )r   r%   r"   r0   r   r   r   r2      s   z0PerMessageSnappyOfferAccept.get_extension_stringc                 C   s   | j | j | j| jdS )r4   )r5   r%   r"   r@   )r   r%   r7   r"   r@   r6   r   r   r   r7      s
   z$PerMessageSnappyOfferAccept.__json__c                 C   s   d| j  | j| jf S )r:   z^PerMessageSnappyAccept(offer = %s, request_no_context_takeover = %s, no_context_takeover = %s))r%   r;   r"   r@   r6   r   r   r   r;      s   z$PerMessageSnappyOfferAccept.__repr__)FN)r   r   r   r   r+   r2   r7   r;   r   r   r   r   r
      s    
#r
   c                   @   s4   e Zd ZdZedd Zdd Zdd Zdd	 Zd
S )r   zH
    Set of parameters for `permessage-snappy` responded by server.
    c                 C   r   )
ac  
        Parses a WebSocket extension response for `permessage-snappy` provided by a server to a client.

        :param params: Output from :func:`autobahn.websocket.WebSocketProtocol._parseExtensionsHeader`.
        :type params: list

        :returns: A new instance of :class:`autobahn.compress.PerMessageSnappyResponse`.
        :rtype: obj
        Fr   r   r   r   Tr   r   r   r   )r   r    r   r   r#   r$   responser   r   r   r&      s&   zPerMessageSnappyResponse.parsec                 C   s   || _ || _d S Nr   r   )r*   r   r   r   r   r   r+     s   
z!PerMessageSnappyResponse.__init__c                 C   r3   )r4   )r5   r   r   )r   r   r   r6   r   r   r   r7   %  r8   z!PerMessageSnappyResponse.__json__c                 C   r9   )r:   zZPerMessageSnappyResponse(client_no_context_takeover = %s, server_no_context_takeover = %s)rC   r6   r   r   r   r;   0  r<   z!PerMessageSnappyResponse.__repr__N)	r   r   r   r   r=   r&   r+   r7   r;   r   r   r   r   r      s    
)r   c                   @   s,   e Zd ZdZ	d	ddZdd Zdd ZdS )
r   zo
    Set of parameters with which to accept an `permessage-snappy` response
    from a server by a client.
    Nc                 C   sd   t |tstdt| || _|dur-t|tkr"tdt| |jr-|s-td| || _dS )aN  

        :param response: The response being accepted.
        :type response: Instance of :class:`autobahn.compress.PerMessageSnappyResponse`.
        :param no_context_takeover: Override client ("client-to-server direction") context takeover (this must be compatible with response).
        :type no_context_takeover: bool
        zinvalid type %s for responseNr>   zCinvalid value %s for no_context_takeover - server requested feature)r?   r   r   r(   rA   r)   r   r@   )r*   rA   r@   r   r   r   r+   @  s   



z'PerMessageSnappyResponseAccept.__init__c                 C   s   | j | j | jdS )r4   )r5   rA   r@   )r   rA   r7   r@   r6   r   r   r   r7   X  s   z'PerMessageSnappyResponseAccept.__json__c                 C   s   d| j  | jf S )r:   zGPerMessageSnappyResponseAccept(response = %s, no_context_takeover = %s))rA   r;   r@   r6   r   r   r   r;   c  s   z'PerMessageSnappyResponseAccept.__repr__rB   )r   r   r   r   r+   r7   r;   r   r   r   r   r   :  s    
r   c                   @   sp   e Zd ZdZedd Zedd Zdd Zdd	 Zd
d Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )r   z<
    `permessage-snappy` WebSocket extension processor.
    c                 C   s.   | ||j j|jd ur|j}|S |j j}|S rB   )rA   r   r@   r   r   	is_serveracceptpmcer   r   r   create_from_response_acceptr  s   z,PerMessageSnappy.create_from_response_acceptc                 C   s&   | ||j d ur
|j n|jj|j}|S rB   )r@   r%   r"   rD   r   r   r   create_from_offer_accepty  s
   z)PerMessageSnappy.create_from_offer_acceptc                 C   s"   || _ || _|| _d | _d | _d S rB   )
_is_serverr   r   _compressor_decompressor)r*   rE   r   r   r   r   r   r+     s
   
zPerMessageSnappy.__init__c                 C   r3   )N)r5   r   r   )r   r   r   r6   r   r   r   r7     s   zPerMessageSnappy.__json__c                 C   s   d| j | j| jf S )NzbPerMessageSnappy(is_server = %s, server_no_context_takeover = %s, client_no_context_takeover = %s))rJ   r   r   r6   r   r   r   r;     s   zPerMessageSnappy.__repr__c                 C   J   | j r| jd u s| jrt | _d S d S | jd u s| jr#t | _d S d S rB   )rJ   rK   r   snappyStreamCompressorr   r6   r   r   r   start_compress_message     z'PerMessageSnappy.start_compress_messagec                 C      | j |S rB   )rK   	add_chunkr*   datar   r   r   compress_message_data     z&PerMessageSnappy.compress_message_datac                 C   s   dS )N    r   r6   r   r   r   end_compress_message     z%PerMessageSnappy.end_compress_messagec                 C   rM   rB   )rJ   rL   r   rN   StreamDecompressorr   r6   r   r   r   start_decompress_message  rQ   z)PerMessageSnappy.start_decompress_messagec                 C   rR   rB   )rL   
decompressrT   r   r   r   decompress_message_data  rW   z(PerMessageSnappy.decompress_message_datac                 C   s   d S rB   r   r6   r   r   r   end_decompress_message  rZ   z'PerMessageSnappy.end_decompress_messageN)r   r   r   r   r=   rH   rI   r+   r7   r;   rP   rV   rY   r\   r^   r_   r   r   r   r   r   m  s    

r   )
__future__r   rN    autobahn.websocket.compress_baser   r   r   r   r   __all__objectr   r	   r
   r   r   r   r   r   r   r   <module>   s   
iMJ3