o
    èó·i|Z  ã                   @   s¤   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d„ Z	dd	„ Z
ddd„ZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZdS )é    N)ÚDecimal)Úmessage)Úrole)Ú
serializerc                  C   sJ  t  d¡} d}d}d}dddd| |d	d| |d
œg}d	d| ||dœ}g t ddt ¡ i¡‘t ddt ¡ i¡‘t ddt ¡ i¡‘t ddt ¡ i¡‘t dt ¡ t ¡ t ¡ t ¡ dœ¡‘t 	¡ ‘t 
d¡‘tj
d|d�‘tj
dg |d�‘tj
d||d�‘tj
ddd�‘t d¡‘tjdtjjd�‘t dd¡‘tjdd|d�‘tjddg |d�‘tjdd||d�‘tjdddd�‘t d¡‘tjd|d�‘tjdg |d�‘tjd||d�‘tjddd�‘t d¡‘tjdtjjd�‘t d|¡‘tjd||d�‘tjd|g |d�‘tjd|||d�‘tjd|dd�‘t d|¡‘tjd||d�‘tjd|g |d�‘tjd|||d�‘tjd|dd�‘t d¡‘t dd¡‘t dd¡‘t d|¡‘tjd|dd�‘tjd|dd�‘t d|¡‘tjd|dd�‘tjd|dd�‘t dd¡‘tjdd|d�‘tjddg |d�‘tjdd||d�‘tjdddd �‘t dd¡‘t d|¡‘tjd||d�‘tjd|g |d�‘tjd|||d�‘tjd|d!dgg d"¢d#�‘t d|¡‘tjd||d�‘tjd|g |d�‘tjd|||d�‘tjd|d!dgg d"¢d#�‘t d¡‘t dd¡‘t dd¡‘t d|¡‘tjd|tjjd�‘t d|¡‘tjd|tjjd�‘t tjjd|¡‘tjtjjd||d�‘tjtjjd|g |d�‘tjtjjd|||d�‘t tjjd|¡‘tjtjjd||d�‘tjtjjd|g |d�‘tjtjjd|||d�‘t d¡‘tjd|d�‘tjd||d�‘}d$d%„ |D ƒS )'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   ZarrZrealm1Ú
subscriberÚ	publisherÚcallerÚcallee)r   r   r   r   é@â ©Úargs©r   ÚkwargsT)Úprogress)Úmodeéƒ
 i'  )ÚtimeoutÚprefix)ÚmatchZ
