o
    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                       sJ   e Zd ZU dZee ed< dedef fddZdedefdd	Z	  Z
S )
FilesystemJSONEncoderTinclude_passwordoreturnc                    sR   t |tr|j| jdS t |tr#t|}|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/construction_image-detection-poc/venv/lib/python3.10/site-packages/fsspec/json.pyr      s   

zFilesystemJSONEncoder.defaultobjc                    s\   t |ttttfr|S t |tr fdd| D S t |tr) 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                       i | ]
\}}|  |qS r"   make_serializable.0kvr   r"   r#   
<dictcomp>)       z;FilesystemJSONEncoder.make_serializable.<locals>.<dictcomp>c                       g | ]}  |qS r"   r&   r)   r+   r,   r"   r#   
<listcomp>+       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   r5   __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deeeeef gef  deeegef  deeegef  deeegef  ded	eee	e
eef  gef  d
df fddZedeeef fddZedeeef fddZdeeef fddZded
efddZ  ZS )FilesystemJSONDecoderNTobject_hookparse_float	parse_intparse_constantstrictobject_pairs_hookr=   r>   r?   r@   rA   rB   r   c                   s$   || _ t j| j|||||d d S )Nr<   )original_object_hookr   __init__custom_object_hook)r   r=   r>   r?   r@   rA   rB   r    r"   r#   rD   1   s   

zFilesystemJSONDecoder.__init__dctc                 C   sZ   t t |d }t|}t|tr|W  d    S W d    d S 1 s&w   Y  d S )Nr   )r   	Exceptionr   
issubclassr   )r   rF   fqppath_clsr"   r"   r#   try_resolve_path_clsF   s   


z*FilesystemJSONDecoder.try_resolve_path_clsc              	   C   s   t tH d|v r<zt|d }t|tr|W W  d    S W n# ty;   d|v r:t|d  Y W  d    S  w W d    d S W d    d S 1 sOw   Y  d S )Nr   protocol)r   rG   r   rH   r   r   )r   rF   fs_clsr"   r"   r#   try_resolve_fs_clsR   s,   




z(FilesystemJSONDecoder.try_resolve_fs_clsc                 C   sZ   d|v r!|  | }d urt|S | | }d ur!||d S | jd ur+| |S |S )Nr   r   )rN   r   	from_dictrK   rC   )r   rF   obj_clsr"   r"   r#   rE   b   s   


z(FilesystemJSONDecoder.custom_object_hookr$   c                    sX   t |tr
 |}t |tr fdd| D S t |ttfr* fdd|D S |S )zV
        Inverse function of :meth:`FilesystemJSONEncoder.make_serializable`.
        c                    r%   r"   unmake_serializabler(   r,   r"   r#   r-   u   r.   z=FilesystemJSONDecoder.unmake_serializable.<locals>.<dictcomp>c                    r/   r"   rQ   r0   r,   r"   r#   r1   w   r2   z=FilesystemJSONDecoder.unmake_serializable.<locals>.<listcomp>)r   dictrE   r6   listtupler7   r"   r,   r#   rR   n   s   


z)FilesystemJSONDecoder.unmake_serializable)r   r   r8   r
   r   r   r   r   r5   r   r   rD   classmethodrK   rN   rE   rR   r:   r"   r"   r    r#   r;   0   s8    	r;   )json
contextlibr   pathlibr   typingr   r   r   r   r   r	   r
   r   r   registryr   r   specr   JSONEncoderr   JSONDecoderr;   r"   r"   r"   r#   <module>   s    ,