
    Whi                       d dl mZ d dlZd dlZd dlZd dlZd dlZd dlm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 ddlmZ dd	lmZ ej2                  rd d
lmZ d dlmZmZ ddlmZ  ej@                         dk(  Z! G d de      Z"y)    )annotationsN)PathLike)Path   )FS)CreateFailedDirectoryExpectedDirectoryNotEmptyFileExpectedIllegalDestinationResourceErrorResourceNotFound)Info)isbase)
Collection)IOAny)SubFSWindowsc                       e Zd ZdZdd fdZddZdddZddZddZddZ	ddZ
ddd	Zddd
ZdddZdddZd dZd dZd dZdd!dZd"dZd#dZd#dZ xZS )$OSFSz^Filesystem for a directory on the local disk.

    A thin layer on top of `pathlib.Path`.
    c                    t         |           t        |      j                         | _        |r| j                  j                  dd       y | j                  j                         st        d|d      y )NTparentsexist_okzunable to create OSFS: z% does not exist or is not a directory)super__init__r   resolve_rootmkdiris_dirr   )selfrootcreate	__class__s      Y/var/www/html/jupyter_env/lib/python3.12/site-packages/fontTools/misc/filesystem/_osfs.pyr   zOSFS.__init__(   sk    $Z'')
JJTD9::$$&"-dX5Z[  '    c                z    | j                          | j                  |j                  d      z  j                         S )N/)checkr   stripr   )r"   rel_paths     r&   _absz	OSFS._abs3   s,    



X^^C0099;;r'   c                ~    	  | j                  |      j                  |fi |S # t        $ r t        d|      w xY w)NNo such file or directory: )r-   openFileNotFoundErrorr   )r"   pathmodekwargss       r&   r0   z	OSFS.open7   sL    	K'499T?''777  	K"%@#IJJ	Ks   !$ <c                @    | j                  |      j                         S N)r-   existsr"   r2   s     r&   r7   zOSFS.exists=       yy%%''r'   c                @    | j                  |      j                         S r6   )r-   r!   r8   s     r&   isdirz
OSFS.isdir@   r9   r'   c                @    | j                  |      j                         S r6   )r-   is_filer8   s     r&   isfilezOSFS.isfileC   s    yy&&((r'   c                z    | j                  |      j                         D cg c]  }|j                   c}S c c}w r6   )r-   iterdirname)r"   r2   ps      r&   listdirzOSFS.listdirF   s+     $		$ 7 7 9:1:::s   8c                h    | j                  |      j                  ||       | j                  |      S )Nr   )r-   r    opendir)r"   r2   r   r   s       r&   _mkdirzOSFS._mkdirI   s,    		$gA||D!!r'   c                *    | j                  |d|      S )NFr   rF   r"   r2   recreates      r&   makedirzOSFS.makedirM   s    {{4{BBr'   c                *    | j                  |d|      S )NTr   rH   rI   s      r&   makedirszOSFS.makedirsP   s    {{4{AAr'   c           	        | j                  |      }|j                         st        dt        |            d|j                  |j                         di}|xs d}d|v r||j                         }|j                  |j                  |j                  t        j                  |j                        t        |dd       dx}|d<   t        rdnd	}|j                  ||<   t        |      S )
Nr/   basic)rA   r!    detailsst_birthtime)accessedmodifiedsizetypecreatedrW   metadata_changed)r-   r7   r   strrA   r!   statst_atimest_mtimest_sizeS_IFMTst_modegetattr_WINDOWS_PLATFORMst_ctimer   )r"   r2   
namespacesinfostat_resultrQ   	ctime_keys          r&   getinfozOSFS.getinfoS   s    yy{{}"%@T#NOO		++-
  %2

"))+K'00'00#++K$7$78";E) Gd9o &7	<NI!,!5!5GIDzr'   c                ,   | j                  |      }	 |j                          y # t        $ r t        dt	        |            t
        $ rG}|j                         rt        dt	        |      d      t        dt	        |      d|       d }~ww xY w)Nr/   path z should be a fileunable to remove : )	r-   unlinkr1   r   rY   OSErrorr!   r   r   r"   r2   es      r&   removezOSFS.removek   s    yy	LKKM  	P"%@T#NOO 	L{{}"U3t9-7H#IJJ#&7D	}Bqc$JKK		Ls   $ (BABBc                   	 | j                  |      j                          y # t        $ r t        d|d      t        $ rA}|j
                  t
        j                  k(  rt        d|      t        d|d|       d }~ww xY w)Nri    should be a directoryzDirectory not empty: rj   rk   )	r-   rmdirNotADirectoryErrorr	   rm   errno	ENOTEMPTYr
   r   rn   s      r&   	removedirzOSFS.removedirw   s    	GIIdO!!#! 	L#eD83I$JKK 	Gww%//)'*?x(HII#&7xr!$EFF		Gs   "  B<A>>Bc                L    t        j                  | j                  |             y r6   )shutilrmtreer-   r8   s     r&   
removetreezOSFS.removetree   s    diio&r'   c                z   t        ||      rt        d|d|      | j                  |      }|j                         st	        d|d      |j                         st        d|d      | j                  |      }|s|j                         st	        d|d      |j                         rt        d|d      |r|j                  j                  dd       |j                         r>t        |j                               rt        d|d	      t        r|j                          |j                  |       y )
Nzcannot move z to zSource z does not existrr   zDestination Tr   z is not empty)r   r   r-   r7   r   r!   r	   r=   parentr    listr@   r
   ra   rs   rename)r"   src_dirdst_dirr$   src_pathdst_paths         r&   movedirzOSFS.movedir   s"   '7#$|G;d7+%NOO99W% "WWK#GHH"#gg[8N$OPP99W%hoo/"\'O#LMM#l7+=S$TUUOO!!$!>??H$$&'',wk(OPP"  !r'   c                6    t        | j                  |            S r6   )rY   r-   r8   s     r&   
getsyspathzOSFS.getsyspath   s    499T?##r'   c                `    | j                   j                   dt        | j                        dS )N())r%   __name__rY   r   r"   s    r&   __repr__zOSFS.__repr__   s)    ..))*!C

O+>a@@r'   c                l    d| j                   j                  j                          d| j                   dS )N<z 'z'>)r%   r   lowerr   r   s    r&   __str__zOSFS.__str__   s/    4>>**00232djj\DDr'   )F)r#   zstr | PathLiker$   bool)r,   rY   returnr   )rb)r2   rY   r3   rY   r   zIO[Any])r2   rY   r   r   )r2   rY   r   z	list[str])FF)r2   rY   r   r   r   r   r   r   )r2   rY   rJ   r   r   r   r6   )r2   rY   rc   zCollection[str] | Noner   r   )r2   rY   )r   rY   r   rY   r$   r   )r2   rY   r   rY   )r   rY   )r   
__module____qualname____doc__r   r-   r0   r7   r;   r>   rC   rF   rK   rM   rg   rp   rw   r{   r   r   r   r   __classcell__)r%   s   @r&   r   r   "   si    
	<K(();"CB0
L	G'"0$AEr'   r   )#
__future__r   ru   platformry   rZ   typingosr   pathlibr   _baser   _errorsr   r	   r
   r   r   r   r   _infor   _pathr   TYPE_CHECKINGcollections.abcr   r   r   _subfsr   systemra   r   rP   r'   r&   <module>r      so    "            	* $HOO%2 BE2 BEr'   