Source code for niemafs.tar
#! /usr/bin/env python
'''
Handle TAR archives
'''
# NiemaFS imports
from niemafs.common import FileSystem
# imports
from datetime import datetime
from pathlib import Path
from tarfile import TarFile
[docs]
class TarFS(FileSystem):
'''Class to represent a TAR archive'''
def __init__(self, file_obj, path=None):
if file_obj is None:
raise ValueError("file_obj must be a file-like")
super().__init__(path=path, file_obj=file_obj)
self.tar = TarFile(fileobj=self.file, mode='r')
def __del__(self):
if hasattr(self, 'tar'):
self.tar.close()
def __iter__(self):
for curr_entry in self.tar.getmembers():
curr_path = Path(curr_entry.name)
curr_timestamp = datetime.fromtimestamp(curr_entry.mtime)
if curr_entry.isdir():
curr_data = None
else:
curr_data = self.tar.extractfile(curr_entry).read()
yield (curr_path, curr_timestamp, curr_data)