
    hG                         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)    N)PerMessageCompressOfferPerMessageCompressOfferAcceptPerMessageCompressResponse PerMessageCompressResponseAcceptPerMessageCompress)PerMessageBzip2MixinPerMessageBzip2OfferPerMessageBzip2OfferAcceptPerMessageBzip2ResponsePerMessageBzip2ResponseAcceptPerMessageBzip2c                       e Zd ZdZdZ	 g dZy)r   z)
    Mixin class for this extension.
    zpermessage-bzip2)	                        	   N)__name__
__module____qualname____doc__EXTENSION_NAME!COMPRESS_LEVEL_PERMISSIBLE_VALUES     ]/var/www/Befach/backend/env/lib/python3.12/site-packages/autobahn/websocket/compress_bzip2.pyr   r   -   s!     (N )D%r   r   c                   >    e Zd ZdZed        Z	 	 ddZd Zd Zd Z	y)	r	   zu
    Set of extension parameters for `permessage-bzip2` WebSocket extension
    offered by a client to a server.
    c                    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@	 t        |      }|t        j
                  vrt        d	|d
|d| j                  d      |}t        d|d| j                  d        | ||      }|S #  t        d	|d
|d| j                  d      xY w)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   ,multiple occurrence of extension parameter '' for extension ''client_max_compress_levelT#illegal extension parameter value '' for parameter '' of extension 'server_max_compress_levelillegal extension parameter 'len	Exceptionr   intr   r   )clsparamsaccept_max_compress_levelrequest_max_compress_levelpvaloffers          r    parsezPerMessageBzip2Offer.parseC   s_    %*!%&" A6!9~!hiknk}k} ~)A,C//d?#uxz{  ~A  ~P  ~P  %Q  R  R04-11Rc(C 2TTT#uxz{  ~A  ~P  ~P  %Q  R  R14.  YZ\_\n\n opp3 6 -.0R#uxz{  ~A  ~P  ~P  %Q  R  Rs   0C!C8c                     t        |      t        k7  rt        dt        |      z        || _        |dk7  r)|| j                  vrt        d|d| j                        || _        y)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   invalid value 5 for request_max_compress_level - permissible values N)typeboolr.   r2   r   r3   )selfr2   r3   s      r    __init__zPerMessageBzip2Offer.__init__q   s     )*d2KdSlNmmnn)B&%*/IQUQwQw/w  jD  FJ  Fl  Fl  m  n  n*D'r   c                     | j                   }| j                  r|dz  }| j                  dk7  r|d| j                  z  z  }|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   r2   r3   r=   pmce_strings     r    get_extension_stringz)PerMessageBzip2Offer.get_extension_string   sM     ))))88K**a/;d>]>]]]Kr   c                 J    | j                   | j                  | j                  dS )
        Returns a JSON serializable object representation.

        :returns: JSON serializable representation.
        :rtype: dict
        )	extensionr2   r3   rB   r=   s    r    __json__zPerMessageBzip2Offer.__json__   s+     "00-1-K-K.2.M.MO 	O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
        z1PerMessageBzip2Offer(accept_max_compress_level = , request_max_compress_level = ))r2   r3   rI   s    r    __repr__zPerMessageBzip2Offer.__repr__   s8     ko  kI  kI  KO  Kj  Kj  k  	kr   N)Tr   )
r   r   r   r   classmethodr7   r>   rE   rJ   rO   r   r   r    r	   r	   =   s;    
 + +\ ,0,-E*	Okr   r	   c                   .    e Zd ZdZ	 	 ddZd Zd Zd Zy)r
   zk
    Set of parameters with which to accept an `permessage-bzip2` offer
    from a client by a server.
    Nc                    t        |t              st        dt        |      z        || _        |dk7  r)|| j
                  vrt        d|d| j
                        |dk7  r|j                  st        d|z        || _        |U|| j
                  vrt        d|d| j
                        |j                  dk7  r||j                  kD  rt        d|z        || _        y)	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   r9   r:   zOinvalid value %s for request_max_compress_level - feature unsupported by clientN) for compress_level - permissible values zJinvalid value %s for compress_level - client requested lower maximum value)	
