o
    @BiG                     @   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)PerMessageBzip2MixinPerMessageBzip2OfferPerMessageBzip2OfferAcceptPerMessageBzip2ResponsePerMessageBzip2ResponseAcceptPerMessageBzip2c                   @   s   e Zd ZdZdZ	 g dZdS )r   z)
    Mixin class for this extension.
    zpermessage-bzip2)	                        	   N)__name__
__module____qualname____doc__EXTENSION_NAME!COMPRESS_LEVEL_PERMISSIBLE_VALUES r   r   a/var/www/html/Trade-python/venv/lib/python3.10/site-packages/autobahn/websocket/compress_bzip2.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	   zu
    Set of extension parameters for `permessage-bzip2` WebSocket extension
    offered by a client to a server.
    c              	   C   s   d}d}|D ]`}t || dkrtd|| jf || d }|dkr4|dur1td||| jf d}q|dkr^zt|}W n   td||| jf |tjvr[td||| jf |}qtd	|| jf | ||}|S )
aQ  
        Parses a WebSocket extension offer for `permessage-bzip2` provided by a client to a server.

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

        :returns: object -- A new instance of :class:`autobahn.compress.PerMessageBzip2Offer`.
        Fr   r   Bmultiple occurrence of extension parameter '%s' for extension '%s'client_max_compress_levelTKillegal extension parameter value '%s' for parameter '%s' of extension '%s'server_max_compress_level3illegal extension parameter '%s' for extension '%s'len	Exceptionr   intr   r   )clsparamsaccept_max_compress_levelrequest_max_compress_levelpvalofferr   r   r   parseE   s.   
zPerMessageBzip2Offer.parseTr   c                 C   sP   t |tkrtdt | || _|dkr#|| jvr#td|| jf || _dS )a_  
        Constructor.

        :param accept_max_compress_level: Iff true, client accepts "maximum compression level" parameter.
        :type accept_max_compress_level: bool
        :param request_max_compress_level: Iff non-zero, client requests given "maximum compression level" - must be 1-9.
        :type request_max_compress_level: int
        z-invalid type %s for accept_max_compress_levelr   Ginvalid value %s for request_max_compress_level - permissible values %sN)typeboolr&   r*   r   r+   )selfr*   r+   r   r   r   __init__s   s   
zPerMessageBzip2Offer.__init__c                 C   s0   | j }| jr
|d7 }| jdkr|d| j 7 }|S )
        Returns the WebSocket extension configuration string as sent to the server.

        :returns: PMCE configuration string.
        :rtype: str
        z; client_max_compress_levelr   ; server_max_compress_level=%dr   r*   r+   r3   pmce_stringr   r   r   get_extension_string   s   
z)PerMessageBzip2Offer.get_extension_stringc                 C      | j | j| jdS )
        Returns a JSON serializable object representation.

        :returns: JSON serializable representation.
        :rtype: dict
        )	extensionr*   r+   r7   r3   r   r   r   __json__      zPerMessageBzip2Offer.__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
        zUPerMessageBzip2Offer(accept_max_compress_level = %s, request_max_compress_level = %s))r*   r+   r>   r   r   r   __repr__      zPerMessageBzip2Offer.__repr__N)Tr   )
r   r   r   r   classmethodr/   r4   r:   r?   rC   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
   zk
    Set of parameters with which to accept an `permessage-bzip2` offer
    from a client by a server.
    r   Nc                 C   s   t |tstdt| || _|dkr"|| jvr"td|| jf |dkr/|js/td| || _|durT|| jvrDtd|| jf |jdkrT||jkrTtd| || _dS )a  
        Constructor.

        :param offer: The offer being accepted.
        :type offer: Instance of :class:`autobahn.compress.PerMessageBzip2Offer`.
        :param request_max_compress_level: Iff non-zero, server requests given "maximum compression level" - must be 1-9.
        :type request_max_compress_level: int
        :param compress_level: Override server ("server-to-client direction") compress level (this must be compatible with offer).
        :type compress_level: int
        zinvalid type %s for offerr   r0   zOinvalid value %s for request_max_compress_level - feature unsupported by clientN;invalid value %s for compress_level - permissible values %szJinvalid value %s for compress_level - client requested lower maximum value)	
isinstancer	   r&   r1   r.   r   r*   r+   compress_level)r3   r.   r+   rH   r   r   r   r4      s   


z#PerMessageBzip2OfferAccept.__init__c                 C   s>   | j }| jjdkr|d| jj 7 }| jdkr|d| j 7 }|S )r5   r   r6   z; client_max_compress_level=%d)r   r.   r+   r8   r   r   r   r:      s   
z/PerMessageBzip2OfferAccept.get_extension_stringc                 C   s   | j | j | j| jdS )r<   )r=   r.   r+   rH   )r   r.   r?   r+   rH   r>   r   r   r   r?      s
   z#PerMessageBzip2OfferAccept.__json__c                 C   s   d| j  | j| jf S )rB   zWPerMessageBzip2Accept(offer = %s, request_max_compress_level = %s, compress_level = %s))r.   rC   r+   rH   r>   r   r   r   rC      s   z#PerMessageBzip2OfferAccept.__repr__)r   N)r   r   r   r   r4   r:   r?   rC   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   zG
    Set of parameters for `permessage-bzip2` responded by server.
    c              	   C   s  d}d}|D ]u}t || dkrtd|| jf || d }|dkrIzt|}W n   td||| jf |tjvrFtd||| jf |}q|dkrszt|}W n   td||| jf |tjvrptd||| jf |}qtd|| jf | ||}|S )aa  
        Parses a WebSocket extension response for `permessage-bzip2` 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.PerMessageBzip2Response`.
        :rtype: obj
        r   r   r   r    r!   r"   r#   r$   )r(   r)   r    r"   r,   r-   responser   r   r   r/      s6   

