
    8'hSB                         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e
      Z G d dee      Z G d	 d
ee      Z G d dee      Z G d dee      Z G d dee      Zy)    )absolute_importN)PerMessageCompressOfferPerMessageCompressOfferAcceptPerMessageCompressResponse PerMessageCompressResponseAcceptPerMessageCompress)PerMessageSnappyMixinPerMessageSnappyOfferPerMessageSnappyOfferAcceptPerMessageSnappyResponsePerMessageSnappyResponseAcceptPerMessageSnappyc                       e Zd ZdZdZy)r	   z)
    Mixin class for this extension.
    zpermessage-snappyN)__name__
__module____qualname____doc__EXTENSION_NAME     ^/var/www/html/trade_iq/venv/lib/python3.12/site-packages/autobahn/websocket/compress_snappy.pyr	   r	   /   s     )Nr   r	   c                   >    e Zd ZdZed        Z	 	 ddZd Zd Zd Z	y)	r
   zv
    Set of extension parameters for `permessage-snappy` WebSocket extension
    offered by a client to a server.
    c           
      z   d}d}|D ]  }t        ||         dkD  rt        d|d| j                  d      ||   d   }|dk(  r&|durt        d	|d
|d| j                  d      d}c|dk(  r&|durt        d	|d
|d| j                  d      d}t        d|d| j                  d        | ||      }|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   ,multiple occurrence of extension parameter '' for extension ''r   client_no_context_takeoverT#illegal extension parameter value '' for parameter '' of extension 'server_no_context_takeoverillegal extension parameter 'len	Exceptionr   )clsparamsaccept_no_context_takeoverrequest_no_context_takeoverpvaloffers          r   parsezPerMessageSnappyOffer.parse@   s    &+"&+#  	qA6!9~!hiknk}k} ~)A,C00d?#uxz{  ~A  ~P  ~P  %Q  R  R15.22d?#uxz{  ~A  ~P  ~P  %Q  R  R26/  YZ\_\n\n opp-	q0 ./1r   c                     t        |      t        k7  rt        dt        |      z        || _        t        |      t        k7  rt        dt        |      z        || _        y)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*   s      r   __init__zPerMessageSnappyOffer.__init__l   s_     *+t3LtTnOoopp*D'+,4MPTUpPqqrr+F(r   c                 b    | j                   }| j                  r|dz  }| j                  r|dz  }|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*   r3   pmce_strings     r   get_extension_stringz*PerMessageSnappyOffer.get_extension_string   s=     ))**99K++99Kr   c                 J    | j                   | j                  | j                  dS )
        Returns a JSON serializable object representation.

        :returns: JSON serializable representation.
        :rtype: dict
        )	extensionr)   r*   r9   r3   s    r   __json__zPerMessageSnappyOffer.__json__   s+     "00.2.M.M/3/O/OQ 	Qr   c                 <    d| j                   d| j                  dS )
        Returns Python object representation that can be eval'ed to reconstruct the object.

        :returns: Python string representation.
        :rtype: str
        z3PerMessageSnappyOffer(accept_no_context_takeover =  , request_no_context_takeover = ))r)   r*   r@   s    r   __repr__zPerMessageSnappyOffer.__repr__   s8     nr  nM  nM  OS  Oo  Oo  p  	pr   N)TF)
r   r   r   r   classmethodr.   r4   r<   rA   rF   r   r   r   r
   r
   :   s;    
 ) )X -1-2G(	Qpr   r
   c                   .    e Zd ZdZ	 	 ddZd Zd Zd Zy)r   zl
    Set of parameters with which to accept an `permessage-snappy` offer
    from a client by a server.
    Nc                    t        |t              st        dt        |      z        || _        t        |      t
        k7  rt        dt        |      z        |r|j                  st        d|z        || _        |Et        |      t
        k7  rt        dt        |      z        |j                  r|st        d|z        || _        y)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 offerr0   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&   r1   r-   r2   r)   r*   no_context_takeover)r3   r-   r*   rL   s       r   r4   z$PerMessageSnappyOfferAccept.__init__   s     %!677$u+EFF
