o
    +ke"                  	   @   sP  d dl mZ ddlT ddlmZ ddlmZ ddlmZ	 ddlm
Z dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ eZedkZG dd deZG dd deZG dd deZdddddZdddddZG dd deZ
ddddddddd d!d"Zddddddddd d#d$Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. ZdS )/   )
StableDict   )*    )Packer)packb)pack)Unpacker)unpackb)unpack)version)ExtType)	OutOfData)r   r   r   c                   @      e Zd ZdZdS )PackExceptionzException while msgpack packingN__name__
__module____qualname____doc__ r   r   8usr/lib/python3.10/site-packages/borg/helpers/msgpack.pyr   $       r   c                   @   r   )UnpackExceptionz!Exception while msgpack unpackingNr   r   r   r   r   r   (   r   r   c                       s8   e Zd Zddddddd fdd
Z fddZ  ZS )	r   NFTdefaultunicode_errorsuse_single_float	autoresetuse_bin_typestrict_typesc                   s(   |d u sJ t  j||||||d d S )Nr   )super__init__)selfr   r   r   r   r   r    	__class__r   r   r"   -   s
   

zPacker.__init__c              
      s0   zt  |W S  ty } zt|d }~ww N)r!   r   	Exceptionr   )r#   objer$   r   r   r   5   s   zPacker.pack)r   r   r   r"   r   __classcell__r   r   r$   r   r   ,   s    r   FNr   r   c             
   K   sF   |d u sJ zt | f||d|W S  ty" } zt|d }~ww Nr+   )mp_packbr'   r   )or   r   kwargsr)   r   r   r   r   <   s   r   c             
   K   sH   |d u sJ zt | |f||d|W S  ty# } zt|d }~ww r,   )mp_packr'   r   )r.   streamr   r   r/   r)   r   r   r   r   D   s   r   c                       s\   e Zd Zdddddddddeddddddd fddZ fd	d
Z fddZeZ  ZS )r	   Nr   TF)	read_sizeuse_listrawobject_hookobject_pairs_hook	list_hookr   max_buffer_sizeext_hookstrict_map_keymax_str_lenmax_bin_lenmax_array_lenmax_map_lenmax_ext_lenc                   s`   |du sJ |d u sJ t |||||||||	|
|||||d}tr%||d< t jdi | d S )NT)	file_liker3   r4   r5   r6   r7   r8   r   r9   r:   r<   r=   r>   r?   r@   r;   r   )dict	_post_100r!   r"   )r#   rA   r3   r4   r5   r6   r7   r8   r   r9   r:   r;   r<   r=   r>   r?   r@   kwr$   r   r   r"   R   s   

	zUnpacker.__init__c              
      <   zt   W S  ty     ty } zt|d }~ww r&   )r!   r   r   r'   r   r#   r)   r$   r   r   r   k      zUnpacker.unpackc              
      rE   r&   )r!   __next__StopIterationr'   r   rF   r$   r   r   rH   s   rG   zUnpacker.__next__r&   )	r   r   r   r   r"   r   rH   nextr*   r   r   r$   r   r	   Q   s    r	   Tr2   )r5   r   r;   r<   r=   r>   r?   r@   c             
   K   l   |d u sJ zt |||||||d}
|
|	 tr||
d< t| fi |
W S  ty5 } zt|d }~ww N)r5   r   r<   r=   r>   r?   r@   r;   )rB   updaterC   
mp_unpackbr'   r   )Zpackedr5   r   r;   r<   r=   r>   r?   r@   r/   rD   r)   r   r   r   r
   ~   "   
r
   c             
   K   rK   rL   )rB   rM   rC   	mp_unpackr'   r   )r1   r5   r   r;   r<   r=   r>   r?   r@   r/   rD   r)   r   r   r   r      rO   r   c                  C   s   dd l } dd l} | j| jju S )Nr   )msgpackZmsgpack.fallbackr   fallbackrQ   r   r   r   is_slow_msgpack   s   rT   c                  C   s,   dd l } d| j  kodkn  o| jdvS )Nr   )r         )r   r      ))r   r   r   )rQ   r   rS   r   r   r   is_supported_msgpack   s   rX   c              	   C   s   t ddddttt td}| dkr|t ddd nD| dkr*|t tdd n6| d	kr;|t d
dtdtd n%| dkrK|t d
ddtd n| dkr\|t d
dddtd ntdt	di |S )zWreturn a limited Unpacker because we should not trust msgpack data received from remoteFr      )r4   r=   r@   r9   r<   serverd   )r>   r?   ZclientmanifestT   )r4   r>   r?   r<   r6   archivei'  )r4   r?   r<   r6   key
   i  z4kind must be "server", "client", "manifest" or "key"Nr   )
rB   maxZBUFSIZEZMAX_OBJECT_SIZErM   ZLIST_SCAN_LIMITZMAX_ARCHIVESr   
ValueErrorr	   )kindargsr   r   r   get_limited_unpacker   sH   




re   c                 C   s   t | trtj| dddS | S )zConvert bytearray to int
    littleTsigned)
isinstancebytesint
from_bytes)mtimer   r   r   bigint_to_int   s   
rn   c                 C   s,   |   dkr| j|   d d dddS | S )z[Convert integers larger than 64 bits to bytearray

    Smaller integers are left alone
    ?   	      rf   Trg   )
bit_lengthto_bytes)valuer   r   r   int_to_bigint   s   ru   )Z
datastructr   	constantsrQ   r   Z	mp_Packerr   r-   r   r0   r	   Zmp_Unpackerr
   rN   r   rP   r   Z
mp_versionr   r   rC   r'   r   r   rT   rX   re   rn   ru   r   r   r   r   <module>   sP    -)