B
    ![+  ã               @   sd   d dl mZmZmZ d dlmZ d dlmZmZ ddl	m
Z
 edd„ ƒZdd	„ ZG d
d„ deƒZdS )é    )ÚdivisionÚprint_functionÚunicode_literals)Úcontextmanager)Úc_char_pÚcreate_string_bufferé   )Úffic           	   c   s$   t  ¡ } z
| V  W d t  | ¡ X d S )N)r	   Z	entry_newZ
entry_free)Úentry_p© r   ú/lib/python3.7/site-packages/libarchive/entry.pyÚnew_archive_entry	   s    
r   c             C   s    |rt | ƒt |ƒd  S t| ƒS )zC return float of seconds.nanos when nanos set, or seconds when not g    eÍÍA)ÚfloatÚint)ZsecondsZnanosr   r   r   Úformat_time   s    r   c               @   s˜  e Zd Zdd„ Zdd„ Zedd„ ƒZedd„ ƒZed	d
„ ƒZe	j
fdd„Zedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZedd„ ƒZdd„ ZeeƒZeeƒZedd„ ƒZedd„ ƒZedd „ ƒZed!d"„ ƒZed#d$„ ƒZd%d&„ Zed'd(„ ƒZd)d*„ Zed+d,„ ƒZd-d.„ Zed/d0„ ƒZd1d2„ Z d3d4„ Z!d5d6„ Z"ee!e"ƒZ#ee!e"ƒZ$ee!e"ƒZ%ed7d8„ ƒZ&ed9d:„ ƒZ'ed;d<„ ƒZ(ed=d>„ ƒZ)ed?d@„ ƒZ*dAS )BÚArchiveEntryc             C   s   || _ || _d S )N)Ú
_archive_pÚ_entry_p)ÚselfÚ	archive_pr
   r   r   r   Ú__init__   s    zArchiveEntry.__init__c             C   s   | j S )N)Úpathname)r   r   r   r   Ú__str__   s    zArchiveEntry.__str__c             C   s   t  | j¡S )N)r	   Zentry_filetyper   )r   r   r   r   Úfiletype"   s    zArchiveEntry.filetypec             C   s   t  | j¡S )N)r	   Z	entry_uidr   )r   r   r   r   Úuid&   s    zArchiveEntry.uidc             C   s   t  | j¡S )N)r	   Z	entry_gidr   )r   r   r   r   Úgid*   s    zArchiveEntry.gidc             c   sD   | j }t|ƒ}tj}x*||||ƒ}|dkr,P |jd|… V  qW d S )Nr   )r   r   r	   Z	read_dataÚraw)r   Z