+,4MPTUpPqqrr&u/O/On  rM  M  N  N+F(*'(D0 IDQdLe eff009L eh{ {||#6 r   c                 v    | j                   }| j                  j                  r|dz  }| j                  r|dz  }|S )r6   r8   r7   )r   r-   r*   r:   s     r   r<   z0PerMessageSnappyOfferAccept.get_extension_string   sA     ))::1199K++99Kr   c                 |    | j                   | j                  j                         | j                  | j                  dS )r>   )r?   r-   r*   rL   )r   r-   rA   r*   rL   r@   s    r   rA   z$PerMessageSnappyOfferAccept.__json__   s;     "00,,./3/O/O'+'?'?A 	Ar   c                 r    d| j                   j                         d| j                  d| j                  dS )rC   zPerMessageSnappyAccept(offer = rD   , no_context_takeover = rE   )r-   rF   r*   rL   r@   s    r   rF   z$PerMessageSnappyOfferAccept.__repr__   sZ     txs}s}  tG  tG  tI  KO  Kk  Kk  mq  mE  mE  F  	Fr   )FN)r   r   r   r   r4   r<   rA   rF   r   r   r   r   r      s&     .3%)!7F
AFr   r   c                   2    e Zd ZdZed        Zd Zd Zd Zy)r   zH
    Set of parameters for `permessage-snappy` responded by server.
    c           
      z   d}d}|D ]  }t        ||         dkD  rt        d|d| j                  d      ||   d   }|dk(  r&|durt        d	|d
|d| j                  d      d}c|dk(  r&|durt        d	|d
|d| j                  d      d}t        d|d| j                  d        | ||      }|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   r   r   Tr   r    r!   r"   r#   r$   )r'   r(   r   r"   r+   r,   responses          r   r.   zPerMessageSnappyResponse.parse   s    &+"%*" 	qA6!9~!hiknk}k} ~)A,C00d?#uxz{  ~A  ~P  ~P  %Q  R  R15.22d?#uxz{  ~A  ~P  ~P  %Q  R  R15.  YZ\_\n\n opp-	q0 113r   c                      || _         || _        y Nr   r"   )r3   r   r"   s      r   r4   z!PerMessageSnappyResponse.__init__  s     +E'*D'r   c                 J    | j                   | j                  | j                  dS )r>   )r?   r   r"   )r   r   r"   r@   s    r   rA   z!PerMessageSnappyResponse.__json__%  s+     "00.2.M.M.2.M.MO 	Or   c                 <    d| j                   d| j                  dS )rC   z6PerMessageSnappyResponse(client_no_context_takeover = , server_no_context_takeover = rE   rV   r@   s    r   rF   z!PerMessageSnappyResponse.__repr__0  s8     pt  pO  pO  QU  Qp  Qp  q  	qr   N)	r   r   r   r   rG   r.   r4   rA   rF   r   r   r   r   r      s.     ' 'RE	Oqr   r   c                   &    e Zd ZdZ	 ddZd Zd Zy)r   zo
    Set of parameters with which to accept an `permessage-snappy` response
    from a server by a client.
    Nc                     t        |t              st        dt        |      z        || _        |Et        |      t
        k7  rt        dt        |      z        |j                  r|st        d|z        || _        y)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 responseNrJ   zCinvalid value %s for no_context_takeover - server requested feature)rK   r   r&   r1   rS   r2   r   rL   )r3   rS   rL   s      r   r4   z'PerMessageSnappyResponseAccept.__init__@  s|     ($<=:T(^KLL *'(D0 IDQdLe eff22;N eh{ {||#6 r   c                 f    | j                   | j                  j                         | j                  dS )r>   )r?   rS   rL   )r   rS   rA   rL   r@   s    r   rA   z'PerMessageSnappyResponseAccept.__json__X  s2     "00 MM224'+'?'?A 	Ar   c                 X    d| j                   j                         d| j                  dS )rC   z*PerMessageSnappyResponseAccept(response = rP   rE   )rS   rF   rL   r@   s    r   rF   z'PerMessageSnappyResponseAccept.__repr__c  s5     ]a\i\i\r\r\tvz  wO  wO  P  	Pr   rU   )r   r   r   r   r4   rA   rF   r   r   r   r   r   :  s     &*70	APr   r   c                   f    e Zd ZdZed        Zed        Zd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zy)r   z<
    `permessage-snappy` WebSocket extension processor.
    c                      | ||j                   j                  |j                  |j                        }|S |j                   j                        }|S rU   )rS   r"   rL   r   r'   	is_serveracceptpmces       r   create_from_response_acceptz,PerMessageSnappy.create_from_response_acceptr  sa    9??==171K1K1W6--I  ^d]l]l  ^H  ^HI r   c                      | ||j                   |j                   n|j                  j                  |j                        }|S rU   )rL   r-   r*   r`   s       r   create_from_offer_acceptz)PerMessageSnappy.create_from_offer_accepty  sI    9171K1K1W6--]c]i]i  ^F  ^F557 r   c                 J    || _         || _        || _        d | _        d | _        y rU   )