isinstancer	   r.   r;   r6   r   r2   r3   compress_level)r=   r6   r3   rU   s       r    r>   z#PerMessageBzip2OfferAccept.__init__   s    %!567$u+EFF
%*/IQUQwQw/w  jD  FJ  Fl  Fl  m  n  n%*53R3Rm  qK  K  L  L*D'%T%K%KKaoqu  rX  rX  !Y  Z  Z//14%JjJj9j lo} }~~,r   c                     | j                   }| j                  j                  dk7  r|d| j                  j                  z  z  }| j                  dk7  r|d| j                  z  z  }|S )r@   r   rA   z; client_max_compress_level=%d)r   r6   r3   rC   s     r    rE   z/PerMessageBzip2OfferAccept.get_extension_string   se     ))::00A5;djj>c>cccK**a/;d>]>]]]Kr   c                 |    | j                   | j                  j                         | j                  | j                  dS )rG   )rH   r6   r3   rU   )r   r6   rJ   r3   rU   rI   s    r    rJ   z#PerMessageBzip2OfferAccept.__json__   s9     "00,,..2.M.M"&"5"57 	7r   c                 r    d| j                   j                         d| j                  d| j                  dS )rL   zPerMessageBzip2Accept(offer = rM   , compress_level = rN   )r6   rO   r3   rU   rI   s    r    rO   z#PerMessageBzip2OfferAccept.__repr__   sR     mqlvlvll  mB  DH  Dc  Dc  ei  ex  ex  y  	yr   )r   N)r   r   r   r   r>   rE   rJ   rO   r   r   r    r
   r
      s%     -. $"-H
7yr   r
   c                   2    e Zd ZdZed        Zd Zd Zd Zy)r   zG
    Set of parameters for `permessage-bzip2` responded by server.
    c                 r   d}d}|D ]  }t        ||         dkD  rt        d|d| j                  d      ||   d   }|dk(  r@	 t        |      }|t        j
                  vrt        d|d|d	| j                  d      |}}|d
k(  r@	 t        |      }|t        j
                  vrt        d|d|d	| j                  d      |}t        d|d| j                  d        | ||      }|S #  t        d|d|d	| j                  d      xY w#  t        d|d|d	| j                  d      xY w)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,   )r0   r1   r&   r*   r4   r5   responses          r    r7   zPerMessageBzip2Response.parse   s    %&!$%!A6!9~!hiknk}k} ~)A,C//Rc(C 2TTT#uxz{  ~A  ~P  ~P  %Q  R  R03-11Rc(C 2TTT#uxz{  ~A  ~P  ~P  %Q  R  R03-  YZ\_\n\n opp9 < 002-R#uxz{  ~A  ~P  ~P  %Q  R  RR#uxz{  ~A  ~P  ~P  %Q  R  Rs   C1