roundrobin)Zinvokeé,  )r   F)éd   éÈ   r   )Z
exclude_meÚexcludeZeligiblec                 S   ó   g | ]}d |f‘qS ©F© ©Ú.0Úmsgr%   r%   úmC:\Users\psant\Downloads\PAF backend\school\venv\Lib\site-packages\autobahn/wamp/test/test_wamp_serializer.pyÚ
<listcomp>‹   ó    z*generate_test_messages.<locals>.<listcomp>N)ÚosÚurandomr   ZHellor   ZRoleSubscriberFeaturesZRolePublisherFeaturesZRoleCallerFeaturesZRoleCalleeFeaturesZGoodbyeÚYieldZ	InterruptZKILLZ
InvocationÚResultZCancelÚCallZUnregisteredZ
UnregisterZ
RegisteredZRegisterÚEventZ	PublishedÚPublishZUnsubscribedZUnsubscribeZ
SubscribedZ	SubscribeZMATCH_PREFIXÚErrorZMESSAGE_TYPE)Z
some_bytesZsome_unicodeZsome_uriZsome_unicode_uriZ	some_argsZsome_kwargsÚmsgsr%   r%   r)   Úgenerate_test_messages&   sR  
ÿþýüüûõôóòñðïî
íìëêéèçæåäãâ
á à!ß"Þ#Ý
$Ü%Û&Ú'Ù(Ø)×
*Ö
+Õ
,Ô-Ó.Ò
/Ñ0Ð1Ï
2Î3Í4Ì5Ë6Ê
7É
8È9Ç:Æ;Å<Ä
=Ã>Â?Á@ÀA¿B¾
C½
D¼
E»Fº
G¹H¸I·J¶KµL´M³N²O±P°Q¯R®S­Ur5   c                  C   sˆ   g } dddt  d¡t  d¡t  d¡t  d¡t  d¡t  d	¡f	D ]}|  tjd
d|gd�¡ |  tjd
d|gd|id�¡ qdd„ | D ƒS )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   c                 S   r#   )Tr%   r&   r%   r%   r)   r*   ¢   r+   z1generate_test_messages_binary.<locals>.<listcomp>N)r,   r-   Úappendr   r1   )r4   Úbinaryr%   r%   r)   Úgenerate_test_messages_binaryŽ   s   ø	 r?   Fc                 C   s’   g }|  tj| d�¡ |  tjd| d�¡ |  t ¡ ¡ |  tjdd�¡ | sG|  t ¡ ¡ |  tjdd�¡ |  t ¡ ¡ |  tjdd�¡ |S )N©Úuse_decimal_from_strT)ÚbatchedrA   )rB   )r=   r   ZJsonSerializerZCBORSerializerZMsgPackSerializerZUBJSONSerializer)Údecimal_supportZ_serializersr%   r%   r)   Úcreate_serializers¥   s   rD   c                   @   s   e Zd Zdd„ ZdS )ÚTestFlatBuffersSerializerc                 C   s~   t jddg d¢dddœddd	�t jdd
g d¢dddœdd�g}t ¡ }|D ]}| |¡\}}| ||¡d }|  ||¡ q%d S )Nr   r   ©r   r   r	   r   r
   )r   r   iš  T)r   r   r   Zretainedzcom.example.topic1)r   r   Zretainr   )r   r1   r2   r   ZFlatBuffersSerializerÚ	serializeÚunserializeÚassertEqual)ÚselfÚmessagesÚserr(   Úpayloadr>   Úmsg2r%   r%   r)   Ú
test_basicÁ   s(   ûüùôz$TestFlatBuffersSerializer.test_basicN)Ú__name__Ú
__module__Ú__qualname__rO   r%   r%   r%   r)   rE   ¿   s    rE   c                   @   s:   e Zd ZdZddd„Zdd„ Zdd	„ Zd
d„ Zdd„ ZdS )Ú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
    ÚreturnNc                 C   s  t dd�| _dt ¡ _dt ¡ t dd¡t dd¡t ddd ¡t ddd	 ¡d
