
    af                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZmZ d dl	m
Z
mZmZ d dlmZ d dlmZmZmZ d dlmZ d dlmZ g dZi Zi Z G d	 d
e          Zde j        v Zer	 d dlZdZn# e$ r	 d dl Z dZY nw xY wd dl Z er e!d           ej"        Z#ej$        Z%eZ&nPd dl'Z' G d de j(                  Z)d dl m*Z* d dl+m,Z,  ej-        d          Z. G d de j/                  Z0d3dZ#d4dZ%e Z& G d de          Z1 ej2        e1           e1ee1j3        <    G d de          Z4 ej2        e4           e4ee4j5        <   dZ6 ej7                    dk    pde j        v Z8e8s	 d dl9Z9dZ6d Z:d Z;e9Z<n.# e$ r Y n'w xY w	 d dl=Z=dZ6e=j>        Z:e=j?        Z;e=Z<n# e$ r Y nw xY we6rz G d  d!e          Z@ ej2        e@           eA                    d!           e@ee@j3        <    G d" d#e          ZB ej2        eB           eBeeBj5        <   eA                    d#           dZC	 d dlDZDdZCeDj"        ZEeDj$        ZFeDZGn# e$ r Y nw xY weCrz G d$ d%e          ZH ej2        eH           eHeeHj3        <   eA                    d%            G d& d'e          ZI ej2        eI           eIeeIj5        <   eA                    d'           	 d dlJZJ G d( d)e          ZK ej2        eK           eKeeKj3        <   eA                    d)            G d* d+e          ZL ej2        eL           eLeeLj5        <   eA                    d+           n# e$ r Y nw xY wdZM	 d dlNZNd d,lmOZO dZMn# e$ r Y nw xY weMrz G d- d.e          ZP ej2        eP           eA                    d.           ePeePj3        <    G d/ d0e          ZQ ej2        eQ           eQeeQj5        <   eA                    d0           d1 ZRd2 ZSdS )5    N)b2a_hexa2b_hex)OptionalListTuple)time_ns)IObjectSerializerISerializerIMessage)ProtocolError)message)
SerializerJsonObjectSerializerJsonSerializerc                      e Zd ZdZdZ	 i ej        j        ej        ej        j        ej        ej	        j        ej	        ej
        j        ej
        ej        j        ej        ej        j        ej        ej        j        ej        ej        j        ej        ej        j        ej        ej        j        ej        ej        j        ej        ej        j        ej        ej        j        ej        ej        j        ej        ej        j        ej        ej        j        ej        ej        j        ej        ej        j        ej        ej        j        ej        ej        j        ej        ej        j        ej        ej        j        ej        ej        j        ej        ej        j        ej        ej        j        ej        iZ 	 d Z!d Z"d Z#d Z$d Z%dd	Z&ddZ'de(de)e*e+f         fdZ,dde*de-e+         de.e(         fdZ/dS )r   z
    Base class for WAMP serializers. A WAMP serializer is the core glue between
    parsed WAMP message objects and the bytes on wire (the transport).
    i   c                     || _         t                      | _        d| _        d| _        d| _        d| _        d| _        d| _        d| _	        d| _
        d| _        d| _        dS )z

        :param serializer: The object serializer to use for WAMP wire-level serialization.
        :type serializer: An object that implements :class:`autobahn.interfaces.IObjectSerializer`.
        r   N)_serializerr   _stats_reset_stats_cycle_serialized_bytes_serialized_messages_serialized_rated_messages_unserialized_bytes_unserialized_messages_unserialized_rated_messages_autoreset_rated_messages_autoreset_duration_autoreset_callback)self
