
    %izN                         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)PerMessageCompressPerMessageCompressOfferPerMessageCompressOfferAcceptPerMessageCompressResponse PerMessageCompressResponseAccept)PerMessageBzip2PerMessageBzip2MixinPerMessageBzip2OfferPerMessageBzip2OfferAcceptPerMessageBzip2ResponsePerMessageBzip2ResponseAcceptc                       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/html/navyabakers_fullstack/navyabakers_prod/venv/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.parseE   s?    %*!%&"  '	A6!9~!#,,. 
 )A,C//d?#3#5#57 
 15-11c(C 2TTT#3#5#57 
 25.  #,,. I'	R -/IJ)#3#5#57 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__   s|     )*d2?012 
 *C& '!+*$2X2XX-t/U/UW 
 +E'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   sQ     ))))88K**a/043R3RR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)     ,,)-)G)G*.*I*I
 	
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__   s      --t/N/NP	
r   N)Tr   )
r   r   r   r   classmethodr7   r>   rE   rJ   rO   r   r   r    r
   r
   ?   s1    
 8 8tE8 


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
 '!+*$2X2XX-t/U/UW 
 &*53R3Ra,- 
 +E'%T%K%KK%t'M'MO  00A5"U%E%EE`$% 
 -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   sm     ))::00A504::3X3XXK **a/043R3RR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     ,,ZZ((**.*I*I"11	
 	
r   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__  s0     

##%//##		
r   )r   N)r   r   r   r   r>   rE   rJ   rO   r   r   r    r   r      s    
1-f$

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.parse5  s{    %&!$%! -	A6!9~!#,,. 
 )A,C//c(C 2TTT#3#5#57 
 14-11c(C 2TTT#3#5#57 
 14-  #,,. U-	^ 02KLI#3#5#57 #3#5#57 s   C1
D1!D!D6c                      || _         || _        y Nr&   r*   )r=   r&   r*   s      r    r>   z PerMessageBzip2Response.__init__u  s    )B&)B&r   c                 J    | j                   | j                  | j                  dS )rG   )rH   r&   r*   )r   r&   r*   rI   s    r    rJ   z PerMessageBzip2Response.__json__y  s)     ,,)-)G)G)-)G)G
 	
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__  s      --t/M/MO	
r   N)	r   r   r   r   rP   r7   r>   rJ   rO   r   r   r    r   r   0  s,     = =~C


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__  s     ($;<:T(^KLL %T%K%KK%t'M'MO  22a7"X%G%GG`$% 
 -r   c                 f    | j                   | j                  j                         | j                  dS )rG   )rH   r\   rU   )r   r\   rJ   rU   rI   s    r    rJ   z&PerMessageBzip2ResponseAccept.__json__  s0     ,,..0"11
 	
r   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__  s'     MM""$
 	
r   r^   )r   r   r   r   r>   rJ   rO   r   r   r    r   r     s    
->


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    OO55 ((4 %%	
  __>>
 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  sE     ((4 %%\\<<--
 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__  sc    "! )A- &,, 	& )A- & 	& ,, 	&r   c                 `    | j                   | j                  | j                  | j                  dS )N)rH   isServerr*   r&   )r   rq   r*   r&   rI   s    r    rJ   zPerMessageBzip2.__json__  s.    ,,)-)G)G)-)G)G	
 	
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__  s'     ....		
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_message2  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     sc     
 
 
 

 

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  D
24H D
Ng
!>@T g
T`
8:N `
F>
$&:>
B_"(*> _"r   