dt d¡ddddd d
dt d¡gdœ	fg| _	dt ¡ t dd¡t dd¡t ddd ¡t ddd	 ¡d
dt
dƒt
dƒt
dƒt
dƒt d¡ddddd d
dt
dƒt
dƒt
dƒt
dƒt d¡gdœfg| _d S )NT)rC   éL   r   l          l            r   r;   r<   g^öF7Ýš¿?g6!Y¤ì?é   éÿÿÿÿr   )	ÚaÚbÚcÚdÚeÚfÚgÚyÚzz'0.1234567890123456789012345678901234567z'0.8765432109876543210987654321098765434zM0.123456789012345678901234567890123456701234567890123456789012345678901234567zM0.876543210987654321098765432109876543298765432109876543210987654321098765434)rX   rY   rZ   r[   r\   r]   r^   ÚhÚiÚjÚkr_   r`   )rD   Ú_test_serializersÚdecimalÚ
getcontextÚprecÚrandomÚrandintr,   r-   Ú_test_messages_no_decr   Ú_test_messages_dec©rJ   r%   r%   r)   ÚsetUpð   sh   


øöÿÿ

ôðÿ
ÿzTestDecimalSerializer.setUpc                 C   sX   t jdd�}| jD ] \}}| | |¡¡d }|  ||¡ |  d|d |d  ¡ q	dS )zZ
        Test without ``use_decimal_from_str`` feature of JSON object serializer.
        Fr@   r   ç     ð?r]   r^   N)r   ÚJsonObjectSerializerrk   rH   rG   rI   ©rJ   rL   Úcontains_binaryÚobjÚ_objr%   r%   r)   Útest_json_no_decimal1  s   ýz*TestDecimalSerializer.test_json_no_decimalc                 C   s�   t jdd�}| jD ]<\}}| | |¡¡d }|  ||¡ |  d|d |d  ¡ |  tdƒ|d |d	  ¡ |  td
ƒ|d |d  ¡ q	dS )zR
        Test ``use_decimal_from_str`` feature of JSON object serializer.
        Tr@   r   ro   r]   r^   z'1.0000000000000000000000000000000000001ra   rb   zM1.000000000000000000000000000000000000000000000000000000000000000000000000001rc   rd   N)r   rp   rl   rH   rG   rI   r   rq   r%   r%   r)   Útest_json_decimal;  s   ûz'TestDecimalSerializer.test_json_decimalc                 C   sP   | j D ]"}|j}| j| j D ]\}}| |¡}| |¡}|  ||d ¡ qqd S ©Nr   ©re   Ú_serializerrk   rl   rG   rH   rI   )rJ   Zwamp_serrL   rr   r(   rM   rN   r%   r%   r)   Útest_roundtrip_msgG  s   


ýþz(TestDecimalSerializer.test_roundtrip_msgc                 C   s‚   | j D ];}|j}| j| j D ]/\}}| |¡}| |¡}|d }| j D ]}|j}| |¡}	| |	¡}
|
d }
|  ||
¡ q#qqd S rw   rx   )rJ   Z	wamp_ser1Úser1rr   r(   Zpayload1Úmsg1Z	wamp_ser2Úser2Zpayload2rN   r%   r%   r)   Útest_crosstrip_msgO  s   





ûüþz(TestDecimalSerializer.test_crosstrip_msg)rT   N)	rP   rQ   rR   Ú__doc__rn   ru   rv   rz   r~   r%   r%   r%   r)   rS   å   s    

A
rS   c                   @   s\   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚTestSerializerc                 C   s   t ƒ tƒ  | _tƒ | _d S )N)r5   r?   Ú_test_messagesrD   re   rm   r%   r%   r)   rn   a  s   zTestSerializer.setUpc                 C   s^   t  d¡}ddd|g d¢dg d¢idœ|g}dddg d¢i|g d¢dd	œ|g}|  ||¡ d
S )zK
        Test deep object equality assert (because I am paranoid).
        é
   r   r   r   )é	   r	   r   r   rF   )r   r   r   Úgoo)r„   r   r   r   N)r,   r-   rI   )rJ   ÚvZo1Zo2r%   r%   r)   Útest_deep_equal_msgf  s   
""z"TestSerializer.test_deep_equal_msgc                 C   sH   | j D ]}| jD ]\}}| |¡\}}| ||¡}|  |g|¡ qqdS )z;
        Test round-tripping over each serializer.
        N©re   r�   rG   rH   rI   )rJ   rL   rr   r(   rM   r>   rN   r%   r%   r)   rz   o  s   
÷þz!TestSerializer.test_roundtrip_msgc           	      C   sv   | j D ]5}| jD ]/\}}| |¡\}}| ||¡}|d }| j D ]}| |¡\}}| ||¡}|  |g|¡ q qqdS )zV
        Test cross-tripping over 2 serializers (as is done by WAMP routers).
        r   Nr‡   )	rJ   r{   rr   r(   rM   r>   r|   r}   rN   r%   r%   r)   r~   €  s   

ö÷þz!TestSerializer.test_crosstrip_msgc                 C   sŽ   | j D ]A\}}|  |ji ¡ | jD ]2}|  |j|jv ¡ | |¡\}}|  |j|jv ¡ |  |j|j |¡ | ¡  |  |j|jv ¡ qqdS )z5
        Test message serialization caching.
        N)	r�   rI   Z_serializedre   ZassertFalsery   rG   Ú
assertTrueZuncache)rJ   rr   r(   rL   rM   r>   r%   r%   r)   Útest_cache_msg›  s   
óûzTestSerializer.test_cache_msgc                 C   s”   | j D ]D}|jdd�}|  |d d d¡ |  |d d d¡ |  |d d d¡ |  |d d d¡ |  |d d d¡ |  |d d d¡ qd	S )
zA
        Test initial serializer stats are indeed empty.
        T©ÚdetailsÚ
serializedÚbytesr   rK   Úrated_messagesÚunserializedN)re   ÚstatsrI   )rJ   rL   r�   r%   r%   r)   Útest_initial_stats³  s   
öz!TestSerializer.test_initial_statsc                 C   s|   | j D ]8}| jD ]\}}| |¡\}}| ||¡ q|jdd�}|  |d dk¡ |  |d dk¡ |  |d dk¡ qdS )ú_
        Test serializer stats are non-empty after serializing/unserializing messages.
        FrŠ   r�   r   rK   rŽ   N)re   r�   rG   rH   r�   rˆ   ©rJ   rL   rr   r(   rM   r>   r�   r%   r%   r)   Útest_serialize_statsÃ  s   
òz#TestSerializer.test_serialize_statsc                 C   s  | j D ]‰}| jD ]\}}| |¡\}}| ||¡ q|jdd�}|  |d d dk¡ |  |d d dk¡ |  |d d dk¡ |  |d d dk¡ |  |d d dk¡ |  |d d dk¡ |  |d d |d d ¡ |  |d d |d d ¡ |  |d d |d d ¡ qd	S )
zp
        Test serializer stats - with details - are non-empty after serializing/unserializing messages.
        TrŠ   rŒ   r�   r   rK   rŽ   r�   N)re   r�   rG   rH   r�   rˆ   rI   r“   r%   r%   r)   Ú!test_serialize_stats_with_details×  s   
çz0TestSerializer.test_serialize_stats_with_detailsc                 C   sÆ   | j D ]]}| jD ]\}}| |¡\}}| ||¡ q| ¡  |jdd�}|  |d d d¡ |  |d d d¡ |  |d d d¡ |  |d d d¡ |  |d d d¡ |  |d d d¡ qd	S )
z]
        Test serializer stats are reset after fetching stats - depending on option.
        TrŠ   rŒ   r�   r   rK   rŽ   r�   N)re   r�   rG   rH   r�   rI   r“   r%   r%   r)   Útest_reset_statsö  s   
ízTestSerializer.test_reset_statsc                    sT   ˆ j D ]$}‡ fdd„}| dd|¡ ˆ jD ]\}}| |¡\}}| ||¡ qqdS )r’   c                    s:   ˆ   | d dk¡ ˆ   | d dk¡ ˆ   | d dk¡ d S )Nr�   r   rK   rŽ   )rˆ   )r�   rm   r%   r)   Úon_stats  s   z0TestSerializer.test_auto_stats.<locals>.on_statsr‚   r   N)re   Zset_stats_autoresetr�   rG   rH   )rJ   rL   r—   rr   r(   rM   r>   r%   rm   r)   Útest_auto_stats  s   
ú÷zTestSerializer.test_auto_statsN)rP   rQ   rR   rn   r†   rz   r~   r‰   r‘   r”   r•   r–   r˜   r%   r%   r%   r)   r€   _  s    	r€   r$   )r,   Zunittestri   rf   r   Zautobahn.wampr   r   r   r5   r?   rD   ZTestCaserE   rS   r€   r%   r%   r%   r)   Ú<module>   s   h
&z