serializers     J/var/www/html/env/lib/python3.11/site-packages/autobahn/wamp/serializer.py__init__zSerializer.__init___   sn     &#II!"$%!*+'#$ &'#,-))-&#' #'       c                     | j         S )z
        Get serializer statistics: timestamp when statistics were last reset.

        :return: Last reset time of statistics (UTC, ns since Unix epoch)
        :rtype: int
        )r   r   s    r!   stats_resetzSerializer.stats_resetv   s       r#   c                      | j         | j        z   S )z
        Get serializer statistics: bytes (serialized + unserialized).

        :return: Number of bytes.
        :rtype: int
        )r   r   r%   s    r!   stats_byteszSerializer.stats_bytes   s     %(@@@r#   c                      | j         | j        z   S )z
        Get serializer statistics: messages (serialized + unserialized).

        :return: Number of messages.
        :rtype: int
        )r   r   r%   s    r!   stats_messageszSerializer.stats_messages   s     (4+FFFr#   c                      | j         | j        z   S )z
        Get serializer statistics: rated messages (serialized + unserialized).

        :return: Number of rated messages.
        :rtype: int
        )r   r   r%   s    r!   stats_rated_messageszSerializer.stats_rated_messages   s     .1RRRr#   Fc                 >   |t          |          t          k    sJ |t          |          t          k    sJ |s|sJ t          |          sJ || _        || _        || _        | j        r/|r/|                     d          }|                     |           |S dS dS )a  
        Configure a user callback invoked when accumulated stats hit specified threshold.
        When the specified number of rated messages have been processed or the specified duration
        has passed, statistics are automatically reset, and the last statistics is provided to
        the user callback.

        :param rated_messages: Number of rated messages that should trigger an auto-reset.
        :type rated_messages: int

        :param duration: Duration in ns that when passed will trigger an auto-reset.
        :type duration: int

        :param callback: User callback to be invoked when statistics are auto-reset. The function
            will be invoked with a single positional argument: the accumulated statistics before the reset.
        :type callback: callable
        NTreset)typeintcallabler   r   r   stats)r   rated_messagesdurationcallback	reset_nowr3   s         r!   set_stats_autoresetzSerializer.set_stats_autoreset   s    " %n)=)=)D)D)DD4>>S#8#8#88***)!!""!)7&#+ #+  # 		 	JJTJ**E$$U+++L	 	 	 	r#   Tc           	      ^   t          |          t          k    sJ t          |          t          k    sJ | xj        dz  c_        |rS| j        | j        | j        t                      | j        z
  | j        | j        | j        d| j	        | j
        | j        dd}nT| j        | j        | j        t                      | j        z
  | j        | j	        z   | j        | j
        z   | j        | j        z   d}|r=d| _        d| _        d| _        d| _	        d| _
        d| _        t                      | _        |S )aw  
        Get (and reset) serializer statistics.

        :param reset: If ``True``, reset the serializer statistics.
        :type reset: bool

        :param details: If ``True``, return detailed statistics split up by serialization/unserialization.
        :type details: bool

        :return: Serializer statistics, eg:

            .. code-block:: json

                {
                    "timestamp": 1574156576688704693,
                    "duration": 34000000000,
                    "bytes": 0,
                    "messages": 0,
                    "rated_messages": 0
                }

        :rtype: dict
           )bytesmessagesr4   )cycler    	timestampr5   
