U
    .e                     @  s  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k
r   Y nX G d	d
 d
ejZdddddZejedfddZddd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ddddd Zi Zd!ed"< d#d$ d%d$ d&Zd'ed(< eed)ej ej! eed*d+d$ d,d$  eed-d.d$ ej! ee
d/e"e
 eej#d0d1d$ d2d$  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 k	r| S t|tr,t|S t D ](\}\}}t||r4t|||  S q4t|trztd|dW S  t	k
r   tdt
|d Y S X t |S )NZ__json__bytesutf-8base64)getattr
isinstancetextual_typesstr	_encodersitems_asr   decodeUnicodeDecodeErrorr   	b64encodesuperdefault)selfoZreducertmarkerencoder	__class__r
   4/tmp/pip-unpacked-wheel-48hrr5dg/kombu/utils/json.pyr      s    


zJSONEncoder.default)__name__
__module____qualname____doc__r   __classcell__r
   r
   r!   r#   r      s   r   r   r   r   vc                 C  s
   | |dS )N)__type__	__value__r
   r)   r
   r
   r#   r   0   s    r   c                 K  s$   |pi }|| fd|it |f|S )z Serialize object to json string.cls)dict)s_dumpsr-   Zdefault_kwargskwargsr
   r
   r#   dumps4   s    r2   r.   r   c                 C  sD   |   ddhkr<t| d }|r.|| d S tdt| n| S dS )z0Hook function to perform custom deserialization.r+   r,   zUnsupported typeN)keys	_decodersget
ValueErrortype)r   decoderr
   r
   r#   object_hook<   s    r:   Tc                 C  sT   t | tr|  d} n.t | tr0| d} n|rHt | trH| d} || |dS )zDeserialize json from string.r   )r:   )r   
memoryviewtobytesr   	bytearrayr   )r/   _loadsZdecode_bytesr:   r
   r
   r#   loadsH   s    


r?   TEncodedTztype[T]zCallable[[T], EncodedT]zCallable[[EncodedT], T]r   r   r    r9   c                 C  s   ||ft | < |t|< dS )z=Add support for serializing/deserializing native python type.N)r   r5   rB   r
   r
   r#   register_type_   s    rC   z dict[type, tuple[str, EncoderT]]r   c                 C  s
   |  dS Nr   )encoder3   r
   r
   r#   <lambda>l       rF   c                 C  s   t | dS rD   )r   	b64decoderE   r3   r
   r
   r#   rF   m   rG   )r   r   zdict[str, DecoderT]r5   r   r   c                 C  s   |   S N	isoformatr3   r
   r
   r#   rF   v   rG   c                 C  s   t |  S rI   )r   fromisoformatr   r3   r
   r
   r#   rF   w   rG   r   c                 C  s   |   S rI   rJ   r3   r
   r
   r#   rF   y   rG   decimaluuidc                 C  s
   d| j iS )Nhex)rO   r3   r
   r
   r#   rF   ~   rG   c                 C  s   t jf | S rI   )rN   UUIDr3   r
   r
   r#   rF      rG   )$r'   
__future__r   r   jsonrN   r   r   r   rM   r   typingr   r   r	   r   Zdjango.utils.functionalr   ImportErrorr   r   r2   r:   r?   ZDecoderTZEncoderTr@   rA   rC   r   __annotations__r5   rK   rL   r   rP   r
   r
   r
   r#   <module>   sX     
