
    ޛ7i                         d dl Z d dlmZmZmZ d dlmZ d dlmZ d dl	m
Z
mZ ddlmZmZ ddlmZ  G d	 d
e j"                        Z G d de j&                        Zy)    N)CallableMappingSequence)suppress)PurePath)AnyClassVar   )_import_classget_filesystem_class)AbstractFileSystemc                   N     e Zd ZU dZee   ed<   dedef fdZdedefdZ	 xZ
S )FilesystemJSONEncoderTinclude_passwordoreturnc                     t        |t              r|j                  | j                        S t        |t              r2t        |      }|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__s      H/home/rose/Desktop/poly/venv/lib/python3.12/site-packages/fsspec/json.pyr   zFilesystemJSONEncoder.default   sj    a+,99d.C.C9DDa"q'C!nn-Qs||n=c!fMMwq!!    objc                 b   t        |t        t        t        t        f      r|S t        |t
              r3|j                         D ci c]  \  }}|| j                  |       c}}S t        |t              r|D cg c]  }| j                  |       c}S | j                  |      S c c}}w c c}w )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.
        )
r   r   intfloatboolr   itemsmake_serializabler   r   r   r"   kvs       r    r(   z'FilesystemJSONEncoder.make_serializable   s     cCeT23Jc7#=@YY[I[TQAt--a00[IIc8$7:;s!D**1-s;;||C  	 J;s   B&:B,)r   r   __qualname__r   r	   r&   __annotations__r   r   r(   __classcell__r   s   @r    r   r      s8    '+htn+" " "!S !S !r!   r   c                   &    e Zd Zddddddddeeeef   gef   dz  deegef   dz  deegef   dz  deegef   dz  ded	eee	eef      gef   dz  d
df fdZ
edeeef   fd       Zedeeef   fd       Zdeeef   fdZded
efdZ xZS )FilesystemJSONDecoderNTobject_hookparse_float	parse_intparse_constantstrictobject_pairs_hookr3   r4   r5   r6   r7   r8   r   c                R    || _         t        | 	  | j                  |||||       y )Nr2   )original_object_hookr   __init__custom_object_hook)r   r3   r4   r5   r6   r7   r8   r   s          r    r;   zFilesystemJSONDecoder.__init__(   s7     %0!//#)/ 	 	
r!   dctc                     t        t              5  |d   }t        |      }t        |t              r|cd d d        S 	 d d d        y # 1 sw Y   y xY w)Nr   )r   	Exceptionr   
issubclassr   )r   r=   fqppath_clss       r    try_resolve_path_clsz*FilesystemJSONDecoder.try_resolve_path_cls=   sL    i e*C$S)H(H- ! 
 . !  ! s   "AAc                     t        t              5  d|v r+	 t        |d         }t        |t              r|cd d d        S 	 d d d        y # t        $ r d|v rt        |d         cY cd d d        S  w xY w# 1 sw Y   y xY w)Nr   protocol)r   r?   r   r@   r   r   )r   r=   fs_clss      r    try_resolve_fs_clsz(FilesystemJSONDecoder.try_resolve_fs_clsI   s    i |*3u:6F!&*<=% !  >	 !  ! !S(3C
ODD !  	 ! s-   A4A	A4	A1$A4/A11A44A=c                     d|v rF| j                  |      x}t        j                  |      S | j                  |      x} ||d         S | j                  | j	                  |      S |S )Nr   r   )rG   r   	from_dictrC   r:   )r   r=   obj_clss      r    r<   z(FilesystemJSONDecoder.custom_object_hookY   sw    C<22377D)33C8844S99Fs5z**$$0,,S11
r!   r"   c                 N   t        |t              r| j                  |      }t        |t              r3|j                         D ci c]  \  }}|| j	                  |       c}}S t        |t
        t        f      r|D cg c]  }| j	                  |       c}S |S c c}}w c c}w )zV
        Inverse function of :meth:`FilesystemJSONEncoder.make_serializable`.
        )r   dictr<   r'   unmake_serializablelisttupler)   s       r    rM   z)FilesystemJSONDecoder.unmake_serializablee   s     c4 ))#.Cc4 ?Byy{K{tq!At//22{KKcD%=)9<=AD,,Q/==
	 L=s   B?B")r   r   r,   r   rL   r   r   r&   rN   rO   r;   classmethodrC   rG   r<   rM   r.   r/   s   @r    r1   r1   '   s9    ?C37156:KO
 tCH~.34t;
 seSj)D0	

 SE3J'$.
 !#,t3
 
 $T%S/%:$;S$@ADH
 

* 	tCH~ 	 	 T#s(^  
d38n 
s s r!   r1   )jsoncollections.abcr   r   r   
contextlibr   pathlibr   typingr   r	   registryr   r   specr   JSONEncoderr   JSONDecoderr1    r!   r    <module>r[      sC     7 7     9 $!D,, !8ID,, Ir!   