o
    _h                     @  s   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rUd 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 deZdS )    )annotationsN)ABCabstractmethod   )copy_dir	copy_file)DestinationExistsDirectoryExpectedFileExpectedFilesystemClosed	NoSysPathResourceNotFound)dirnameBoundWalker)IOAny
CollectionIteratorSelfType)InfoSubFSc                   @  sj  e Zd ZU dZdZded< edUdVddZedWddZedWddZ	edWddZ
edXddZedYdZddZedYdZddZed[d\d d!Zed]d#d$Zed]d%d&Zed]d'd(ZedYd^d,d-Zd_d.d/Zd0d1 Zd`d2d3Zdad5d6Zd7d8 Zd9d: Zdd;dbd>d?Z	d[dcdAdBZedddDdEZdedGdHZdfdJdKZdYdgdMdNZdYdhdQdRZ dYdhdSdTZ!dS )iFSz+Abstract base class for custom filesystems.Fbool_closedrbpathstrmodereturnIO[Any]c                 K     d S N )selfr   r    kwargsr%   r%   S/var/www/html/myenv/lib/python3.10/site-packages/fontTools/misc/filesystem/_base.pyopen      zFS.openc                 C  r#   r$   r%   r&   r   r%   r%   r(   exists!   r*   z	FS.existsc                 C  r#   r$   r%   r+   r%   r%   r(   isdir$   r*   zFS.isdirc                 C  r#   r$   r%   r+   r%   r%   r(   isfile'   r*   z	FS.isfile	list[str]c                 C  r#   r$   r%   r+   r%   r%   r(   listdir*   r*   z
FS.listdirrecreater   c                 C  r#   r$   r%   r&   r   r1   r%   r%   r(   makedir-   r*   z
FS.makedirc                 C  r#   r$   r%   r2   r%   r%   r(   makedirs0   r*   zFS.makedirsN
namespacesCollection[str] | Noner   c                 C  r#   r$   r%   r&   r   r5   r%   r%   r(   getinfo3   r*   z
FS.getinfoNonec                 C  r#   r$   r%   r+   r%   r%   r(   remove6   r*   z	FS.removec                 C  r#   r$   r%   r+   r%   r%   r(   	removedir9   r*   zFS.removedirc                 C  r#   r$   r%   r+   r%   r%   r(   
removetree<   r*   zFS.removetreesrcdstcreatec                 C  r#   r$   r%   )r&   r=   r>   r?   r%   r%   r(   movedir?   r*   z
FS.movedirc                 C  s   t d| d)Nthe filesystem z has no system path)r   r+   r%   r%   r(   
getsyspathB   s   zFS.getsyspathc                 C  s
   d| _ d S )NTr   r&   r%   r%   r(   closeE   s   
zFS.closec                 C  s   | j S r$   rC   rD   r%   r%   r(   isclosedH   s   zFS.isclosedr   c                 C  s   | S r$   r%   rD   r%   r%   r(   	__enter__K   r*   zFS.__enter__c                 C  s   |    dS )NF)rE   )r&   exc_typeexctbr%   r%   r(   __exit__N   s   zFS.__exit__c                 C  s   | j rtd| dd S )NrA   z
 is closed)r   r   rD   r%   r%   r(   checkR   s   zFS.check)factoryrM   Type[SubFS] | Nonec                C  s"   |du rddl m} |}|| |S )u+   Return a sub‑filesystem rooted at `path`.Nr   r   )_subfsr   )r&   r   rM   r   r%   r%   r(   opendirV   s   
z
FS.opendirIterator[Info]c                   s    fdd D S )Nc                 3  s&    | ]}  d |  V  qdS )/N)r8   ).0pr5   r   r&   r%   r(   	<genexpr>a   s   $ zFS.scandir.<locals>.<genexpr>)r0   r7   r%   rU   r(   scandir^   s   z
FS.scandirr   c                 C  s   t | S r$   r   rD   r%   r%   r(   walkc   s   zFS.walkbytesc                 C  s8   |  |d}| W  d    S 1 sw   Y  d S )Nr   )r)   read)r&   r   fr%   r%   r(   	readbytesg   s   $zFS.readbytesdatac                 C  s<   |  |d}|| W d    d S 1 sw   Y  d S )Nwb)r)   write)r&   r   r]   r[   r%   r%   r(   
writebytesk   s   "zFS.writebyteswipec                 C  sD   |s	|  |r	dS | |d	 W d    dS 1 sw   Y  dS )NFr^   T)r,   r)   )r&   r   ra   r%   r%   r(   r?   o   s   
z	FS.createsrc_pathdst_pathc                 C  s   |  |st|d| |std|d|s(|  |r(td|d| t|s9tdt|dt| || | d S )N does not existpath z should be a filezdestination z already exists should be a directory)	r,   r   r.   r
   r   r-   r   r	   r   )r&   rb   rc   	overwriter%   r%   r(   copyv   s   

zFS.copyc                 C  sH   |s|  |st|d| |std|dt| || | d S )Nrd   re   rf   )r,   r   r-   r	   r   )r&   rb   rc   r?   r%   r%   r(   copydir   s
   
z
FS.copydir)r   )r   r   r    r   r!   r"   )r   r   r!   r   )r   r   r!   r/   )F)r   r   r1   r   r!   r   r$   )r   r   r5   r6   r!   r   )r   r   r!   r9   )r=   r   r>   r   r?   r   r!   r9   )r   r   r!   r   )r!   r   )r!   r   )r   r   rM   rN   r!   r   )r   r   r5   r6   r!   rQ   )r!   r   )r   r   r!   rY   )r   r   r]   rY   )r   r   ra   r   )rb   r   rc   r   )"__name__
__module____qualname____doc__r   __annotations__r   r)   r,   r-   r.   r0   r3   r4   r8   r:   r;   r<   r@   rB   rE   rF   rG   rK   rL   rP   rW   propertyrX   r\   r`   r?   rh   ri   r%   r%   r%   r(   r      sV   
 


	

r   ) 
__future__r   typingabcr   r   _copyr   r   _errorsr   r	   r
   r   r   r   _pathr   _walkr   TYPE_CHECKINGr   r   r   r   r   r   _infor   rO   r   r   r%   r%   r%   r(   <module>   s      