
    h|Z                         d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlmZ d dlmZ d Z	d Z
ddZ G d	 d
ej                        Z G d dej                        Z G d dej                        Zy)    N)Decimal)message)role)
serializerc                  \   t        j                  d      } d}d}d}dddd| |d	d| |d
g}d	d| ||d}g t        j                  ddt	        j
                         i      t        j                  ddt	        j                         i      t        j                  ddt	        j                         i      t        j                  ddt	        j                         i      t        j                  dt	        j
                         t	        j                         t	        j                         t	        j                         d      t        j                         t        j                  d      t        j                  d|      t        j                  dg |      t        j                  d||      t        j                  dd      t        j                  d      t        j                  dt        j                  j                        t        j                  dd      t        j                  dd|      t        j                  ddg |      t        j                  dd||      t        j                  ddd      t        j                  d      t        j                  d|      t        j                  dg |      t        j                  d||      t        j                  dd      t        j                  d      t        j                  dt        j                  j                        t        j                   d|      t        j                   d||      t        j                   d|g |      t        j                   d|||      t        j                   d|d      t        j                   d|      t        j                   d||      t        j                   d|g |      t        j                   d|||      t        j                   d|d      t        j"                  d      t        j$                  dd      t        j&                  dd      t        j(                  d|      t        j(                  d|d      t        j(                  d|d      t        j(                  d|      t        j(                  d|d      t        j(                  d|d      t        j*                  dd      t        j*                  dd|      t        j*                  ddg |      t        j*                  dd||      t        j*                  ddd       t        j,                  dd      t        j.                  d|      t        j.                  d||      t        j.                  d|g |      t        j.                  d|||      t        j.                  d|d!dgg d"#      t        j.                  d|      t        j.                  d||      t        j.                  d|g |      t        j.                  d|||      t        j.                  d|d!dgg d"#      t        j0                  d      t        j2                  dd      t        j4                  dd      t        j6                  d|      t        j6                  d|t        j6                  j8                        t        j6                  d|      t        j6                  d|t        j6                  j8                        t        j:                  t        j                   j<                  d|      t        j:                  t        j                   j<                  d||      t        j:                  t        j                   j<                  d|g |      t        j:                  t        j                   j<                  d|||      t        j:                  t        j                   j<                  d|      t        j:                  t        j                   j<                  d||      t        j:                  t        j                   j<                  d|g |      t        j:                  t        j                   j<                  d|||      t        j                  d      t        j                  d|      t        j                  d||      }|D cg c]  }d!|f c}S c c}w )$z
    List of WAMP test message used for serializers. Expand this if you add more
    options or messages.

    This list of WAMP message does not contain any binary app payloads!
        u   こんにちは世界zcom.myapp.foobaru   com.myapp.你好世界.baz         hello   )foobarbazmoo)r   r   r   r   arrrealm1
subscriber	publishercallercallee)r   r   r   r   @ argsr   kwargsT)progress)mode
 i'  )timeoutprefix)match
