a
    h                     @   s   d dl Z d dlmZm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mZ ddlmZ G d	d
 d
e jZG dd de jZdS )    N)MappingSequence)suppress)PurePath)AnyCallableClassVarOptional   )_import_classget_filesystem_class)AbstractFileSystemc                       sF   e Zd ZU dZee ed< eed fddZeedddZ	  Z
S )	FilesystemJSONEncoderTinclude_password)oreturnc                    sR   t |tr|j| jdS t |trFt|}|j d|j t|dS t	 
|S )N)r   .)clsstr)
isinstancer   to_dictr   r   type
__module____name__r   superdefault)selfr   r   	__class__ 9/var/www/auris/lib/python3.9/site-packages/fsspec/json.pyr      s    

zFilesystemJSONEncoder.defaultobjr   c                    s\   t |ttttfr|S t |tr6 fdd| D S t |trR fdd|D S  |S )z
        Recursively converts an object so that it can be JSON serialized via
        :func:`json.dumps` and :func:`json.dump`, without actually calling
        said functions.
        c                    s   i | ]\}}|  |qS r   make_serializable.0kvr   r   r    
<dictcomp>%       z;FilesystemJSONEncoder.make_serializable.<locals>.<dictcomp>c                    s   g | ]}  |qS r   r#   r&   r(   r)   r   r    
<listcomp>'   r+   z;FilesystemJSONEncoder.make_serializable.<locals>.<listcomp>)	r   r   intfloatboolr   itemsr   r   r   r"   r   r)   r    r$      s    

z'FilesystemJSONEncoder.make_serializable)r   r   __qualname__r   r   r0   __annotations__r   r   r$   __classcell__r   r   r   r    r      s   
	r   c                       s   e Zd Zdddddddeeeeef gef  eeegef  eeegef  eeegef  eeee	e
eef  gef  dd fddZeeeef ddd	Zeeeef dd
dZeeef dddZeedddZ  ZS )FilesystemJSONDecoderNTobject_hookparse_float	parse_intparse_constantstrictobject_pairs_hook)r8   r9   r:   r;   r<   r=   r   c                   s$   || _ t j| j|||||d d S )Nr7   )original_object_hookr   __init__custom_object_hook)r   r8   r9   r:   r;   r<   r=   r   r   r    r?   -   s    
zFilesystemJSONDecoder.__init__)dctc                 C   sX   t t< |d }t|}t|tr6|W  d    S W d    n1 sJ0    Y  d S )Nr   )r   	Exceptionr   
issubclassr   )r   rA   Zfqppath_clsr   r   r    try_resolve_path_clsB   s    

0z*FilesystemJSONDecoder.try_resolve_path_clsc              	   C   s   t t d|v r|z.t|d }t|tr>|W W  d    S W n: tyz   d|v rtt|d  Y W  d    S  Y n0 W d    n1 s0    Y  d S )Nr   protocol)r   rB   r   rC   r   r   )r   rA   Zfs_clsr   r   r    try_resolve_fs_clsN   s    

&z(FilesystemJSONDecoder.try_resolve_fs_clsc                 C   sZ   d|v rB|  | }d ur$t|S | | }d urB||d S | jd urV| |S |S )Nr   r   )rG   r   	from_dictrE   r>   )r   rA   Zobj_clsr   r   r    r@   ^   s    


z(FilesystemJSONDecoder.custom_object_hookr!   c                    sX   t |tr |}t |tr4 fdd| D S t |ttfrT fdd|D S |S )zV
        Inverse function of :meth:`FilesystemJSONEncoder.make_serializable`.
        c                    s   i | ]\}}|  |qS r   unmake_serializabler%   r)   r   r    r*   q   r+   z=FilesystemJSONDecoder.unmake_serializable.<locals>.<dictcomp>c                    s   g | ]}  |qS r   rI   r,   r)   r   r    r-   s   r+   z=FilesystemJSONDecoder.unmake_serializable.<locals>.<listcomp>)r   dictr@   r1   listtupler2   r   r)   r    rJ   j   s    


z)FilesystemJSONDecoder.unmake_serializable)r   r   r3   r	   r   rK   r   r   r0   rL   rM   r?   classmethodrE   rG   r@   rJ   r5   r   r   r   r    r6   ,   s*   r6   )jsoncollections.abcr   r   
contextlibr   pathlibr   typingr   r   r   r	   registryr   r   specr   JSONEncoderr   JSONDecoderr6   r   r   r   r    <module>   s   