o
    eZh!                     @   s   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m	Z	m
Z
mZ ddlmZ zd dlZW n ey;   dZY nw G dd dZG d	d
 d
eZG dd deZedur_G dd deZG dd deZeje eje eje iZG dd dZdS )    N)date)Decimal)AnyClassVarMappingOptional   )SerializationErrorc                   @   sB   e Zd ZU dZee ed< dedefddZ	dedefddZ
d	S )

SerializerzSerializer interface.mimetypedatareturnc                 C      t  NNotImplementedErrorselfr    r   T/var/www/html/lang_env/lib/python3.10/site-packages/elastic_transport/_serializer.pyloads&      zSerializer.loadsc                 C   r   r   r   r   r   r   r   dumps)   r   zSerializer.dumpsN)__name__
__module____qualname____doc__r   str__annotations__bytesr   r   r   r   r   r   r   r
   !   s
   
 r
   c                   @   sF   e Zd ZU dZdZee ed< dedefddZ	dedefdd	Z
d
S )TextSerializerz"Text serializer to and from UTF-8.ztext/*r   r   r   c              
   C   sJ   t |tr|S z|ddW S  ty$ } z
td||fdd }~ww )Nutf-8surrogatepasszUnable to deserialize as text: errors)
isinstancer   decodeUnicodeErrorr	   r   r   er   r   r   r   2   s   
zTextSerializer.loadsc              
   C   sP   t |tr|S z|ddW S  tttfy' } z
td||fdd }~ww )Nr!   r"   zUnable to serialize to text: r#   )r%   r   encodeAttributeErrorr'   	TypeErrorr	   r(   r   r   r   r   <   s   
zTextSerializer.dumpsN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    -   s
   
 
r    c                   @   s|   e Zd ZU dZdZee ed< dedefddZ	dede
fdd	Zde
defd
dZde
defddZdede
fddZdS )JsonSerializerz<JSON serializer relying on the standard library json module.application/jsonr   r   r   c                 C   sV   t |tr	| S t |tjrt|S t |trt|S td|dt	|j
 dd)NUnable to serialize to JSON:  (type: ))message)r%   r   	isoformatuuidUUIDr   r   floatr	   typer   r   r   r   r   defaultN   s   

zJsonSerializer.defaultc                 C   s   t j|| jdddddS )NF),:)r8   ensure_ascii
separatorsr!   r"   )jsonr   r8   r*   r   r   r   r   
json_dumpsY   s
   
zJsonSerializer.json_dumpsc                 C   
   t |S r   )r=   r   r   r   r   r   
json_loads^      
zJsonSerializer.json_loadsc              
   C   sJ   |dkrd S z|  |W S  ttfy$ } z
td||fdd }~ww )N    zUnable to deserialize as JSON: r2   r$   )r@   
ValueErrorr,   r	   r(   r   r   r   r   a   s   zJsonSerializer.loadsc              
   C   sr   t |tr|ddS t |tr|S z| |W S  tttfy8 } ztd|dt	|j
 d|fdd }~ww )Nr!   r"   r/   r0   r1   rC   )r%   r   r*   r   r>   rD   r'   r,   r	   r7   r   r(   r   r   r   r   o   s   

zJsonSerializer.dumpsN)r   r   r   r   r   r   r   r   r   r8   r   r>   r@   r   r   r   r   r   r   r-   I   s   
 r-   c                   @   s4   e Zd ZdZdedefddZdedefddZdS )	OrjsonSerializerzJSON serializer relying on the orjson package.

        Only available if orjson if installed. It is faster, especially for vectors, but is also stricter.
        r   r   c                 C   s   t j|| jt jdS )N)r8   option)orjsonr   r8   ZOPT_SERIALIZE_NUMPYr   r   r   r   r>      s   
zOrjsonSerializer.json_dumpsc                 C   r?   r   )rG   r   r   r   r   r   r@      rA   zOrjsonSerializer.json_loadsN)r   r   r   r   r   r   r>   r@   r   r   r   r   rE      s    rE   c                   @   sF   e Zd ZU dZdZee ed< dede	fddZ
de	defdd	Zd
S )NdjsonSerializerzWNewline delimited JSON (NDJSON) serializer relying on the standard library json module.zapplication/x-ndjsonr   r   r   c                 C   sd   g }t d|D ]'}|sqz
|| | W q ttfy/ } z
td||fdd }~ww |S )Ns   [
]z!Unable to deserialize as NDJSON: rC   )resplitappendr@   rD   r,   r	   )r   r   Zndjsonliner)   r   r   r   r      s   zNdjsonSerializer.loadsc                 C   s   t |ttfr
|f}t }|D ]M}t |tr|dd}t |tr/||7 }|ds.|d7 }qz|| |7 }|d7 }W q ttt	fy\ } zt
d|dt|j d|fdd }~ww t|S )Nr!   r"      
zUnable to serialize to NDJSON: r0   r1   rC   )r%   r   r   	bytearrayr*   endswithr>   rD   r'   r,   r	   r7   r   )r   r   bufferrL   r)   r   r   r   r      s,   


zNdjsonSerializer.dumpsN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rH      s
   
 rH   c                   @   s   e Zd ZdZ		ddeeeef  defddZdde	d	ee d
e
fddZdde
d	ee d
e	fddZd	ee d
efddZdS )SerializerCollectionzCollection of serializers that can be fetched by mimetype. Used by
    :class:`elastic_transport.Transport` to serialize and deserialize native
    Python types into bytes before passing to a node.
    Nr.   serializersdefault_mimetypec                 C   sH   |d u rt }z|| | _W n ty   td|d w t|| _d S )Nz5Must configure a serializer for the default mimetype )DEFAULT_SERIALIZERSdefault_serializerKeyErrorrD   dictrR   )r   rR   rS   r   r   r   __init__   s   zSerializerCollection.__init__r   r   r   c                 C      |  ||S r   )get_serializerr   r   r   r   r   r   r   r         zSerializerCollection.dumpsc                 C   rY   r   )rZ   r   r[   r   r   r   r      r\   zSerializerCollection.loadsc                 C   s   |d u r	| j }|S |d\}}}z| j| }W |S  tyC   z|dd }| j| d }W Y |S  tyB   td| d w w )N;/r   z/*z8Unknown mimetype, not able to serialize or deserialize: )rU   	partitionrR   rV   r	   )r   r   
serializer_Zmimetype_supertyper   r   r   rZ      s(   
z#SerializerCollection.get_serializer)Nr.   r   )r   r   r   r   r   r   r   r
   rX   r   r   r   r   rZ   r   r   r   r   rQ      s    
rQ   )r=   rI   r4   datetimer   decimalr   typingr   r   r   r   _exceptionsr	   rG   ModuleNotFoundErrorr
   r    r-   rE   rH   r   rT   rQ   r   r   r   r   <module>   s.   91