U
    •uÄc‹G  ã                   @   s–   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 )é    N)ÚPerMessageCompressOfferÚPerMessageCompressOfferAcceptÚPerMessageCompressResponseÚ PerMessageCompressResponseAcceptÚPerMessageCompress)ÚPerMessageBzip2MixinÚPerMessageBzip2OfferÚPerMessageBzip2OfferAcceptÚPerMessageBzip2ResponseÚPerMessageBzip2ResponseAcceptÚPerMessageBzip2c                	   @   s*   e Zd ZdZdZddddddd	d
dg	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   úb/var/www/html/HOTSTAR/school/venv/lib/python3.8/site-packages/autobahn/websocket/compress_bzip2.pyr   -   s   r   c                   @   s>   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r2td|| jf ƒ‚|| d }|dkrj|dk	rdtd||| jf ƒ‚qØd}q|dkrÆzt|ƒ}W n    td||| jf ƒ‚Y nX |tjkrÀtd||| jf ƒ‚qØ|}qtd	|| jf ƒ‚q| ||ƒ}|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_levelTúKillegal extension parameter value '%s' for parameter '%s' of extension '%s'Úserver_max_compress_levelú3illegal 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   ÚparseC   s.    
ÿzPerMessageBzip2Offer.parseTr   c                 C   sP   t |ƒtkrtdt |ƒ ƒ‚|| _|dkrF|| jkrFt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__q   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*   ©r2   Zpmce_stringr   r   r   Úget_extension_string†   s    
z)PerMessageBzip2Offer.get_extension_stringc                 C   s   | j | j| jdœS )úŽ
        Returns a JSON serializable object representation.

        :returns: JSON serializable representation.
        :rtype: dict
        )Ú	extensionr)   r*   r6   ©r2   r   r   r   Ú__json__”   s    þzPerMessageBzip2Offer.__json__c                 C   s   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__Ÿ   s    zPerMessageBzip2Offer.__repr__N)Tr   )
r   r   r   r   Úclassmethodr.   r3   r8   r<   r>   r   r   r   r   r   =   s   
.  þ
r   c                   @   s2   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rD|| jkrDtd|| jf ƒ‚|dkr^|js^td| ƒ‚|| _|dk	r¨|| jkrˆtd|| jf ƒ‚|jdkr¨||jkr¨t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   r/   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%   r0   r-   r   r)   r*   Úcompress_level)r2   r-   r*   rB   r   r   r   r3   ¯   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 )r4   r   r5   z; client_max_compress_level=%d)r   r-   r*   r7   r   r   r   r8   Ó   s    
z/PerMessageBzip2OfferAccept.get_extension_stringc                 C   s   | j | j ¡ | j| jdœS )r9   )r:   r-   r*   rB   )r   r-   r<   r*   rB   r;   r   r   r   r<   á   s
    ýz#PerMessageBzip2OfferAccept.__json__c                 C   s   d| j  ¡ | j| jf S )r=   zWPerMessageBzip2Accept(offer = %s, request_max_compress_level = %s, compress_level = %s))r-   r>   r*   rB   r;   r   r   r   r>   í   s    z#PerMessageBzip2OfferAccept.__repr__)r   N)r   r   r   r   r3   r8   r<   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
   zG
    Set of parameters for `permessage-bzip2` responded by server.
    c              	   C   s  d}d}|D ]ü}t || ƒdkr2td|| jf ƒ‚|| d }|dkršzt|ƒ}W n    td||| jf ƒ‚Y nX |tjkr”td||| jf ƒ‚n|}q|dkrözt|ƒ}W n    td||| jf ƒ‚Y nX |tjkrðtd||| jf ƒ‚n|}qtd|| jf ƒ‚q| ||ƒ}|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!   )r2   r   r!   r   r   r   r3   ,  s    z PerMessageBzip2Response.__init__c                 C   s   | j | j| jdœS )r9   )r:   r   r!   )r   r   r!   r;   r   r   r   r<   2  s    þz PerMessageBzip2Response.__json__c                 C   s   d| j | jf S )r=   zWPerMessageBzip2Response(client_max_compress_level = %s, server_max_compress_level = %s)rE   r;   r   r   r   r>   =  s    z PerMessageBzip2Response.__repr__N)	r   r   r   r   r?   r.   r3   r<   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   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k	rd|| jkrDtd|| jf ƒ‚|jdkrd||jkrdt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 responseNr@   r   zJinvalid value %s for compress_level - server requested lower maximum value)rA   r
   r%   r0   rC   r   r   rB   )r2   rC   rB   r   r   r   r3   M  s    


z&PerMessageBzip2ResponseAccept.__init__c                 C   s   | j | j ¡ | jdœS )r9   )r:   rC   rB   )r   rC   r<   rB   r;   r   r   r   r<   e  s    þz&PerMessageBzip2ResponseAccept.__json__c                 C   s   d| j  ¡ | jf S )r=   zAPerMessageBzip2ResponseAccept(response = %s, compress_level = %s))rC   r>   rB   r;   r   r   r   r>   p  s    z&PerMessageBzip2ResponseAccept.__repr__)N)r   r   r   r   r3   r<   r>   r   r   r   r   r   G  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 k	r|jn|j jƒ}|S rD   )rC   r!   rB   r   ©r'   Ú	is_serverÚacceptZpmcer   r   r   Úcreate_from_response_accept€  s
    þz+PerMessageBzip2.create_from_response_acceptc                 C   s&   | ||j d k	r|j n|jj|jƒ}|S rD   )rB   r-   r*   rF   r   r   r   Úcreate_from_offer_accept‡  s
    þz(PerMessageBzip2.create_from_offer_acceptc                 C   s>   || _ d | _d | _|dkr|n| j| _|dkr2|n| j| _d S )Nr   )Ú	_isServerÚ_compressorÚ_decompressorÚDEFAULT_COMPRESS_LEVELr!   r   )r2   rG   r!   r   r   r   r   r3   Ž  s
    zPerMessageBzip2.__init__c                 C   s   | j | j| j| jdœS )N)r:   ZisServerr!   r   )r   rK   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))rK   r!   r   r;   r   r   r   r>   Ÿ  s    zPerMessageBzip2.__repr__c                 C   s<   | j r | jd kr8t | j¡| _n| jd kr8t | j¡| _d S rD   )rK   rL   Úbz2ÚBZ2Compressorr!   r   r;   r   r   r   Ústart_compress_message¢  s
    

z&PerMessageBzip2.start_compress_messagec                 C   s   | j  |¡S rD   )rL   Úcompress©r2   Údatar   r   r   Úcompress_message_dataª  s    z%PerMessageBzip2.compress_message_datac                 C   s   | j  ¡ }d | _ |S rD   )rL   ÚflushrS   r   r   r   Úend_compress_message­  s    
z$PerMessageBzip2.end_compress_messagec                 C   s   | j d krt ¡ | _ d S rD   )rM   rO   ÚBZ2Decompressorr;   r   r   r   Ústart_decompress_message¶  s    
z(PerMessageBzip2.start_decompress_messagec                 C   s   | j  |¡S rD   )rM   Ú
decompressrS   r   r   r   Údecompress_message_dataº  s    z'PerMessageBzip2.decompress_message_datac                 C   s
   d | _ d S rD   )rM   r;   r   r   r   Úend_decompress_message½  s    z&PerMessageBzip2.end_decompress_messageN)r   r   r   r   rN   r?   rI   rJ   r3   r<   r>   rQ   rU   rW   rY   r[   r\   r   r   r   r   r   z  s   

	r   )rO   Z 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