
    |rh(                        d dl mZ 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 d dlmZmZ d dlmZ d d	lmZ d d
lmZ  ej*                  d      Z G d de      Z G d de      Zy)    )annotationsN)datetimetimezone)	ENOTEMPTY)BytesIO)PurePathPureWindowsPath)AnyClassVar)AbstractFileSystem)LocalFileSystem)stringify_pathzfsspec.memoryfsc                      e Zd ZU dZi Zded<   dgZdZdZe	d        Z
ddZdd	Zdd
ZddZd Zd Z	 	 	 	 ddZd ZddZd Zd Zd Zd ZddZy)MemoryFileSystemzA filesystem based on a dict of BytesIO objects

    This is a global filesystem so instances of this class all point to the same
    in memory filesystem.
    zClassVar[dict[str, Any]]store memory/c                (   t        |t              r0t        |t              rt        j                  |      S t        |      }|j                  d      }d|v sd|v r|j                  d      S |j                  d      j                  d      }|rd|z   S dS )Nz	memory://z::z://r   r   )	
isinstancer   r	   r   _strip_protocolr   removeprefixrstriplstrip)clspaths     p/var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/fsspec/implementations/memory.pyr   z MemoryFileSystem._strip_protocol   s    dH%$0&66t<<%d+  -4<5D=;;s##{{3&&s+!sTz)r)    c                   | j                  |      }|| j                  v rI|s|gS || j                  |   j                  d| j                  |   j                  j	                         dgS t               }|dz   }g }t        | j                        D ]  }|j                  |      sd|t        |      d  vrS|j                  || j                  |   j                  d| j                  |   j                  j	                         d       xt        |      t        |      kD  s||t        |      d  j                  dd      d   z   }||vs|xs g }|j                  |ddd       |j                  |        | j                  D ]  }|j                  |      sd|t        |      d  vr,||vs*|j                  |ddd       |j                  |       Q||t        |      d  j                  dd      d   z   }||vsz|j                  |ddd       |j                  |        |s|| j                  v rg S t        |      |r|S t        |D 	cg c]  }	|	d   	 c}	      S c c}	w )	Nfilenamesizetypecreatedr      r   	directoryr"   r#   r$   r"   )r   r   r#   r%   	timestampsettuple
startswithlenappendsplitaddpseudo_dirsFileNotFoundErrorsorted)
selfr   detailkwargspathsstarteroutp2ppathfs
             r   lszMemoryFileSystem.ls+   sa   ##D)4::v ! JJt,11"#zz$/77AAC	  *

# 	)B}}W%bW00JJ$&$(JJrN$7$7$*'+zz"~'='='G'G'I	 Ws7|+#bW&8&>&>sA&Fq&IIEE)!iR

(-()(3 		%(1	)2 "" 	)B}}W%bW00

B;#OP		" $bW&8&>&>sA&Fq&IIEE)

E1k#RS		%(	) t'''	#D))J#.Qqy.//.s   I!c                ,   | j                  |      }|| j                  v s|| j                  v rt        |      | j	                  |      j                  d      r:| j                  | j	                  |            rt        | j	                  |            |rD| j	                  |      j                  d      r$	  | j                  | j	                  |      |fi | |r+|| j                  vr| j                  j                  |       y y y # t        $ r Y 9w xY w)Nr   )
r   r   r1   FileExistsError_parentstripisfileNotADirectoryErrormkdirr.   )r4   r   create_parentsr6   s       r   rD   zMemoryFileSystem.mkdirk   s    ##D)4::)9)9!9!$''<<##C(T[[d9K-L$T\\$%788dll4066s;

4<<-~HH D 0 00##D) 14 # s   6#D 	DDc                P    	 | j                  |d       y # t        $ r |s Y y w xY w)NT)rE   )rD   r?   )r4   r   exist_oks      r   makedirszMemoryFileSystem.makedirsy   s1    	JJtDJ1 	 	s    %%c                >    |dk(  rdnd}| j                  |||       y)zSSet the bytes of given file

        Avoids copies of the data if possible
        createxbwb)modedataN)open)r4   r   valuerM   r6   s        r   	pipe_filezMemoryFileSystem.pipe_file   s$    
 x'tT		$T	.r   c                    | j                  |      }|dk(  ry || j                  v r>| j                  |      s| j                  j                  |       y t	        t
        d|      t        |      )Nr   zDirectory not empty)r   r1   r=   removeOSErrorr   r2   r4   r   s     r   rmdirzMemoryFileSystem.rmdir   sd    ##D)2:4###774=  ''-i)>EE#D))r   c                j   t         j                  d       | j                        | j                  v s4t	        fdt        | j                        | j                  z   D              rdddS | j                  v r+| j                     }|j                  dt        |dd       dS t              )	Nzinfo: %sc              3  F   K   | ]  }|j                  d z           yw)r   N)r,   ).0pr   s     r   	<genexpr>z(MemoryFileSystem.info.<locals>.<genexpr>   s#      +
)*ALL$+
s   !r   r'   r(   r    r%   r!   )
loggerdebugr   r1   anylistr   r#   getattrr2   )r4   r   r6   filelikes    `  r   infozMemoryFileSystem.info   s    Z&##D)4###s +
.24::.>AQAQ.Q+
 (
 # 
 TZZzz$'H "8Y=	  $D))r   Nc                   | j                  |      }d|v r| j                  |      rt        || j                  v rt	        |      |}t        |      dkD  r<| j                  |      }| j                  |      rt        |      t        |      dkD  r<|dv rT|| j                  v r;| j                  |   }|dk(  r|j                  dd       |S |j                  d       |S t        |      |dv rV|dk(  r| j                  |      rt        t        | ||j                  d	            }	| j                  s|	j                          |	S | j                  j                   }
t#        d
|
 d|      )Nxr&   )rbabzr+brf   r      >   rL   rK   rK   rN   zunsupported file mode for z: )r   existsr?   r1   IsADirectoryErrorr-   r@   rB   r   seekr2   