D1!D!D6c                      || _         || _        y Nr&   r*   )r=   r&   r*   s      r    r>   z PerMessageBzip2Response.__init__,  s     *C&)B&r   c                 J    | j                   | j                  | j                  dS )rG   )rH   r&   r*   )r   r&   r*   rI   s    r    rJ   z PerMessageBzip2Response.__json__2  s+     "00-1-K-K-1-K-KM 	Mr   c                 <    d| j                   d| j                  dS )rL   z4PerMessageBzip2Response(client_max_compress_level = , server_max_compress_level = rN   r_   rI   s    r    rO   z PerMessageBzip2Response.__repr__=  s8     mq  mK  mK  MQ  Mk  Mk  l  	lr   N)	r   r   r   r   rP   r7   r>   rJ   rO   r   r   r    r   r      s.     - -^C	Mlr   r   c                   &    e Zd ZdZ	 ddZd Zd Zy)r   zn
    Set of parameters with which to accept an `permessage-bzip2` response
    from a server by a client.
    Nc                    t        |t              st        dt        |      z        || _        |U|| j
                  vrt        d|d| j
                        |j                  dk7  r||j                  kD  rt        d|z        || _        y)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 responseNr9   rS   r   zJinvalid value %s for compress_level - server requested lower maximum value)rT   r   r.   r;   r\   r   r&   rU   )r=   r\   rU   s      r    r>   z&PerMessageBzip2ResponseAccept.__init__M  s     ($;<:T(^KLL %T%K%KKaoqu  rX  rX  !Y  Z  Z11Q6>HLnLn;n lo} }~~,r   c                 f    | j                   | j                  j                         | j                  dS )rG   )rH   r\   rU   )r   r\   rJ   rU   rI   s    r    rJ   z&PerMessageBzip2ResponseAccept.__json__e  s0     "00 MM224"&"5"57 	7r   c                 X    d| j                   j                         d| j                  dS )rL   z)PerMessageBzip2ResponseAccept(response = rY   rN   )r\   rO   rU   rI   s    r    rO   z&PerMessageBzip2ResponseAccept.__repr__p  s5     W[VcVcVlVlVnpt  qD  qD  E  	Er   r^   )r   r   r   r   r>   rJ   rO   r   r   r    r   r   G  s     !%-0	7Er   r   c                   j    e Zd 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-bzip2` WebSocket extension processor.
    r   c                      | ||j                   j                  |j                  |j                        }|S |j                   j                        }|S r^   )r\   r*   rU   r&   r0   	is_serveracceptpmces       r    create_from_response_acceptz+PerMessageBzip2.create_from_response_accept  sY    9??<<,2,A,A,M6((~  TZSbSbS|S|~ r   c                      | ||j                   |j                   n|j                  j                  |j                        }|S r^   )rU   r6   r3   ri   s       r    create_from_offer_acceptz(PerMessageBzip2.create_from_offer_accept  sA    9,2,A,A,M6((SYS_S_SzSz446 r   c                     || _         d | _        d | _        |dk7  r|n| j                  | _        |dk7  r|| _        y | j                  | _        y )Nr   )	_isServer_compressor_decompressorDEFAULT_COMPRESS_LEVELr*   r&   )r=   rj   r*   r&   s       r    r>   zPerMessageBzip2.__init__  sd     #!F_cdFd)Bjn  kF  kF&F_cdFd)B&jn  kF  kF&r   c                 `    | j                   | j                  | j                  | j                  dS )N)rH   isServerr*   r&   )r   rq   r*   r&   rI   s    r    rJ   zPerMessageBzip2.__json__  s0    !00 NN-1-K-K-1-K-KM 	Mr   c                 V    d| j                   d| j                  d| j                  dS )NzPerMessageBzip2(isServer = rb   z, client_max_compress_level = rN   )rq   r*   r&   rI   s    r    rO   zPerMessageBzip2.__repr__  sI    sw  tB  tB  DH  Db  Db  dh  dB  dB  C  	Cr   c                     | j                   r2| j                  %t        j                  | j                        | _        y y | j                  %t        j                  | j
                        | _        y y r^   )rq   rr   bz2BZ2Compressorr*   r&   rI   s    r    start_compress_messagez&PerMessageBzip2.start_compress_message  s_    >>'#&#4#4T5S5S#T  ( '#&#4#4T5S5S#T  (r   c                 8    | j                   j                  |      S r^   )rr   compressr=   datas     r    compress_message_dataz%PerMessageBzip2.compress_message_data  s    ((..r   c                 H    | j                   j                         }d | _         |S r^   )rr   flushr~   s     r    end_compress_messagez$PerMessageBzip2.end_compress_message  s%    %%'  r   c                 P    | j                   t        j                         | _         y y r^   )rs   ry   BZ2DecompressorrI   s    r    start_decompress_messagez(PerMessageBzip2.start_decompress_message  s$    %!$!4!4!6D &r   c                 8    | j                   j                  |      S r^   )rs   
decompressr~   s     r    decompress_message_dataz'PerMessageBzip2.decompress_message_data  s    !!,,T22r   c                     d | _         y r^   )rs   rI   s    r    end_decompress_messagez&PerMessageBzip2.end_decompress_message  s
    !r   N)r   r   r   r   rt   rP   rm   ro   r>   rJ   rO   r{   r   r   r   r   r   r   r   r    r   r   z  sf        	FMCU/73"r   r   )ry    autobahn.websocket.compress_baser   r   r   r   r   __all__objectr   r	   r
   r   r   r   r   r   r    <module>r      s   6  6  ik24H ikXKy!>@T Ky\Ml8:N Ml`0E$DFZ 0EfD"(*> D"r   