serializedunserialized)r=   r    r>   r5   r;   r<   r4   r   )r0   boolr   SERIALIZER_IDr   r   r   r   r   r   r   r   )r   r/   detailsdatas       r!   r3   zSerializer.stats   s[   0 E{{d""""G}}$$$$Q 	*"0!.#II(99!3 $ 9&*&E  "5 $ ;&*&G! ! DD$ *"0!.#II(99/$2JJ 58SS"&"ADDe"e D  	*%&D"()D%./D+'(D$*+D'01D- '		Dr#   msgreturnc                 J   |                     | j                  | j        j        }}| xj        t	          |          z  c_        | xj        dz  c_        | xj        t          t          j	        t          t	          |                    | j        z                      z  c_        | j        ru| j        rt                      | j        z
  | j        k    s$| j        rH|                                 | j        k    r+|                     d          }|                     |           ||fS )zS
        Implements :func:`autobahn.wamp.interfaces.ISerializer.serialize`
        r:   Tr.   )	serializer   BINARYr   lenr   r   r1   mathceilfloatRATED_MESSAGE_SIZEr   r   r   r   r   r,   r3   )r   rE   rD   	is_binaryr3   s        r!   rH   zSerializer.serialize   sQ    --(8994;K;Ri 	#d))+!!Q&!!''3tys4yy9I9IDLc9c/d/d+e+ee'' # 	,$*B 	,		TXTeHejn  kC  HC  HC  IM  Ig  HC  lp  lE  lE  lG  lG  KO  Ki  li  liJJTJ**E$$U+++Yr#   NpayloadisBinaryc                    |=|| j         j        k    r-t          d                    || j         j                            	 | j                             |          }nG# t
          $ r:}t          d                    t          |          j        |                    d}~ww xY w| j         j        dk    r|}n)g }|D ]#}t          |          t          k    r/t          d                    t          |                              t          |          dk    rt          d          |d         }t          |          t          k    r/t          d                    t          |                              | j                            |          }|"t          d	                    |                    |                    |          }	|                    |	           %| xj        t          |          z  c_        | xj        t          |          z  c_        | xj        t          t'          j        t+          t          |                    | j        z                      z  c_        | j        ru| j        rt3                      | j        z
  | j        k    s$| j        rH|                                 | j        k    r+|                     d
          }
|                     |
           |S )zU
        Implements :func:`autobahn.wamp.interfaces.ISerializer.unserialize`
        NzDinvalid serialization of WAMP message (binary {0}, but expected {1})z.invalid serialization of WAMP message: {0} {1}flatbuffersz!invalid type {0} for WAMP messager   z$missing message type in WAMP messagez&invalid type {0} for WAMP message typezinvalid WAMP message type {0}Tr.   )r   rI   r   formatunserialize	Exceptionr0   __name__NAMElistrJ   r1   MESSAGE_TYPE_MAPgetparseappendr   r   r   rK   rL   rM   rN   r   r   r   r   r   r,   r3   )r   rP   rQ   raw_msgsemsgsraw_msgmessage_typeKlassrE   r3   s              r!   rU   zSerializer.unserialize  s    4+222#Zaabjbfbrby{ {| | |	n'33G<<HH 	n 	n 	n P W WX\]^X_X_Xhjk l lmmm	n  M11DDD# ! !==D(('(K(R(RSWX_S`S`(a(abbbw<<1$$'(NOOO&qz%%,,'(P(W(WX\]iXjXj(k(klll-11,??='(G(N(N|(\(\]]] kk'**C     	  CLL0  ##s4yy0##))S5W;N;NQUQh;h1i1i-j-jj)) # 	,$*B 	,		TXTeHejn  kC  HC  HC  IM  Ig  HC  lp  lE  lE  lG  lG  KO  Ki  li  liJJTJ**E$$U+++s   A 
B &5BB F)TF)N)0rW   
__module____qualname____doc__rN   r   HelloMESSAGE_TYPEWelcomeAbort	ChallengeAuthenticateGoodbyeErrorPublish	Published	Subscribe
SubscribedUnsubscribeUnsubscribedEventEventReceivedCallCancelResultRegister
Registered
UnregisterUnregistered
Invocation	InterruptYieldrZ   r"   r&   r(   r*   r,   r8   r3   r   r   r;   rA   rH   r   r   rU    r#   r!   r   r   4   s        
 
"GM$go 	"GM 	&(9	
 	)7+? 	$go 	"GM 	$go 	&(9 	&(9 	'); 	('*= 	)7+? 	"GM 	*G,A  	!7<!" 	#W^#$ 	#W^%w'7');');)7+?');&(9"GM3 6( ( (.! ! !A A AG G GS S S   @@ @ @ @DX %t*<    $3 35 3HTN 3dS[n 3 3 3 3 3 3r#   r   AUTOBAHN_USE_UJSONTFzWARNING: Autobahn is using ujson accelerated JSON module - will run faster,
but only on CPython and will loose ability to transport binary payload transparently!c                       e Zd Zd Zd ZdS )_WAMPJsonEncoderc                 r    d|v r|d         | _         |d= nd| _         t          j        j        | g|R i | d S )Nuse_binary_hex_encodingF)_use_binary_hex_encodingjsonJSONEncoderr"   )r   argskwargss      r!   r"   z_WAMPJsonEncoder.__init__]  sY    (F22067P0Q-45505-%d<T<<<V<<<<<r#   c                 j   t          |t                    rV| j        r%dt          |                              d          z   S dt          j        |                              d          z   S t          |t          j                  rt          |          S t          j                            | |          S )N0xascii )
isinstancer;   r   r   decodebase64	b64encodedecimalDecimalstrr   r   defaultr   objs     r!   r   z_WAMPJsonEncoder.defaulte  s    #u%% ;0 J'#,,"5"5g">">>>!F$4S$9$9$@$@$I$IIIC11 ;3xx'//c:::r#   N)rW   re   rf   r"   r   r   r#   r!   r   r   [  s2        	= 	= 	=		; 		; 		; 		; 		;r#   r   )scanner)
scanstringz^[\+\-E\.0-9]+$c                       e Zd Zd ZdS )_WAMPJsonDecoderc                 Z    d|v r|d          _         |d= nd _         d|v r|d          _        |d= nd _        d|v r'|d          _        |d=  j        rt          j        |d<   nd _        t          j        j         g|R i |  fd}| _        t          j
                    _        d S )Nr   Fuse_decimal_from_struse_decimal_from_floatparse_floatc                     t          | i |\  }}j        r,|r)|dd         dk    rt          |dd                    }||fS n.|r,|d         dk    r t          j        |dd                    }||fS j        rHt                              |          r.	 t          j	        |          }||fS # t          j
        $ r Y nw xY w||fS )Nr      r   r   r:   )r   r   r   r   	b64decode_use_decimal_from_str
_DEC_MATCHmatchr   r   InvalidOperation)r   r   sidxr   s       r!   _parse_stringz0_WAMPJsonDecoder.__init__.<locals>._parse_string  s    #T4V4430 & &QqsVt^^#AabbENN #v &QqTV^^",QqrrU33 #v- *2B2B12E2E #OA.. #v"3   #vs   B, ,B>=B>)r   r   _use_decimal_from_floatr   r   r   JSONDecoderr"   parse_stringr   py_make_scanner	scan_once)r   r   r   r   s   `   r!   r"   z_WAMPJsonDecoder.__init__{  s    (F22067P0Q-45505-%//-34J-K*122-2*'611/56N/O,34/ <,3OF=)-2*%d<T<<<V<<<    $ !.D %4T::DNNNr#   N)rW   re   rf   r"   r   r#   r!   r   r   y  s#        ,	; ,	; ,	; ,	; ,	;r#   r   c                 >    t          j        | |||t                    S )N)r   r   r   cls)r   loadsr   )r   r   r   r   s       r!   _loadsr     s)    z!2I/C1G.	0 0 0 	0r#   c                 @    t          j        | ddd|t                    S )N),:F)
separatorsensure_ascii	sort_keysr   r   )r   dumpsr   )r   r   s     r!   _dumpsr     s,    z#%/',$)2I.0 0 0 	0r#   c                   0    e Zd ZeZ	 dZdZddZd Zd Z	dS )r   r   Fc                 >    || _         || _        || _        || _        dS )a  

        :param batched: Flag that controls whether serializer operates in batched mode.
        :type batched: bool

        :param use_binary_hex_encoding: Flag to enable HEX encoding prefixed with ``"0x"``,
            otherwise prefix binaries with a `` `` byte.
        :type use_binary_hex_encoding: bool

        :param use_decimal_from_str: Flag to automatically encode Decimals as strings, and
            to try to parse strings as Decimals.
        :type use_decimal_from_str: bool
        N)_batchedr   r   r   )r   batchedr   r   r   s        r!   r"   zJsonObjectSerializer.__init__  s)      (?%%9"'=$$$r#   c                     t          || j                  }t          |t                    r|                    d          }| j        r|dz   S |S )zY
        Implements :func:`autobahn.wamp.interfaces.IObjectSerializer.serialize`
        )r   utf8   )r   r   r   r   encoder   )r   r   r   s      r!   rH   zJsonObjectSerializer.serialize  sU     30MNNNa 	!  A= 	v:Hr#   c                       j         r|                    d          dd         }n|g}t          |          dk    rt          d           fd|D             S )z[
        Implements :func:`autobahn.wamp.interfaces.IObjectSerializer.unserialize`
        r   Nr   zbatch format errorc                 z    g | ]7}t          |                    d           j        j        j                  8S )r   )r   r   r   )r   r   r   r   r   ).0rD   r   s     r!   
<listcomp>z4JsonObjectSerializer.unserialize.<locals>.<listcomp>  se     ` ` ` QU t{{6**/3/L,0,F.2.JL L L ` ` `r#   )r   splitrJ   rV   )r   rP   chunkss   `  r!   rU   z JsonObjectSerializer.unserialize  s     = 	]]6**3B3/FFYFv;;!0111` ` ` ` Y_` ` ` 	`r#   N)FFFF)
rW   re   rf   _jsonJSON_MODULErX   rI   r"   rH   rU   r   r#   r!   r   r     sa        K DF> > > >&
 
 
` ` ` ` `r#   r   c                   (    e Zd ZdZ	 dZ	 dZ	 ddZdS )r   r   r:   zapplication/jsonFc                 r    t                               | t          |||                     |r	d| _        dS dS )z
        Ctor.

        :param batched: Flag to control whether to put this serialized into batched mode.
        :type batched: bool
        )r   r   r   zjson.batchedN)r   r"   r   rB   )r   r   r   r   s       r!   r"   zJsonSerializer.__init__  s`     	D"6wOfL`#b #b #b 	c 	c 	c  	0!/D	0 	0r#   NFFFrW   re   rf   rB   RAWSOCKET_SERIALIZER_ID	MIME_TYPEr"   r   r#   r!   r   r     sK        M
  
 #I
0 0 0 0 0 0r#   r   PyPyAUTOBAHN_USE_UMSGPACKc                 .    t          j        | d          S )NT)use_bin_type)msgpackpackb)r   s    r!   <lambda>r   0  s    W]3TBBB r#   c                 .    t          j        | d          S )NF)raw)r   unpackb)rD   s    r!   r   r   1  s    % @ @ @ r#   c                   0    e Zd ZdZeZdZ	 ddZd Zd Z	dS )	MsgPackObjectSerializerr   TFc                     || _         dS 

            :param batched: Flag that controls whether serializer operates in batched mode.
            :type batched: bool
            Nr   r   r   s     r!   r"   z MsgPackObjectSerializer.__init__Q       $DMMMr#   c                 |    t          |          }| j        r%t          j        dt	          |                    |z   S |S a
            Implements :func:`autobahn.wamp.interfaces.IObjectSerializer.serialize`
            !L)_packbr   structpackrJ   r   r   rD   s      r!   rH   z!MsgPackObjectSerializer.serializeY  s;     #;;D} {4T33d::r#   c                    | j         rg }t          |          }d}||k     r|dz   |k    rt          d          t          j        d|||dz                      d         }|dz   |z   |k    rt          d          ||dz   |dz   |z            }|                    t          |                     |dz   |z   }||k     ||k    rt          d          |S t          |          }|gS c
            Implements :func:`autobahn.wamp.interfaces.IObjectSerializer.unserialize`
            r      zbatch format error [1]r   zbatch format error [2]zbatch format error [3])r   rJ   rV   r   unpackr]   _unpackbr   rP   r`   NilrD   unpackeds           r!   rU   z#MsgPackObjectSerializer.unserializec  s   
 } "LL!ee1uqyy'(@AAAdGAa!eG,<==a@A 1uqy1}}'(@AAA"1q5Q?3D KK/// A	A !ee" 66#$<=== $G,, z!r#   Nrd   )
rW   re   rf   rX   _msgpackMSGPACK_MODULErI   r"   rH   rU   r   r#   r!   r   r   F  sZ        !		$ 	$ 	$ 	$	 	 	 	"  	"  	"  	"  	"r#   r   c                   (    e Zd ZdZ	 dZ	 dZ	 ddZdS )MsgPackSerializerr   r   zapplication/x-msgpackFc                 n    t                               | t          |                     |r	d| _        dS dS )
            Ctor.

            :param batched: Flag to control whether to put this serialized into batched mode.
            :type batched: bool
            r   zmsgpack.batchedN)r   r"   r   rB   r   s     r!   r"   zMsgPackSerializer.__init__  sF     &=g&N&N&NOOO 7%6"""7 7r#   Nrd   r   r   r#   r!   r   r     sK        !	
 #$	
 ,		
		7 		7 		7 		7 		7 		7r#   r   c                   4    e Zd ZdZdZeZdZ	 d	dZd Z	d Z
dS )
CBORObjectSerializeraJ  
        CBOR serializer based on `cbor2 <https://github.com/agronholm/cbor2>`_.

        This CBOR serializer has proper support for arbitrary precision decimals,
        via tagged decimal fraction encoding, as described in
        `RFC7049 section 2.4.3 <https://datatracker.ietf.org/doc/html/rfc7049#section-2.4.3>`_.
        cborTFc                     || _         dS r   r   r   s     r!   r"   zCBORObjectSerializer.__init__  r   r#   c                 |    t          |          }| j        r%t          j        dt	          |                    |z   S |S r   )_cbor_dumpsr   r   r   rJ   r   s      r!   rH   zCBORObjectSerializer.serialize  s=     s##D} {4T33d::r#   c                    | j         rg }t          |          }d}||k     r|dz   |k    rt          d          t          j        d|||dz                      d         }|dz   |z   |k    rt          d          ||dz   |dz   |z            }|                    t          |                     |dz   |z   }||k     ||k    rt          d          |S t          |          }|gS r   )r   rJ   rV   r   r   r]   _cbor_loadsr   s           r!   rU   z CBORObjectSerializer.unserialize  s   
 } "LL!ee1uqyy'(@AAAdGAa!eG,<==a@A 1uqy1}}'(@AAA"1q5Q?3D KKD 1 1222 A	A !ee" 66#$<=== 'w// z!r#   Nrd   )rW   re   rf   rg   rX   _cborCBOR_MODULErI   r"   rH   rU   r   r#   r!   r  r    sf        	 	 		$ 	$ 	$ 	$	 	 	 	"  	"  	"  	"  	"r#   r  c                   (    e Zd ZdZ	 dZ	 dZ	 ddZdS )CBORSerializerr     zapplication/cborFc                 n    t                               | t          |                     |r	d| _        dS dS )r   r   zcbor.batchedN)r   r"   r  rB   r   s     r!   r"   zCBORSerializer.__init__  sF     &:7&K&K&KLLL 4%3"""4 4r#   Nrd   r   r   r#   r!   r  r  
  sK        	
 #$	
 '		
		4 		4 		4 		4 		4 		4r#   r  c                   0    e Zd ZdZeZdZ	 ddZd Zd Z	dS )	UBJSONObjectSerializerubjsonTFc                     || _         dS r   r   r   s     r!   r"   zUBJSONObjectSerializer.__init__D  r   r#   c                     t          j        |          }| j        r%t          j        dt          |                    |z   S |S r   )r  dumpbr   r   r   rJ   r   s      r!   rH   z UBJSONObjectSerializer.serializeL  s?     <$$D} {4T33d::r#   c                    | j         rg }t          |          }d}||k     r|dz   |k    rt          d          t          j        d|||dz                      d         }|dz   |z   |k    rt          d          ||dz   |dz   |z            }|                    t          j        |                     |dz   |z   }||k     ||k    rt          d          |S t          j        |          }|gS r   )r   rJ   rV   r   r   r]   r  loadbr   s           r!   rU   z"UBJSONObjectSerializer.unserializeV  s   
 } "LL!ee1uqyy'(@AAAdGAa!eG,<==a@A 1uqy1}}'(@AAA"1q5Q?3D KKT 2 2333 A	A !ee" 66#$<=== "<00 z!r#   Nrd   )