MemoryFileget_intranscommit	__class____name__
ValueError)r4   r   rM   
block_size
autocommitcache_optionsr6   parentr<   mr"   s              r   _openzMemoryFileSystem._open   sX    ##D)$;4;;t,!!4####D))&kAo\\&)F{{6"%f-- &kAo &&tzz!JJt$4<FF1aL  FF1I'--\!t|D 1%%4vzz&'9:A==
H>>**D9$r$JKKr   c                b   | j                  |      }| j                  |      }| j                  |      r6t        | || j                  |   j	                               | j                  |<   y | j                  |      r+|| j                  vr| j                  j                  |       y y t        |      N)	r   rB   rk   r   getvalueisdirr1   r.   r2   )r4   path1path2r6   s       r   cp_filezMemoryFileSystem.cp_file   s    $$U+$$U+;;u *eTZZ.779!DJJu ZZD,,,  ''. - $E**r   c                    t         j                  d|       | j                  |      }	 t        | j                  |   j                         ||       S # t        $ r}t        |      |d }~ww xY w)Nzcat: %s)r\   r]   r   bytesr   	getbufferKeyErrorr2   )r4   r   startendr6   es         r   cat_filezMemoryFileSystem.cat_file   sf    Y%##D)	1D)335eC@AA 	1#D)q0	1s   (A 	A,A''A,c                |    | j                  |      }	 | j                  |= y # t        $ r}t        |      |d }~ww xY wry   )r   r   r   r2   r4   r   r   s      r   _rmzMemoryFileSystem._rm   s@    ##D)	1

4  	1#D)q0	1s   ! 	;6;c                    | j                  |      }	 | j                  |   j                  S # t        $ r}t	        |      |d }~ww xY wry   )r   r   modifiedr   r2   r   s      r   r   zMemoryFileSystem.modified   sI    ##D)	1::d#,,, 	1#D)q0	1   , 	AAAc                    | j                  |      }	 | j                  |   j                  S # t        $ r}t	        |      |d }~ww xY wry   )r   r   r%   r   r2   r   s      r   r%   zMemoryFileSystem.created   sI    ##D)	1::d#+++ 	1#D)q0	1r   c                @    | j                  |      }|| j                  v S ry   )r   r   rU   s     r   rB   zMemoryFileSystem.isfile   s!    ##D)tzz!!r   c                b   t        |t              r| j                  |      }n|D cg c]  }| j                  |       }}| j                  |||      }t	        |      D ]H  }| j                  |      r| j                  |       &| j                  |      s8| j                  |       J y c c}w )N)	recursivemaxdepth)	r   strr   expand_pathreversedrB   rm_filerh   rV   )r4   r   r   r   rZ   r7   s         r   rmzMemoryFileSystem.rm  s    dC ''-D59:D((+:D:  X N% 
	A{{1~Q
 [[^

1
	 ;s   B,)T)F)	overwrite)re   NTN)NN)FN)rp   
__module____qualname____doc__r   __annotations__r1   protocolroot_markerclassmethodr   r=   rD   rH   rQ   rV   rb   rw   r~   r   r   r   r%   rB   r    r   r   r   r      s     ')E#($KHK* *>0@*/**2 (LT+1111"r   r   c                  L     e Zd ZdZd fd	Zed        Zd Zd Zd Z	d Z
 xZS )	rk   zA BytesIO which can't close and works as a context manager

    Can initialise with data. Each path should only be active once at any moment.

    No need to provide fs, path if auto-committing (default)
    c                8   t         j                  d|       || _        || _        t	        j
                  t        j                        | _        t	        j
                  t        j                        | _	        |r!t        | -  |       | j                  d       y y )Nzopen file %stzr   )r\   r]   fsr   r   nowr   utcr%   r   super__init__rj   )r4   r   r   rN   ro   s       r   r   zMemoryFile.__init__  sg    ^T*	||x||4 5GT"IIaL r   c                6    | j                         j                  S ry   )r   nbytesr4   s    r   r#   zMemoryFile.size(  s    ~~&&&r   c                    | S ry   r   r   s    r   	__enter__zMemoryFile.__enter__,  s    r   c                     y ry   r   r   s    r   closezMemoryFile.close/      r   c                     y ry   r   r   s    r   discardzMemoryFile.discard2  r   r   c                    | | j                   j                  | j                  <   t        j                  t
        j                        | _        y )Nr   )r   r   r   r   r   r   r   r   r   s    r   rn   zMemoryFile.commit5  s,    #'dii  5r   )NNN)rp   r   r   r   r   propertyr#   r   r   r   rn   __classcell__)ro   s   @r   rk   rk     s5     ' '6r   rk   )
__future__r   loggingr   r   errnor   ior   pathlibr   r	   typingr
   r   fsspecr   fsspec.implementations.localr   fsspec.utilsr   	getLoggerr\   r   rk   r   r   r   <module>r      sR    "  '   -   % 8 '			,	-B) BJ!6 !6r   