Source code for niemafs.zip

#! /usr/bin/env python
'''
Handle ZIP archives
'''

# NiemaFS imports
from niemafs.common import FileSystem

# imports
from datetime import datetime
from pathlib import Path
from zipfile import ZipFile

[docs] class ZipFS(FileSystem): '''Class to represent a ZIP 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.zip = ZipFile(self.file, 'r') def __del__(self): if hasattr(self, 'zip'): self.zip.close() def __iter__(self): for curr_entry in self.zip.infolist(): curr_path = Path(curr_entry.filename) curr_timestamp = datetime(*curr_entry.date_time) if curr_entry.is_dir(): curr_data = None else: curr_data = self.zip.read(curr_entry.filename) yield (curr_path, curr_timestamp, curr_data)