o
    _hi                     @  s   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jrad d
lmZ d dlmZmZ ddlmZ e  dkZ!G dd deZ"dS )    )annotationsN)PathLike)Path   )FS)CreateFailedDirectoryExpectedDirectoryNotEmptyFileExpectedIllegalDestinationResourceErrorResourceNotFound)Info)isbase)
Collection)IOAny)SubFSWindowsc                      s   e Zd ZdZd>d? fddZd@ddZdAdBddZdCddZdCddZdCddZ	dDddZ
dEdFd!d"Zd>dGd$d%Zd>dGd&d'ZdHdId,d-ZdJd.d/ZdJd0d1ZdJd2d3Zd>dKd6d7ZdLd8d9ZdMd:d;ZdMd<d=Z  ZS )NOSFSz^Filesystem for a directory on the local disk.

    A thin layer on top of `pathlib.Path`.
    Frootstr | PathLikecreateboolc                   sN   t    t| | _|r| jjddd d S | j s%td|dd S )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   )selfr   r   	__class__ S/var/www/html/myenv/lib/python3.10/site-packages/fontTools/misc/filesystem/_osfs.pyr   (   s   


zOSFS.__init__rel_pathstrreturnr   c                 C  s   |    | j|d  S )N/)checkr    stripr   )r#   r(   r&   r&   r'   _abs3   s   z	OSFS._absrbpathmodeIO[Any]c                 K  s8   z|  |j|fi |W S  ty   td|w )NNo such file or directory: )r.   openFileNotFoundErrorr   )r#   r0   r1   kwargsr&   r&   r'   r4   7   s
   z	OSFS.openc                 C     |  | S N)r.   existsr#   r0   r&   r&   r'   r9   =      zOSFS.existsc                 C  r7   r8   )r.   r"   r:   r&   r&   r'   isdir@   r;   z
OSFS.isdirc                 C  r7   r8   )r.   is_filer:   r&   r&   r'   isfileC   r;   zOSFS.isfile	list[str]c                 C  s   dd |  | D S )Nc                 S  s   g | ]}|j qS r&   )name).0pr&   r&   r'   
<listcomp>G   s    z OSFS.listdir.<locals>.<listcomp>)r.   iterdirr:   r&   r&   r'   listdirF   s   zOSFS.listdirr   r   r   c                 C  s   |  |j||d | |S )Nr   )r.   r!   opendir)r#   r0   r   r   r&   r&   r'   _mkdirI   s   
zOSFS._mkdirrecreatec                 C     | j |d|dS )NFr   rG   r#   r0   rH   r&   r&   r'   makedirM      zOSFS.makedirc                 C  rI   )NTr   rJ   rK   r&   r&   r'   makedirsP   rM   zOSFS.makedirsN
namespacesCollection[str] | Noner   c                 C  s   |  |}| stdt|d|j| di}|pd}d|v rJ| }|j|j|j	t
|jt|dd d }|d< trCdnd	}|j||< t|S )
Nr3   basic)r@   r"   r&   detailsst_birthtime)accessedmodifiedsizetypecreatedrX   metadata_changed)r.   r9   r   r)   r@   r"   statst_atimest_mtimest_sizeS_IFMTst_modegetattr_WINDOWS_PLATFORMst_ctimer   )r#   r0   rO   infostat_resultrR   	ctime_keyr&   r&   r'   getinfoS   s(   



zOSFS.getinfoc              
   C  s   |  |}z|  W d S  ty   tdt| tyA } z| r1tdt|dtdt|d| d }~ww )Nr3   path z should be a fileunable to remove : )	r.   unlinkr5   r   r)   OSErrorr"   r
   r   r#   r0   er&   r&   r'   removek   s   
zOSFS.removec              
   C  sx   z
|  |  W d S  ty   td|d ty; } z|jtjkr-td|td|d| d }~ww )Nrg    should be a directoryzDirectory not empty: rh   ri   )	r.   rmdirNotADirectoryErrorr   rk   errno	ENOTEMPTYr	   r   rl   r&   r&   r'   	removedirw   s   zOSFS.removedirc                 C  s   t | | d S r8   )shutilrmtreer.   r:   r&   r&   r'   
removetree   s   zOSFS.removetreesrc_dirdst_dirc                 C  s   t ||rtd|d|| |}| s td|d| s,td|d| |}|s?| s?td|d| rKtd|d|rU|jj	ddd | rmt
| rgtd|d	trm|  || d S )
Nzcannot move z to zSource z does not existro   zDestination Tr   z is not empty)r   r   r.   r9   r   r"   r   r=   parentr!   listrD   r	   ra   rp   rename)r#   rx   ry   r   src_pathdst_pathr&   r&   r'   movedir   s(   


zOSFS.movedirc                 C  s   t | |S r8   )r)   r.   r:   r&   r&   r'   
getsyspath   r;   zOSFS.getsyspathc                 C  s   | j j dt| jdS )N())r%   __name__r)   r    r#   r&   r&   r'   __repr__   s   zOSFS.__repr__c                 C  s   d| j j  d| j dS )N<z 'z'>)r%   r   lowerr    r   r&   r&   r'   __str__   s   zOSFS.__str__)F)r   r   r   r   )r(   r)   r*   r   )r/   )r0   r)   r1   r)   r*   r2   )r0   r)   r*   r   )r0   r)   r*   r?   )FF)r0   r)   r   r   r   r   r*   r   )r0   r)   rH   r   r*   r   r8   )r0   r)   rO   rP   r*   r   )r0   r)   )rx   r)   ry   r)   r   r   )r0   r)   r*   r)   )r*   r)   )r   
__module____qualname____doc__r   r.   r4   r9   r<   r>   rE   rG   rL   rN   rf   rn   rt   rw   r   r   r   r   __classcell__r&   r&   r$   r'   r   "   s(    









r   )#
__future__r   rr   platformru   rZ   typingosr   pathlibr   _baser   _errorsr   r   r	   r
   r   r   r   _infor   _pathr   TYPE_CHECKINGcollections.abcr   r   r   _subfsr   systemra   r   r&   r&   r&   r'   <module>   s$    $	