o
    Df                     @  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
   I/home/ubuntu/webapp/venv/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    