rW   re   rf   rX   r  UBJSON_MODULErI   r"   rH   rU   r   r#   r!   r  r  9  sZ        		$ 	$ 	$ 	$	 	 	 	"  	"  	"  	"  	"r#   r  c                   (    e Zd ZdZ	 dZ	 dZ	 ddZdS )UBJSONSerializerr  r   zapplication/ubjsonFc                 n    t                               | t          |                     |r	d| _        dS dS )r   r   zubjson.batchedN)r   r"   r  rB   r   s     r!   r"   zUBJSONSerializer.__init__  sF     &<W&M&M&MNNN 6%5"""6 6r#   Nrd   r   r   r#   r!   r  r  }  sK         	
 #$	
 )		
		6 		6 		6 		6 		6 		6r#   r  )message_fbsc                       e Zd ZdZeZdZ	 ej        j	        ej
        ej
        fej        j        ej        ej        fiZddZd Zd ZdS )	FlatBuffersObjectSerializerrS   TFc                 ,    |r
J d            || _         dS )r   zJWAMP-FlatBuffers serialization does not support message batching currentlyNr   r   s     r!   r"   z$FlatBuffersObjectSerializer.__init__  s#     ll lll;#DMMMr#   c                     t                      )r   )NotImplementedErrorr   s     r!   rH   z%FlatBuffersObjectSerializer.serialize  s     &'''r#   c                    t           j        j                            |d          }|                                }|| j        v r]| j        |         \  }} |            }|                                }|                    |j        |j                    ||          }|gS t          d
                    |                    )r   r   )from_fbsz8message type {} not yet implemented for WAMP-FlatBuffers)r  MessageGetRootAsMessageMsgTyperZ   MsgInitBytesPosr   rT   )	r   rP   	union_msgmsg_type	fbs_klass
