Source code for gokart.zip_client

import os
import shutil
import zipfile
from abc import abstractmethod
from typing import IO, Union


def _unzip_file(fp: Union[str, IO, os.PathLike], extract_dir: str) -> None:
    zip_file = zipfile.ZipFile(fp)
    zip_file.extractall(extract_dir)
    zip_file.close()


[docs]class ZipClient(object):
[docs] @abstractmethod def exists(self) -> bool: pass
[docs] @abstractmethod def make_archive(self) -> None: pass
[docs] @abstractmethod def unpack_archive(self) -> None: pass
[docs] @abstractmethod def remove(self) -> None: pass
@property @abstractmethod def path(self) -> str: pass
[docs]class LocalZipClient(ZipClient): def __init__(self, file_path: str, temporary_directory: str) -> None: self._file_path = file_path self._temporary_directory = temporary_directory
[docs] def exists(self) -> bool: return os.path.exists(self._file_path)
[docs] def make_archive(self) -> None: [base, extension] = os.path.splitext(self._file_path) shutil.make_archive(base_name=base, format=extension[1:], root_dir=self._temporary_directory)
[docs] def unpack_archive(self) -> None: _unzip_file(fp=self._file_path, extract_dir=self._temporary_directory)
[docs] def remove(self) -> None: shutil.rmtree(self._file_path, ignore_errors=True)
@property def path(self) -> str: return self._file_path