
    Wh                        d dl mZ d dlZd dlmZmZ ddlmZmZ ddl	m
Z
mZmZmZmZmZ ddlmZ ddlmZ ej(                  rd d	lmZmZmZmZmZmZ dd
lmZ ddlmZ  G d de      Zy)    )annotationsN)ABCabstractmethod   )copy_dir	copy_file)DestinationExistsDirectoryExpectedFileExpectedFilesystemClosed	NoSysPathResourceNotFound)dirnameBoundWalker)IOAny
CollectionIteratorSelfType)InfoSubFSc                     e Zd ZU dZdZded<   ed!d"d       Zed#d       Zed#d       Z	ed#d       Z
ed$d	       Zed%d&d
       Zed%d&d       Zed'd(d       Zed)d       Zed)d       Zed)d       Zed%d*d       Zd+dZd Zd,dZd-dZd Zd Zddd.dZ	 d'	 	 	 	 	 d/dZed0d       Zd1dZd2dZd%d3dZd%d4dZ d%d4d Z!y)5FSz+Abstract base class for custom filesystems.Fbool_closedc                     y N )selfpathmodekwargss       Y/var/www/html/jupyter_env/lib/python3.12/site-packages/fontTools/misc/filesystem/_base.pyopenzFS.open   s    FI    c                     y r    r!   r"   r#   s     r&   existsz	FS.exists!       ),r(   c                     y r    r!   r*   s     r&   isdirzFS.isdir$   s    (+r(   c                     y r    r!   r*   s     r&   isfilez	FS.isfile'   r,   r(   c                     y r    r!   r*   s     r&   listdirz
FS.listdir*   s    /2r(   c                     y r    r!   r"   r#   recreates      r&   makedirz
FS.makedir-   s    CFr(   c                     y r    r!   r4   s      r&   makedirszFS.makedirs0   s    DGr(   Nc                     y r    r!   r"   r#   
namespacess      r&   getinfoz
FS.getinfo3   s    UXr(   c                     y r    r!   r*   s     r&   removez	FS.remove6   r,   r(   c                     y r    r!   r*   s     r&   	removedirzFS.removedir9   s    ,/r(   c                     y r    r!   r*   s     r&   
removetreezFS.removetree<   s    -0r(   c                     y r    r!   )r"   srcdstcreates       r&   movedirz
FS.movedir?   s    ILr(   c                     t        d| d      )Nthe filesystem z has no system path)r   r*   s     r&   
getsyspathzFS.getsyspathB   s    /$1DEFFr(   c                    d| _         y )NTr   r"   s    r&   closezFS.closeE   s	    r(   c                    | j                   S r    rL   rM   s    r&   isclosedzFS.isclosedH   s    ||r(   c                    | S r    r!   rM   s    r&   	__enter__zFS.__enter__K   s    r(   c                $    | j                          y)NF)rN   )r"   exc_typeexctbs       r&   __exit__zFS.__exit__N   s    

r(   c                :    | j                   rt        d| d      y )NrI   z
 is closed)r   r   rM   s    r&   checkzFS.checkR   s"    <<"_THJ#GHH r(   )factoryc               (    |ddl m} |} || |      S )u+   Return a sub‑filesystem rooted at `path`.r   r   )_subfsr   )r"   r#   rZ   r   s       r&   opendirz
FS.opendirV   s    ?%GtT""r(   c                @      fd j                        D        S )Nc              3  L   K   | ]  }j                   d |         yw)/N)r<   ).0pr;   r#   r"   s     r&   	<genexpr>zFS.scandir.<locals>.<genexpr>a   s&     TAvQqc]J7Ts   !$)r2   r:   s   ```r&   scandirz
FS.scandir^   s     UdASTTr(   c                    t        |       S r    r   rM   s    r&   walkzFS.walkc   s    4  r(   c                r    | j                  |d      5 }|j                         cd d d        S # 1 sw Y   y xY w)Nrb)r'   read)r"   r#   fs      r&   	readbyteszFS.readbytesg   s0    YYtT" 	a668	 	 	s   -6c                t    | j                  |d      5 }|j                  |       d d d        y # 1 sw Y   y xY w)Nwb)r'   write)r"   r#   datarj   s       r&   
writebyteszFS.writebytesk   s2    YYtT" 	aGGDM	 	 	s   .7c                |    |s| j                  |      ry| j                  |d      5  	 d d d        y# 1 sw Y   yxY w)NFrm   T)r+   r'   )r"   r#   wipes      r&   rF   z	FS.createo   s:    D)YYtT" 			s   2;c                F   | j                  |      st        |d      | j                  |      st        d|d      |s | j                  |      rt	        d|d      | j                  t        |            st        dt        |      d      t        | || |       y )N does not existpath z should be a filezdestination z already exists should be a directory)	r+   r   r0   r   r	   r.   r   r
   r   )r"   src_pathdst_path	overwrites       r&   copyzFS.copyv   s    {{8$"h\#ABBX&xl2CDEET[[2#l8,o$NOOzz'(+,#eGH,=+@@V$WXX$$1r(   c                    |s| j                  |      st        |d      | j                  |      st        d|d      t	        | || |       y )Nrt   ru   rv   )r+   r   r.   r
   r   )r"   rw   rx   rF   s       r&   copydirz
FS.copydir   sQ    dkk(3"h\#ABBzz(##eH<7M$NOOxx0r(   )rh   )r#   strr$   r}   returnzIO[Any])r#   r}   r~   r   )r#   r}   r~   z	list[str])F)r#   r}   r5   r   r~   r   r    )r#   r}   r;   Collection[str] | Noner~   r   )r#   r}   r~   None)rD   r}   rE   r}   rF   r   r~   r   )r#   r}   r~   r}   )r~   r   )r~   r   )r#   r}   rZ   zType[SubFS] | Noner~   r   )r#   r}   r;   r   r~   zIterator[Info])r~   r   )r#   r}   r~   bytes)r#   r}   ro   r   )r#   r}   rr   r   )rw   r}   rx   r}   )"__name__
__module____qualname____doc__r   __annotations__r   r'   r+   r.   r0   r2   r6   r8   r<   r>   r@   rB   rG   rJ   rN   rP   rR   rW   rY   r]   rd   propertyrf   rk   rp   rF   rz   r|   r!   r(   r&   r   r      s7   5GTI I, ,+ +, ,2 2F FG GX X, ,/ /0 0L LGI CG # ?CUU%;U	U
 ! !	21r(   r   ) 
__future__r   typingabcr   r   _copyr   r   _errorsr	   r
   r   r   r   r   _pathr   _walkr   TYPE_CHECKINGr   r   r   r   r   r   _infor   r\   r   r   r!   r(   r&   <module>r      sF    "  # &   	@@m1 m1r(   