wamp_klassfbs_msg_tabrE   s	            r!   rU   z'FlatBuffersObjectSerializer.unserialize  s     $+3DDWaPPI ((**H4000(,(=h(G%	:#)++ }}TZ222 j'222u)*d*k*klt*u*uvvvr#   Nrd   )rW   re   rf   rX   rS   FLATBUFFERS_MODULErI   r  MessageTypeEVENTrv   r   PUBLISHrp   rZ   r"   rH   rU   r   r#   r!   r  r    s        (	
 #)K,=w}+M#+k.A7?-S

	$ 	$ 	$ 	$	( 	( 	(	w 	w 	w 	w 	wr#   r  c                   (    e Zd ZdZ	 dZ	 dZ	 ddZdS )FlatBuffersSerializerrS      zapplication/x-flatbuffersFc                 n    t                               | t          |                     |r	d| _        dS dS )z

            :param batched: Flag to control whether to put this serialized into batched mode.
            :type batched: bool
            r   zflatbuffers.batchedN)r   r"   r  rB   r   s     r!   r"   zFlatBuffersSerializer.__init__  sF     &A'&R&R&RSSS ;%:"""; ;r#   Nrd   r   r   r#   r!   r5  r5    sK        %	
 #$	
 0		
	; 	; 	; 	; 	; 	;r#   r5  c           	      V   d}d| v r>|                      d          }|d         } t          |          dk    r|d         dk    rd}| t          v rt          |          |          S t          d                    | t          t                                                                        )	NF.r   r:   r   Tr   z4could not create serializer for "{}" (available: {}))r   rJ   SERID_TO_SERRuntimeErrorrT   sortedkeys)serializer_idr   r   s      r!   create_transport_serializerr?    s    G
m$$!q66A::!A$)++G$$M*7;;;;QXXYfhno{  pA  pA  pC  pC  iD  iD  E  E  F  F  	Fr#   c                 b    g }| j         D ]$}|                    t          |                     %|S )zK
    Create a list of serializers to use with a WAMP protocol factory.
    )serializersr]   r?  )	transportrA  r>  s      r!   create_transport_serializersrC    sC     K". G G6}EEFFFFr#   r   rd   )Tosrer   platformrK   r   binasciir   r   typingr   r   r   txaior   autobahn.wamp.interfacesr	   r
   r   autobahn.wamp.exceptionr   autobahn.wampr   __all__SERID_TO_OBJSERr:  objectr   environ