zPerMessageBzip2Response.parsec                 C   s   || _ || _d S Nr    r"   )r3   r    r"   r   r   r   r4   .  s   
z PerMessageBzip2Response.__init__c                 C   r;   )r<   )r=   r    r"   )r   r    r"   r>   r   r   r   r?   4  r@   z PerMessageBzip2Response.__json__c                 C   rA   )rB   zWPerMessageBzip2Response(client_max_compress_level = %s, server_max_compress_level = %s)rK   r>   r   r   r   rC   ?  rD   z PerMessageBzip2Response.__repr__N)	r   r   r   r   rE   r/   r4   r?   rC   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   zn
    Set of parameters with which to accept an `permessage-bzip2` response
    from a server by a client.
    Nc                 C   sn   t |tstdt| || _|dur2|| jvr"td|| jf |jdkr2||jkr2td| || _dS )a@  

        :param response: The response being accepted.
        :type response: Instance of :class:`autobahn.compress.PerMessageBzip2Response`.
        :param compress_level: Override client ("client-to-server direction") compress level (this must be compatible with response).
        :type compress_level: int
        zinvalid type %s for responseNrF   r   zJinvalid value %s for compress_level - server requested lower maximum value)rG   r   r&   r1   rI   r   r    rH   )r3   rI   rH   r   r   r   r4   O  s   



z&PerMessageBzip2ResponseAccept.__init__c                 C   s   | j | j | jdS )r<   )r=   rI   rH   )r   rI   r?   rH   r>   r   r   r   r?   g  s   z&PerMessageBzip2ResponseAccept.__json__c                 C   s   d| j  | jf S )rB   zAPerMessageBzip2ResponseAccept(response = %s, compress_level = %s))rI   rC   rH   r>   r   r   r   rC   r  s   z&PerMessageBzip2ResponseAccept.__repr__rJ   )r   r   r   r   r4   r?   rC   r   r   r   r   r   I  s    
r   c                   @   st   e Zd 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-bzip2` WebSocket extension processor.
    r   c                 C   s.   | ||j j|jd ur|j}|S |j j}|S rJ   )rI   r"   rH   r    r(   	is_serveracceptpmcer   r   r   create_from_response_accept  s   z+PerMessageBzip2.create_from_response_acceptc                 C   s&   | ||j d ur
|j n|jj|j}|S rJ   )rH   r.   r+   rL   r   r   r   create_from_offer_accept  s
   z(PerMessageBzip2.create_from_offer_acceptc                 C   sD   || _ d | _d | _|dkr|n| j| _|dkr|| _d S | j| _d S )Nr   )	_isServer_compressor_decompressorDEFAULT_COMPRESS_LEVELr"   r    )r3   rM   r"   r    r   r   r   r4     s
   zPerMessageBzip2.__init__c                 C   s   | j | j| j| jdS )N)r=   isServerr"   r    )r   rR   r"   r    r>   r   r   r   r?     s
   zPerMessageBzip2.__json__c                 C   s   d| j | j| jf S )Nz^PerMessageBzip2(isServer = %s, server_max_compress_level = %s, client_max_compress_level = %s))rR   r"   r    r>   r   r   r   rC     s   zPerMessageBzip2.__repr__c                 C   sF   | j r| jd u rt| j| _d S d S | jd u r!t| j| _d S d S rJ   )rR   rS   bz2BZ2Compressorr"   r    r>   r   r   r   start_compress_message  s   

z&PerMessageBzip2.start_compress_messagec                 C      | j |S rJ   )rS   compressr3   datar   r   r   compress_message_data     z%PerMessageBzip2.compress_message_datac                 C   s   | j  }d | _ |S rJ   )rS   flushr\   r   r   r   end_compress_message  s   
z$PerMessageBzip2.end_compress_messagec                 C   s   | j d u rt | _ d S d S rJ   )rT   rW   BZ2Decompressorr>   r   r   r   start_decompress_message  s   
z(PerMessageBzip2.start_decompress_messagec                 C   rZ   rJ   )rT   
decompressr\   r   r   r   decompress_message_data  r_   z'PerMessageBzip2.decompress_message_datac                 C   s
   d | _ d S rJ   )rT   r>   r   r   r   end_decompress_message  s   
z&PerMessageBzip2.end_decompress_messageN)r   r   r   r   rU   rE   rP   rQ   r4   r?   rC   rY   r^   ra   rc   re   rf   r   r   r   r   r   |  s     

	r   )
__future__r   rW    autobahn.websocket.compress_baser   r   r   r   r   __all__objectr   r	   r
   r   r   r   r   r   r   r   <module>   s   
lNP3