o
    _h                     @  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Zd dlmZ ddl	m
Z
 ddlmZmZmZ ddlmZ ddlmZmZmZmZ dd	lmZ ejrcd d
lmZ d dlmZmZ ddlmZ G dd de
ZG dd de
Z G dd deZ!dS )    )annotationsN)datetime   )FS)FileExpectedResourceNotFoundResourceReadOnly)Info)dirnameforcedirnormpathrelpath)TempFS)
Collection)IOAny)SubFSc                   @  s6   e Zd ZdZ	ddd
dZejr	ddddZdS dS )ZipFSzRead and write zip files.Futf-8filestr | os.PathLikewriteboolencodingstrc                 C  s   |rt ||S t||S N)
WriteZipFS	ReadZipFS)clsr   r   r    r   T/var/www/html/myenv/lib/python3.10/site-packages/fontTools/misc/filesystem/_zipfs.py__new__   s   

zZipFS.__new__c                 C  s   d S r   r   )selfr   r   r   r   r   r    __init__%   s   zZipFS.__init__N)Fr   )r   r   r   r   r   r   )__name__
__module____qualname____doc__r!   typingTYPE_CHECKINGr#   r   r   r   r    r      s    r   c                      s   e Zd ZdZd?d@ fddZdAd
dZdAddZdBddZedCddZ	 fddZ
dDdEddZdFddZdFdd ZdFd!d"ZdBd#d$ZdGdHd(d)ZdGdHd*d+ZdId,d-ZdId.d/ZdId0d1ZdGdJd5d6ZdKd8d9ZdLdMd=d>Z  ZS )Nr   zA readable zip file.r   r   r   r   r   c                   s4   t    t|| _|| _t|d| _d | _	d S )Nr)
superr#   osfspath_filer   zipfileZipFile_zip_directory_fsr"   r   r   	__class__r   r    r#   .   s
   

zReadZipFS.__init__returnc                 C     d| j dS )Nz
ReadZipFS()r.   r"   r   r   r    __repr__5      zReadZipFS.__repr__c                 C     d| j  dS )Nz<zipfs ''>r9   r:   r   r   r    __str__8   r<   zReadZipFS.__str__pathc                 C  s$   t t|}| j|rt|}|S )z"Convert a path to a zip file name.)r   r   
_directoryisdirr   r"   r@   r   r   r    _path_to_zip_name;   s   zReadZipFS._path_to_zip_namer   c                 C  sf   | j d u r0t  | _ }| j D ]}|}|dr!|j|dd q|jt|dd || q| j S )N/T)recreate)r2   r   r1   namelistendswithmakedirsr
   create)r"   _fszip_nameresource_namer   r   r    rA   B   s   

zReadZipFS._directoryc                   s4   t t|   | j  | jd ur| j  d S d S r   )r+   r   closer1   r2   r:   r4   r   r    rN   O   s
   

zReadZipFS.closeN
namespacesCollection[str] | Noner	   c                 C  s   |pd}i }|dkr ddd|d< d|v rdt ji|d< t|S | j|}|j|jd|d< d|v rh| |}z| j|}W n tyL   Y t|S w d|v rh|j	t
|jrZt jnt jt|j  d	|d< t|S )
Nr   rE    T)nameis_dirbasicdetailstype)sizerV   modified)statS_IFDIRrA   getinforR   rS   rD   r1   KeyError	file_sizeintS_IFREGr   	date_time	timestampr	   )r"   r@   rO   raw_info
basic_inforL   zip_infor   r   r    r[   U   s2   

zReadZipFS.getinfor   c                 C     |    | j|S r   )checkrA   existsrC   r   r   r    rg   s      zReadZipFS.existsc                 C  re   r   )rf   rA   rB   rC   r   r   r    rB   w   rh   zReadZipFS.isdirc                 C  re   r   )rf   rA   isfilerC   r   r   r    ri   {   rh   zReadZipFS.isfilec                 C  re   r   )rf   rA   listdirrC   r   r   r    rj      rh   zReadZipFS.listdirFrF   r   c                 C     |    t|r   rf   r   r"   r@   rF   r   r   r    makedir      zReadZipFS.makedirc                 C  rk   r   rl   rm   r   r   r    rI      ro   zReadZipFS.makedirsc                 C  rk   r   rl   rC   r   r   r    remove   ro   zReadZipFS.removec                 C  rk   r   rl   rC   r   r   r    	removedir   ro   zReadZipFS.removedirc                 C  rk   r   rl   rC   r   r   r    
removetree   ro   zReadZipFS.removetreesrcdstrJ   c                 C  rk   r   rl   )r"   rs   rt   rJ   r   r   r    movedir   ro   zReadZipFS.movedirbytesc                 C  s6   |    | j|st|| |}| j|}|S r   )rf   rA   ri   r   rD   r1   read)r"   r@   rL   	zip_bytesr   r   r    	readbytes   s   
zReadZipFS.readbytesrbmodeIO[Any]c                   s   |    | j|rt|d d }|dkr&| j|s&td|t fdddD r5t|| |}| j	
||}d v rM|rKtd	|S tj|fi |S )
Nz is a directoryr   r*   zNo such file or directory: c                 3  s    | ]}| v V  qd S r   r   ).0mr{   r   r    	<genexpr>   s    z!ReadZipFS.open.<locals>.<genexpr>zwax+bz*encoding args invalid for binary operation)rf   rA   rB   r   rg   r   anyr   rD   r1   open
ValueErrorioTextIOWrapper)r"   r@   r{   kwargszip_moderL   streamr   r   r    r      s   
zReadZipFS.openr   r   r   r   r   r6   r   )r@   r   r6   r   )r6   r   r   )r@   r   rO   rP   r6   r	   )r@   r   r6   r   )F)r@   r   rF   r   r6   r   )r@   r   )rs   r   rt   r   rJ   r   )r@   r   r6   rv   )rz   )r@   r   r{   r   r6   r|   )r$   r%   r&   r'   r#   r;   r?   rD   propertyrA   rN   r[   rg   rB   ri   rj   rn   rI   rp   rq   rr   ru   ry   r   __classcell__r   r   r4   r    r   +   s,    










r   c                      sD   e Zd ZdZdd fddZdd
dZdddZ fddZ  ZS )r   zA writable zip file.r   r   r   r   r   c                   s    t    t|| _|| _d S r   )r+   r#   r,   r-   r.   r   r3   r4   r   r    r#      s   

zWriteZipFS.__init__r6   c                 C  r7   )NzWriteZipFS(r8   r9   r:   r   r   r    r;      r<   zWriteZipFS.__repr__c                 C  r=   )Nz<zipfs-write 'r>   r9   r:   r   r   r    r?      r<   zWriteZipFS.__str__c                   sR   t j| jd }tj|d| jd | j|d kr"t|d | j t 	  d S )Nr   zip)formatroot_dirz.zip)
r,   r@   splitextr.   shutilmake_archive	_temp_dirmover+   rN   )r"   	base_namer4   r   r    rN      s
   zWriteZipFS.closer   r   r   )	r$   r%   r&   r'   r#   r;   r?   rN   r   r   r   r4   r    r      s    

r   )"
__future__r   r   r,   r   rY   r(   r/   r   _baser   _errorsr   r   r   _infor	   _pathr
   r   r   r   _tempfsr   r)   collections.abcr   r   r   _subfsr   r   r   r   r   r   r   r    <module>   s*     