U
    h                     @   s   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	m
Z
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)suppress)PurePath)	AnyCallableClassVarDictListMappingOptionalSequenceTuple   )_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__ =/var/www/html/venv/lib/python3.8/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>)   s      z;FilesystemJSONEncoder.make_serializable.<locals>.<dictcomp>c                    s   g | ]}  |qS r"   r&   r)   r+   r,   r"   r#   
<listcomp>+   s     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   r2   __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)r:   r;   r<   r=   r>   r?   r   c                   s$   || _ t j| j|||||d d S )Nr9   )original_object_hookr   __init__custom_object_hook)r   r:   r;   r<   r=   r>   r?   r    r"   r#   rA   1   s    
zFilesystemJSONDecoder.__init__)dctc              
   C   sB   t t0 |d }t|}t|tr4|W  5 Q R  S W 5 Q R X d S )Nr   )r   	Exceptionr   
issubclassr   )r   rC   Zfqppath_clsr"   r"   r#   try_resolve_path_clsF   s    

z*FilesystemJSONDecoder.try_resolve_path_clsc              
   C   s   t tv d|krzz,t|d }t|tr<|W W  5 Q R  S W n: tk
rx   d|krrt|d  Y W  5 Q R  S  Y nX W 5 Q R X d S )Nr   protocol)r   rD   r   rE   r   r   )r   rC   Zfs_clsr"   r"   r#   try_resolve_fs_clsR   s    

z(FilesystemJSONDecoder.try_resolve_fs_clsc                 C   sZ   d|krB|  | }d k	r$t|S | | }d k	rB||d S | jd k	rV| |S |S )Nr   r   )rI   r   	from_dictrG   r@   )r   rC   Zobj_clsr"   r"   r#   rB   b   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-   u   s      z=FilesystemJSONDecoder.unmake_serializable.<locals>.<dictcomp>c                    s   g | ]}  |qS r"   rK   r.   r,   r"   r#   r/   w   s     z=FilesystemJSONDecoder.unmake_serializable.<locals>.<listcomp>)r   dictrB   r3   listtupler4   r"   r,   r#   rL   n   s    


z)FilesystemJSONDecoder.unmake_serializable)r   r   r5   r
   r   r   r   r   r2   r   r   rA   classmethodrG   rI   rB   rL   r7   r"   r"   r    r#   r8   0   s*   r8   )json
contextlibr   pathlibr   typingr   r   r   r   r   r	   r
   r   r   registryr   r   specr   JSONEncoderr   JSONDecoderr8   r"   r"   r"   r#   <module>   s   ,