o
    ii                     @  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__ n/var/www/html/eduruby.in/lip-sync/lip-sync-env/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!   Zopendir)r#   r0   r   r   r&   r&   r'   _mkdirI   s   
zOSFS._mkdirrecreatec                 C     | j |d|dS )NFr   rF   r#   r0   rG   r&   r&   r'   makedirM      zOSFS.makedirc                 C  rH   )NTr   rI   rJ   r&   r&   r'   makedirsP   rL   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&   detailsZst_birthtime)ZaccessedmodifiedsizetypecreatedrU   Z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   rN   infostat_resultrQ   Z	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 )Nrb    should be a directoryzDirectory not empty: rc   rd   )	r.   rmdirNotADirectoryErrorr   rf   errno	ENOTEMPTYr	   r   rg   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 existrj   zDestination Tr   z is not empty)r   r   r.   r9   r   r"   r   r=   parentr!   listrD   r	   r]   rk   rename)r#   rs   rt   r   Zsrc_pathZ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)   rG   r   r*   r   r8   )r0   r)   rN   rO   r*   r   )r0   r)   )rs   r)   rt   r)   r   r   )r0   r)   r*   r)   )r*   r)   )r|   
__module____qualname____doc__r   r.   r4   r9   r<   r>   rE   rF   rK   rM   ra   ri   ro   rr   rx   ry   r~   r   __classcell__r&   r&   r$   r'   r   "   s(    









r   )#
__future__r   rm   platformrp   rV   typingosr   pathlibr   _baser   _errorsr   r   r	   r
   r   r   r   _infor   _pathr   TYPE_CHECKINGcollections.abcr   r   r   Z_subfsr   systemr]   r   r&   r&   r&   r'   <module>   s$    $	