_is_serverr"   r   _compressor_decompressor)r3   ra   r"   r   s       r   r4   zPerMessageSnappy.__init__  s+     $*D'*D'!r   c                 J    | j                   | j                  | j                  dS )N)r?   r"   r   )r   r"   r   r@   s    r   rA   zPerMessageSnappy.__json__  s)    !00.2.M.M.2.M.MO 	Or   c                 V    d| j                   d| j                  d| j                  dS )NzPerMessageSnappy(is_server = rY   z, client_no_context_takeover = rE   )rh   r"   r   r@   s    r   rF   zPerMessageSnappy.__repr__  sI    w{  xG  xG  IM  Ih  Ih  jn  jI  jI  J  	Jr   c                     | j                   r3| j                  | j                  rt        j                         | _        y y | j                  | j
                  rt        j                         | _        y y rU   )rh   ri   r"   snappyStreamCompressorr   r@   s    r   start_compress_messagez'PerMessageSnappy.start_compress_message  sa    ??'4+J+J#)#:#:#<  ,K '4+J+J#)#:#:#<  ,Kr   c                 8    | j                   j                  |      S rU   )ri   	add_chunkr3   datas     r   compress_message_dataz&PerMessageSnappy.compress_message_data  s    ))$//r   c                      y)Nr   r   r@   s    r   end_compress_messagez%PerMessageSnappy.end_compress_message  s    r   c                     | j                   r3| j                  | j                  rt        j                         | _        y y | j                  | j
                  rt        j                         | _        y y rU   )rh   rj   r   rn   StreamDecompressorr"   r@   s    r   start_decompress_messagez)PerMessageSnappy.start_decompress_message  sa    ??!!)T-L-L%+%>%>%@" .M !!)T-L-L%+%>%>%@" .Mr   c                 8    | j                   j                  |      S rU   )rj   
decompressrs   s     r   decompress_message_dataz(PerMessageSnappy.decompress_message_data  s    !!,,T22r   c                      y rU   r   r@   s    r   end_decompress_messagez'PerMessageSnappy.end_decompress_message  s    r   N)r   r   r   r   rG   rd   rf   r4   rA   rF   rp   ru   rw   rz   r}   r   r   r   r   r   r   m  s_        	"O
J=0A3r   r   )
__future__r   rn    autobahn.websocket.compress_baser   r   r   r   r   __all__objectr	   r
   r   r   r   r   r   r   r   <module>r      s   6 '  F fp35J fpRJF"?AV JFZGq9;P GqT0P%EG\ 0Pf@)+@ @r   