_USE_UJSONujsonImportErrorr   printr   r   r   r   r   r   r   r   r   json.decoderr   compiler   r   r   r   registerrX   r   rB   _HAS_MSGPACKpython_implementation_USE_UMSGPACKr   r   r   r   umsgpackr   r   r   r]   r   	_HAS_CBORcbor2r  r  r	  r  r  r  r  r  _HAS_FLATBUFFERSrS   r  r  r5  r?  rC  r   r#   r!   <module>r_     sF  6 
			 				     % % % % % % % % ( ( ( ( ( ( ( ( ( (       M M M M M M M M M M 1 1 1 1 1 1 ! ! ! ! ! !  
 M M M M M M M Mb "RZ/
 

   


 KKK  k	E  o  p  p  p[F[FEE MMM; ; ; ; ;4+ ; ; ;2 ''''''.//J.; .; .; .; .;4+ .; .; .;h0 0 0 00 0 0 0 E7` 7` 7` 7` 7`6 7` 7` 7`t   / 0 0 0-A$) *0 0 0 0 0Z 0 0 0D  ^ $ $ $-;^) * ..00F:c>UY[Yc>c  	 BB@@     	 #      h(=" =" =" =" ="& =" =" ="~ 6777NN,---4KO+017 7 7 7 7J 7 7 7> K*+++4EL"01NN&''' 	LLL I+K+KEE  	 	 	D	  o%D" D" D" D" D"v D" D" D"L 34441EO(-.NN)***4 4 4 4 4 4 4 4> K(((1?L-.NN#$$$m'MMM=" =" =" =" =" =" =" ="~ 56663IO*/0NN+,,,6 6 6 6 6: 6 6 6> K)***3CL!/0NN%&&&&W  	 	 	D	\  ))))))   	 	 	D	  X,.w .w .w .w .wf .w .w .w` :;;;NN01118SO/45; ; ; ; ;
 ; ; ;< K.///8ML&45NN*+++F F F    sl   )A0 0A>=A>$E3 3E;:E;?F FF H7 7H?>H??L> >MM
M M! M!