diff --git a/python_3_oop/chapter05/zipprocessor.py b/python_3_oop/chapter05/zipprocessor.py index 940488c..835def0 100644 --- a/python_3_oop/chapter05/zipprocessor.py +++ b/python_3_oop/chapter05/zipprocessor.py @@ -30,3 +30,33 @@ class ZipProcessor: for filename in os.listdir(self.temp_directory): file.write(self._full_filename(filename), filename) shutil.rmtree(self.temp_directory) + + +class ZipProcessorComp: + + def __init__(self, zipname, processor): + self.zipname = zipname + self.temp_directory = "unzipped-{}".format(zipname[:-4]) + self.processor = processor + + def _full_filename(self, filename): + return os.path.join(self.temp_directory, filename) + + def process_zip(self): + self.unzip_files() + self.processor.process(self) + self.zip_files() + + def unzip_files(self): + os.mkdir(self.temp_directory) + zip = zipfile.ZipFile(self.zipname) + try: + zip.extractall(self.temp_directory) + finally: + zip.close() + + def zip_files(self): + file = zipfile.ZipFile(self.zipname, "w") + for filename in os.listdir(self.temp_directory): + file.write(self._full_filename(filename), filename) + shutil.rmtree(self.temp_directory)