o
    —¨Êhø  ã                   @  sF  U d Z ddlmZ ddlZddlZddl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ZzddlmZ eef7 ZW n	 eyG   Y nw G d	d
„ d
ejƒZd0dd„Zejedfdd„Zd1dd„Zejdefdd„Zeegef  ZZedƒZedƒZdd„ fd2d%d&„Zi Zd'ed(< d)d„ d*d„ d+œZd,ed-< d.d/„ Z e ƒ  dS )3zJSON Serialization Utilities.é    )ÚannotationsN)ÚdateÚdatetimeÚtime)ÚDecimal)ÚAnyÚCallableÚTypeVar© )ÚPromisec                      s    e Zd ZdZ‡ fdd„Z‡  ZS )ÚJSONEncoderzKombu custom json encoder.c                   sÄ   t |dd ƒ}|d ur|ƒ S t|tƒrt|ƒS t ¡ D ]\}\}}t||ƒr8|d u r/||ƒ  S t|||ƒƒ  S qt|tƒr\z	td| d¡ƒW S  t	y[   tdt
 |¡ d¡ƒ Y S w tƒ  |¡S )NÚ__json__Úbytesúutf-8Úbase64)ÚgetattrÚ
isinstanceÚtextual_typesÚstrÚ	_encodersÚitemsÚ_asr   ÚdecodeÚUnicodeDecodeErrorr   Ú	b64encodeÚsuperÚdefault)ÚselfÚoÚreducerÚtÚmarkerÚencoder©Ú	__class__r
   úB/var/www/html/env/lib/python3.10/site-packages/kombu/utils/json.pyr      s&   

ÿÿÿ
ÿzJSONEncoder.default)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__classcell__r
   r
   r#   r%   r      s    r   r    r   Úvr   c                 C  s
   | |dœS )N)Ú__type__Ú	__value__r
   )r    r+   r
   r
   r%   r   2   s   
r   c                 K  s(   |pi }|| fd|it |fi |¤Ž¤ŽS )z Serialize object to json string.Úcls)Údict)ÚsÚ_dumpsr.   Údefault_kwargsÚkwargsr
   r
   r%   Údumps6   s    r4   r   r/   c                 C  s>   |   ¡ ddhkrt | d ¡}|r|| d ƒS tdt| ƒ‚| S )z0Hook function to perform custom deserialization.r,   r-   zUnsupported type)ÚkeysÚ	_decodersÚgetÚ
ValueErrorÚtype)r   Údecoderr
   r
   r%   Úobject_hookB   s   r;   Tc                 C  sT   t | tƒr|  ¡  d¡} nt | tƒr|  d¡} n|r$t | tƒr$|  d¡} || |d�S )zDeserialize json from string.r   )r;   )r   Ú
memoryviewÚtobytesr   Ú	bytearrayr   )r0   Ú_loadsÚdecode_bytesr;   r
   r
   r%   ÚloadsN   s   


rA   ÚTÚEncodedTc                 C  s   | S ©Nr
   )Údr
   r
   r%   Ú<lambda>i   s    rF   útype[T]r!   ú
str | Noner"   úCallable[[T], EncodedT]r:   úCallable[[EncodedT], T]c                 C  s$   ||ft | < |dur|t|< dS dS )a  Add support for serializing/deserializing native python type.

    If marker is `None`, the encoding is a pure transformation and the result
    is not placed in an envelope, so `decoder` is unnecessary. Decoding must
    instead be handled outside this library.
    N)r   r6   )r    r!   r"   r:   r
   r
   r%   Úregister_typee   s   ÿrK   z'dict[type, tuple[str | None, EncoderT]]r   c                 C  s
   |   d¡S ©Nr   )Úencode©r   r
   r
   r%   rF   x   ó   
 c                 C  s   t  |  d¡¡S rL   )r   Ú	b64decoderM   rN   r
   r
   r%   rF   y   ó    )r   r   zdict[str, DecoderT]r6   c                   C  sf   t tdtjtjƒ t tddd„ dd„ ƒ t tddd„ tjƒ t tdttƒ t tj	d	d
d„ dd„ ƒ d S )Nr   r   c                 S  ó   |   ¡ S rD   ©Ú	isoformatrN   r
   r
   r%   rF   …   ó    z)_register_default_types.<locals>.<lambda>c                 S  s   t  | ¡ ¡ S rD   )r   Úfromisoformatr   rN   r
   r
   r%   rF   †   s    r   c                 S  rR   rD   rS   rN   r
   r
   r%   rF   ˆ   rU   ÚdecimalÚuuidc                 S  s
   d| j iS )NÚhex)rY   rN   r
   r
   r%   rF   �   rO   c                 S  s   t jdi | ¤ŽS )Nr
   )rX   ÚUUIDrN   r
   r
   r%   rF   Ž   rQ   )
rK   r   rT   rV   r   r   r   r   rX   rZ   r
   r
   r
   r%   Ú_register_default_types}   s"   
ÿüür[   )r    r   r+   r   )r   r/   )r    rG   r!   rH   r"   rI   r:   rJ   )!r)   Ú
__future__r   r   ÚjsonrX   r   r   r   rW   r   Útypingr   r   r	   r   Údjango.utils.functionalr   ÚImportErrorr   r   r4   r;   rA   ÚDecoderTÚEncoderTrB   rC   rK   r   Ú__annotations__r6   r[   r
   r
   r
   r%   Ú<module>   sD    ÿ

ü
üþ