roundrobin)invoke,  )r   F)d      r%   )
exclude_meexcludeeligible)osurandomr   Hellor   RoleSubscriberFeaturesRolePublisherFeaturesRoleCallerFeaturesRoleCalleeFeaturesGoodbyeYield	InterruptKILL
InvocationResultCancelCallUnregistered
Unregister
RegisteredRegisterEvent	PublishedPublishUnsubscribedUnsubscribe
Subscribed	SubscribeMATCH_PREFIXErrorMESSAGE_TYPE)
some_bytessome_unicodesome_urisome_unicode_uri	some_argssome_kwargsmsgsmsgs           c/var/www/Befach/backend/env/lib/python3.12/site-packages/autobahn/wamp/test/test_wamp_serializer.pygenerate_test_messagesrQ   &   sF	    BJ?L!H?Aq':|RPW`js  >A  BIWZ]fgKTht/J/J/L MNThd.H.H.J KLT 	h4+B+B+D EFT 	h4+B+B+D EF	T
 	h557335--/--/	!
 	T 	T 	fT 	f9-T 	f2k:T 	f9[AT  	ft,!T" 	&!#T$ 	&w'8'8'='=>%T& 	66*'T( 	66	:)T* 	66;G+T, 	66	+N-T. 	6659/T0 	v1T2 	vI.3T4 	vB{;5T6 	vIkB7T8 	v-9T: 	v;T< 	vGNN$7$78=T> 	VX&?T@ 	VXI6ATB 	VXB{CCTD 	VXIkJETF 	VXu5GTH 	V-.ITJ 	V-I>KTL 	V-B{KMTN 	V-IkROTP 	V-u=QTR 	V$STT 	66*UTV 	66*WTX 	*YTZ 	:[T\ 	,?]T^ 	!12_T` 	!1BaTb 	!1,GcTd 	ff%eTf 	ff95gTh 	ff2kBiTj 	ff9[IkTl 	ff4mTn 	&&)oTp 	)qTr 	y9sTt 	r+FuTv 	yMwTx 	USETcdyTz 	 01{T| 	 0yA}T~ 	 0r+NT@ 	 0yUATB 	 0USE\klCTD 	V$ETF 	FF+GTH 	66*ITJ 	&(+KTL 	&('2C2C2P2PQMTN 	&"23OTP 	&"2':K:K:X:XYQTR 	gll//BSTT 	gll//	RUTV 	gll//S^_WTX 	gll//	ZefYTZ 	gll//9IJ[T\ 	gll//9IPYZ]T^ 	gll//9IPR[fg_T` 	gll//9IPYbmnaTb 	vcTd 	vI.eTf 	vIkBgTDj %))SUCL)))s   d)c                     g } dddt        j                  d      t        j                  d      t        j                  d      t        j                  d      t        j                  d      t        j                  d	      f	D ]U  }| j                  t        j                  d
d|g             | j                  t        j                  d
d|gd|i             W | D cg c]  }d|f c}S c c}w )a!  
    Generate WAMP test messages which contain binary app payloads.

    With the JSON serializer, this currently only works on Python 3 (both CPython3 and PyPy3),
    because even on Python 3, we need to patch the stdlib JSON, and on Python 2, the patching
    would be even hackier.
                           i   i   r   r   r   r   r   T)r+   r,   appendr   r>   )rN   binaryrO   s      rP   generate_test_messages_binaryr\      s     D::a=::b>::c?::c?::c?::d#% 	GMM&&x@AGMM&&xPVXY% $((CT3K(((s   C*c                 T   g }|j                  t        j                  |              |j                  t        j                  d|              |j                  t        j                                |j                  t        j                  d             | s|j                  t        j                                |j                  t        j                  d             |j                  t        j
                                |j                  t        j
                  d             |S )Nuse_decimal_from_strT)batchedr_   )r`   )rZ   r   JsonSerializerCBORSerializerMsgPackSerializerUBJSONSerializer)decimal_support_serializerss     rP   create_serializersrg      s    L
11WX
11$Udef
1134
11$?@J88:;J88FG 	J779:J77EF rS   c                       e Zd Zd Zy)TestFlatBuffersSerializerc           	      .   t        j                  ddg dddddd	      t        j                  dd
g ddddd      g}t        j                         }|D ]=  }|j                  |      \  }}|j                  ||      d   }| j                  ||       ? y )Nr   r   r	   r
   r   r   r   )r   r   i  T)r   r   r   retainedzcom.example.topic1)r   r   retainr   )r   r>   r@   r   FlatBuffersSerializer	serializeunserializeassertEqual)selfmessagesserrO   payloadr[   msg2s          rP   
test_basicz$TestFlatBuffersSerializer.test_basic   s    MM& ()+G!<$'#') OOF0!*+-g#>#'	)
 ..0 C "mmC0OGV ??7F3A6D S$' rS   N)__name__
__module____qualname__rw    rS   rP   ri   ri      s    (rS   ri   c                   0    e Zd ZdZddZd Zd Zd Zd Zy)	TestDecimalSerializera  
    binary fixed-point
    binary floating-point:          float (float32), double (float64)
    decimal floating-point:         decimal128, decimal256
    decimal fixed-point:            NUMERIC(precision, scale)
    decimal arbitrary precision:    NUMERIC, decimal.Decimal

    https://developer.nvidia.com/blog/implementing-high-precision-decimal-arithmetic-with-cuda-int128/
    https://github.com/johnmcfarlane/cnl
    Nc                    t        d      | _        dt        j                         _        dt        j
                         t        j                  dd      t        j                  dd      t        j                  dddz        t        j                  ddd	z        d
dt        j                  d      ddddd d
dt        j                  d      gd	fg| _	        dt        j
                         t        j                  dd      t        j                  dd      t        j                  dddz        t        j                  ddd	z        d
dt        d      t        d      t        d      t        d      t        j                  d      ddddd d
dt        d      t        d      t        d      t        d      t        j                  d      gdfg| _        y )NT)re   L   r   l          l            r
   rX   rY   g^F7ݚ?g6!Y?   r	   )	abcdefgyzz'0.1234567890123456789012345678901234567z'0.8765432109876543210987654321098765434zM0.123456789012345678901234567890123456701234567890123456789012345678901234567zM0.876543210987654321098765432109876543298765432109876543210987654321098765434)r   r   r   r   r   r   r   hijkr   r   )rg   _test_serializersdecimal
getcontextprecrandomrandintr+   r,   _test_messages_no_decr   _test_messages_decrr   s    rP   setUpzTestDecimalSerializer.setUp   s   !3D!I %'! mmonnQ0nnQ0nnQS1nnQS1)(jjm('ZZ]	&
"2 mmonnQ0nnQ0nnQS1nnQS1)(GHGHmnmnjjm('FGFGlmlmZZ]!!#
rS   c                     t        j                  d      }| j                  D ]U  \  }}|j                  |j	                  |            d   }| j                  ||       | j                  d|d   |d   z          W y)zZ
        Test without ``use_decimal_from_str`` feature of JSON object serializer.
        Fr^   r        ?r   r   N)r   JsonObjectSerializerr   rp   ro   rq   rr   rt   contains_binaryobj_objs        rP   test_json_no_decimalz*TestDecimalSerializer.test_json_no_decimal1  ss     --5I$($>$> OS??3==#56q9DS$'/cT#Y1FG %?rS   c                    t        j                  d      }| j                  D ]  \  }}|j                  |j	                  |            d   }| j                  ||       | j                  d|d   |d   z          | j                  t        d      |d   |d	   z          | j                  t        d
      |d   |d   z           y)zR
        Test ``use_decimal_from_str`` feature of JSON object serializer.
        Tr^   r   r   r   r   z'1.0000000000000000000000000000000000001r   r   zM1.000000000000000000000000000000000000000000000000000000000000000000000000001r   r   N)r   r   r   rp   ro   rq   r   r   s        rP   test_json_decimalz'TestDecimalSerializer.test_json_decimal;  s     --4H$($;$; OS??3==#56q9DS$'/cT#Y1FGW%NOQUVYQZ]abe]fQfgW%tuw{|  xA  DH  IL  DM  xM  N %<rS   c                     | j                   D ]f  }|j                  }| j                  | j                  z   D ]<  \  }}|j	                  |      }|j                  |      }| j                  ||d          > h y Nr   r   _serializerr   r   ro   rp   rq   )rr   wamp_serrt   r   rO   ru   rv   s          rP   test_roundtrip_msgz(TestDecimalSerializer.test_roundtrip_msgG  sn    ..H&&C(,(B(BTE\E\(\$--,w/  d1g. )] /rS   c                 z   | j                   D ]  }|j                  }| j                  | j                  z   D ]  \  }}|j	                  |      }|j                  |      }|d   }| j                   D ]G  }|j                  }|j	                  |      }	|j                  |	      }
|
d   }
| j                  ||
       I   y r   r   )rr   	wamp_ser1ser1r   rO   payload1msg1	wamp_ser2ser2payload2rv   s              rP   test_crosstrip_msgz(TestDecimalSerializer.test_crosstrip_msgO  s    //I((D(,(B(BTE\E\(\$>>#.''1Aw!%!7!7I$00D#~~d3H++H5D7D$$S$/ "8	 )] 0rS   )returnN)	rx   ry   rz   __doc__r   r   r   r   r   r{   rS   rP   r}   r}      s#    	?
BH
N/0rS   r}   c                   H    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zy)TestSerializerc                 V    t               t               z   | _        t               | _        y )N)rQ   r\   _test_messagesrg   r   r   s    rP   r   zTestSerializer.setUpa  s!    469V9XX!3!5rS   c                     t        j                  d      }ddd|g ddg did|g}dddg di|g ddd	|g}| j                  ||       y
)zK
        Test deep object equality assert (because I am paranoid).
        
   r	   r
   r   )	   r   r
   r   rk   )r   r   r   goo)r   r   r   r   N)r+   r,   rq   )rr   vo1o2s       rP   test_deep_equal_msgz"TestSerializer.test_deep_equal_msgf  s\     JJrNE!IuiFXY[\]UI.qSXY[\]R rS   c                     | j                   D ]O  }| j                  D ]>  \  }}|j                  |      \  }}|j                  ||      }| j	                  |g|       @ Q y)z;
        Test round-tripping over each serializer.
        Nr   r   ro   rp   rq   )rr   rt   r   rO   ru   r[   rv   s          rP   r   z!TestSerializer.test_roundtrip_msgo  sc     ))C(,(;(;$ #&--"4 w7   #- )< *rS   c                 8   | j                   D ]  }| j                  D ]z  \  }}|j                  |      \  }}|j                  ||      }|d   }| j                   D ];  }|j                  |      \  }}|j                  ||      }| j	                  |g|       = |  y)zV
        Test cross-tripping over 2 serializers (as is done by WAMP routers).
        r   Nr   )	rr   r   r   rO   ru   r[   r   r   rv   s	            rP   r   z!TestSerializer.test_crosstrip_msg  s     **D(,(;(;$ #'.."5 ''8Aw 22D '+nnT&:OGV  ++GV<D $$cUD1 3 )< +rS   c                 
   | j                   D ]  \  }}| j                  |j                  i        | j                  D ]  }| j	                  |j
                  |j                  v        |j                  |      \  }}| j                  |j
                  |j                  v        | j                  |j                  |j
                     |       |j                          | j	                  |j
                  |j                  v          y)z5
        Test message serialization caching.
        N)	r   rq   _serializedr   assertFalser   ro   
assertTrueuncache)rr   r   rO   rt   ru   r[   s         rP   test_cache_msgzTestSerializer.test_cache_msg  s     %)$7$7 OS S__b1--   COO!CD"%--"4 3?? BC  !A7K   COO!CD . %8rS   c                 j   | j                   D ]  }|j                  d      }| j                  |d   d   d       | j                  |d   d   d       | j                  |d   d   d       | j                  |d   d   d       | j                  |d   d   d       | j                  |d   d   d        y	)
zA
        Test initial serializer stats are indeed empty.
        Tdetails
serializedbytesr   rs   rated_messagesunserializedN)r   statsrq   )rr   rt   r   s      rP   test_initial_statsz!TestSerializer.test_initial_stats  s     ))CIIdI+EU<091=U<0<a@U<01ABAFU>27;Q?U>2:>BU>23CDaH *rS   c                 H   | j                   D ]  }| j                  D ]+  \  }}|j                  |      \  }}|j                  ||       - |j	                  d      }| j                  |d   dkD         | j                  |d   dkD         | j                  |d   dkD          y)_
        Test serializer stats are non-empty after serializing/unserializing messages.
        Fr   r   r   rs   r   N)r   r   ro   rp   r   r   rr   rt   r   rO   ru   r[   r   s          rP   test_serialize_statsz#TestSerializer.test_serialize_stats  s     ))C(,(;(;$ #&--"4 0 )< IIeI,EOOE'NQ./OOE*-12OOE"23a78 *rS   c                    | j                   D ]E  }| j                  D ]+  \  }}|j                  |      \  }}|j                  ||       - |j	                  d      }| j                  |d   d   dkD         | j                  |d   d   dkD         | j                  |d   d   dkD         | j                  |d   d   dkD         | j                  |d   d   dkD         | j                  |d   d   dkD         | j                  |d   d   |d   d          | j                  |d   d   |d   d          | j                  |d   d   |d   d          H y	)
zp
        Test serializer stats - with details - are non-empty after serializing/unserializing messages.
        Tr   r   r   r   rs   r   r   N)r   r   ro   rp   r   r   rq   r   s          rP   !test_serialize_stats_with_detailsz0TestSerializer.test_serialize_stats_with_details  su    ))C(,(;(;$ #&--"4 0 )< IIdI+E
 OOE,/81<=OOE,/
;a?@OOE,/0@AAEFOOE.1':Q>?OOE.1*=ABOOE.12BCaGHU<095;PQX;YZU<0<eN>ST^>_`U<01ABE.DYZjDkl3 *rS   c                    | j                   D ]  }| j                  D ]+  \  }}|j                  |      \  }}|j                  ||       - |j	                          |j	                  d      }| j                  |d   d   d       | j                  |d   d   d       | j                  |d   d   d       | j                  |d   d   d       | j                  |d   d   d       | j                  |d   d   d        y	)
z]
        Test serializer stats are reset after fetching stats - depending on option.
        Tr   r   r   r   rs   r   r   N)r   r   ro   rp   r   rq   r   s          rP   test_reset_statszTestSerializer.test_reset_stats  s    ))C(,(;(;$ #&--"4 0 )< IIKIIdI+EU<091=U<0<a@U<01ABAFU>27;Q?U>2:>BU>23CDaH' *rS   c                       j                   D ]T  } fd}|j                  dd|        j                  D ]+  \  }}|j                  |      \  }}|j	                  ||       - V y)r   c                     j                  | d   dkD         j                  | d   dkD         j                  | d   dkD         y )Nr   r   rs   r   )r   )r   rr   s    rP   on_statsz0TestSerializer.test_auto_stats.<locals>.on_stats  sE    g 23j 1A 56&6 7! ;<rS   r   r   N)r   set_stats_autoresetr   ro   rp   )rr   rt   r   r   rO   ru   r[   s   `      rP   test_auto_statszTestSerializer.test_auto_stats  sg     ))C=
 ##B84(,(;(;$ #&--"4 0 )< *rS   N)rx   ry   rz   r   r   r   r   r   r   r   r   r   r   r{   rS   rP   r   r   _  s8    6
!."26E0I 9(m>I21rS   r   )F)r+   unittestr   r   r   autobahn.wampr   r   r   rQ   r\   rg   TestCaseri   r}   r   r{   rS   rP   <module>r      sl   6 
     !  $e*P).4!( 1 1 !(Lv0H-- v0tC1X&& C1rS   