U
    •uÄcB  ã                   @   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)Ú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   úd/var/www/html/NKSPORTS/school/venv/lib/python3.8/site-packages/autobahn/websocket/compress_snappy.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   zv
    Set of extension parameters for `permessage-snappy` 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–|dk	r�td||| jf ƒ‚q¨d}qtd	|| jf ƒ‚q| ||ƒ}|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_takeoverTúKillegal extension parameter value '%s' for parameter '%s' of extension '%s'Úserver_no_context_takeoverú3illegal 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__j   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(   Zpmce_stringr   r   r   Úget_extension_string~   s    z*PerMessageSnappyOffer.get_extension_stringc                 C   s   | 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__Œ   s    þzPerMessageSnappyOffer.__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
        zXPerMessageSnappyOffer(accept_no_context_takeover = %s, request_no_context_takeover = %s))r   r    r2   r   r   r   Ú__repr__—   s    zPerMessageSnappyOffer.__repr__N)TF)
r   r   r   r   Úclassmethodr$   r)   r/   r3   r5   r   r   r   r   r   8   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	   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|ƒ ƒ‚|rR|jsRtd| ƒ‚|| _|dk	r’t|ƒtkr|tdt|ƒ ƒ‚|jr’|s’t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    r9   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    r.   r   r   r   r/   Ê   s    z0PerMessageSnappyOfferAccept.get_extension_stringc                 C   s   | j | j ¡ | j| jdœS )r0   )r1   r#   r    r9   )r   r#   r3   r    r9   r2   r   r   r   r3   Ø   s
    ýz$PerMessageSnappyOfferAccept.__json__c                 C   s   d| j  ¡ | j| jf S )r4   z^PerMessageSnappyAccept(offer = %s, request_no_context_takeover = %s, no_context_takeover = %s))r#   r5   r    r9   r2   r   r   r   r5   ä   s    z$PerMessageSnappyOfferAccept.__repr__)FN)r   r   r   r   r)   r/   r3   r5   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   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–|dk	r�td||| jf ƒ‚q¨d}qtd	|| jf ƒ‚q| ||ƒ}|S )
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   s   | j | j| jdœS )r0   )r1   r   r   )r   r   r   r2   r   r   r   r3   #  s    þz!PerMessageSnappyResponse.__json__c                 C   s   d| j | jf S )r4   zZPerMessageSnappyResponse(client_no_context_takeover = %s, server_no_context_takeover = %s)r<   r2   r   r   r   r5   .  s    z!PerMessageSnappyResponse.__repr__N)	r   r   r   r   r6   r$   r)   r3   r5   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k	rZt|ƒtkrDtdt|ƒ ƒ‚|jrZ|sZt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 responseNr7   zCinvalid value %s for no_context_takeover - server requested feature)r8   r
   r   r&   r:   r'   r   r9   )r(   r:   r9   r   r   r   r)   >  s    


z'PerMessageSnappyResponseAccept.__init__c                 C   s   | j | j ¡ | jdœS )r0   )r1   r:   r9   )r   r:   r3   r9   r2   r   r   r   r3   V  s    þz'PerMessageSnappyResponseAccept.__json__c                 C   s   d| j  ¡ | jf S )r4   zGPerMessageSnappyResponseAccept(response = %s, no_context_takeover = %s))r:   r5   r9   r2   r   r   r   r5   a  s    z'PerMessageSnappyResponseAccept.__repr__)N)r   r   r   r   r)   r3   r5   r   r   r   r   r   8  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 k	r|jn|j jƒ}|S r;   )r:   r   r9   r   ©r   Ú	is_serverÚacceptZpmcer   r   r   Úcreate_from_response_acceptp  s
    þz,PerMessageSnappy.create_from_response_acceptc                 C   s&   | ||j d k	r|j n|jj|jƒ}|S r;   )r9   r#   r    r=   r   r   r   Úcreate_from_offer_acceptw  s
    þz)PerMessageSnappy.create_from_offer_acceptc                 C   s"   || _ || _|| _d | _d | _d S r;   )Ú
_is_serverr   r   Ú_compressorÚ_decompressor)r(   r>   r   r   r   r   r   r)   ~  s
    zPerMessageSnappy.__init__c                 C   s   | j | j| jdœS )N)r1   r   r   )r   r   r   r2   r   r   r   r3   ‰  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))rB   r   r   r2   r   r   r   r5   Ž  s    zPerMessageSnappy.__repr__c                 C   s@   | j r"| jd ks| jr<t ¡ | _n| jd ks2| jr<t ¡ | _d S r;   )rB   rC   r   ÚsnappyZStreamCompressorr   r2   r   r   r   Ústart_compress_message‘  s
    z'PerMessageSnappy.start_compress_messagec                 C   s   | j  |¡S r;   )rC   Z	add_chunk©r(   Údatar   r   r   Úcompress_message_data™  s    z&PerMessageSnappy.compress_message_datac                 C   s   dS )Nó    r   r2   r   r   r   Úend_compress_messageœ  s    z%PerMessageSnappy.end_compress_messagec                 C   s@   | j r"| jd ks| jr<t ¡ | _n| jd ks2| jr<t ¡ | _d S r;   )rB   rD   r   rE   ZStreamDecompressorr   r2   r   r   r   Ústart_decompress_messageŸ  s
    z)PerMessageSnappy.start_decompress_messagec                 C   s   | j  |¡S r;   )rD   Ú
decompressrG   r   r   r   Údecompress_message_data§  s    z(PerMessageSnappy.decompress_message_datac                 C   s   d S r;   r   r2   r   r   r   Úend_decompress_messageª  s    z'PerMessageSnappy.end_decompress_messageN)r   r   r   r   r6   r@   rA   r)   r3   r5   rF   rI   rK   rL   rN   rO   r   r   r   r   r   k  s   

r   )rE   Z 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