block_sizer   ZbufÚreadÚrr   r   r   Ú
get_blocks.   s    zArchiveEntry.get_blocksc             C   s   | j d@ dkS )Ni ð  i `  )r   )r   r   r   r   Úisblk8   s    zArchiveEntry.isblkc             C   s   | j d@ dkS )Ni ð  i    )r   )r   r   r   r   Úischr<   s    zArchiveEntry.ischrc             C   s   | j d@ dkS )Ni ð  i @  )r   )r   r   r   r   Úisdir@   s    zArchiveEntry.isdirc             C   s   | j d@ dkS )Ni ð  i   )r   )r   r   r   r   ÚisfifoD   s    zArchiveEntry.isfifoc             C   s   t t | j¡pt | j¡ƒS )N)Úboolr	   Úentry_hardlink_wr   Úentry_hardlink)r   r   r   r   ÚislnkH   s    zArchiveEntry.islnkc             C   s   | j d@ dkS )Ni ð  i    )r   )r   r   r   r   ÚissymM   s    zArchiveEntry.issymc             C   s0   t  | j¡p.t  | j¡p.t  | j¡p.t  | j¡S )N)r	   Zentry_symlink_wr   r%   Zentry_symlinkr&   )r   r   r   r   Ú	_linkpathQ   s    zArchiveEntry._linkpathc             C   s   | j d@ dkS )Ni ð  i €  )r   )r   r   r   r   Úisreg[   s    zArchiveEntry.isregc             C   s   | j S )N)r*   )r   r   r   r   Úisfile_   s    zArchiveEntry.isfilec             C   s   | j d@ dkS )Ni ð  i À  )r   )r   r   r   r   Úissockc   s    zArchiveEntry.issockc             C   s   | j p| jp| jp| jS )N)r!   r    r#   r,   )r   r   r   r   Úisdevg   s    zArchiveEntry.isdevc             C   s"   t  | j¡}t  | j¡}t||ƒS )N)r	   Zentry_atimer   Zentry_atime_nsecr   )r   Úsec_valÚnsec_valr   r   r   Úatimek   s    zArchiveEntry.atimec             C   s   t  | j||¡S )N)r	   Zentry_set_atimer   )r   Útimestamp_secÚtimestamp_nsecr   r   r   Ú	set_atimeq   s    zArchiveEntry.set_atimec             C   s"   t  | j¡}t  | j¡}t||ƒS )N)r	   Zentry_mtimer   Zentry_mtime_nsecr   )r   r.   r/   r   r   r   Úmtimeu   s    zArchiveEntry.mtimec             C   s   t  | j||¡S )N)r	   Zentry_set_mtimer   )r   r1   r2   r   r   r   Ú	set_mtime{   s    zArchiveEntry.set_mtimec             C   s"   t  | j¡}t  | j¡}t||ƒS )N)r	   Zentry_ctimer   Zentry_ctime_nsecr   )r   r.   r/   r   r   r   Úctime   s    zArchiveEntry.ctimec             C   s   t  | j||¡S )N)r	   Zentry_set_ctimer   )r   r1   r2   r   r   r   Ú	set_ctime…   s    zArchiveEntry.set_ctimec             C   s"   t  | j¡}t  | j¡}t||ƒS )N)r	   Zentry_birthtimer   Zentry_birthtime_nsecr   )r   r.   r/   r   r   r   Ú	birthtime‰   s    zArchiveEntry.birthtimec             C   s   t  | j||¡S )N)r	   Zentry_set_birthtimer   )r   r1   r2   r   r   r   Úset_birthtime   s    zArchiveEntry.set_birthtimec             C   s   t  | j¡pt  | j¡S )N)r	   Zentry_pathname_wr   Zentry_pathname)r   r   r   r   Ú_getpathname“   s    zArchiveEntry._getpathnamec             C   s*   t |tƒs| d¡}t | jt|ƒ¡ d S )NÚutf8)Ú
isinstanceÚbytesÚencoder	   Zentry_update_pathname_utf8r   r   )r   Úvaluer   r   r   Ú_setpathname—   s    

zArchiveEntry._setpathnamec             C   s   t  | j¡rt  | j¡S d S )N)r	   Zentry_size_is_setr   Z
entry_size)r   r   r   r   Úsize¡   s    zArchiveEntry.sizec             C   s   t  | j¡S )N)r	   Z
entry_moder   )r   r   r   r   Úmode¦   s    zArchiveEntry.modec             C   s   t  | j¡ ¡ S )N)r	   Zentry_strmoder   Ústrip)r   r   r   r   Ústrmodeª   s    zArchiveEntry.strmodec             C   s   t  | j¡S )N)r	   Zentry_rdevmajorr   )r   r   r   r   Ú	rdevmajor°   s    zArchiveEntry.rdevmajorc             C   s   t  | j¡S )N)r	   Zentry_rdevminorr   )r   r   r   r   Ú	rdevminor´   s    zArchiveEntry.rdevminorN)+Ú__name__Ú
__module__Ú__qualname__r   r   Úpropertyr   r   r   r	   Z	page_sizer   r    r!   r"   r#   r'   r(   r)   ZlinkpathZlinknamer*   r+   r,   r-   r0   r3   r4   r5   r6   r7   r8   r9   r:   r@   r   ÚpathÚnamerA   rB   rD   rE   rF   r   r   r   r   r      sJ   



r   N)Z
__future__r   r   r   Ú
contextlibr   Zctypesr   r   Ú r	   r   r   Úobjectr   r   r   r   r   Ú<module>   s   	