From f2d2df9428f30ddf35ad83a57b9c21322abadb24 Mon Sep 17 00:00:00 2001 From: JustAnotherArchivist Date: Sun, 5 Mar 2023 03:02:42 +0000 Subject: [PATCH] Simplify storage design; there is no need for the queue --- codearchiver/cli.py | 3 +-- codearchiver/storage.py | 32 ++++++++++---------------------- 2 files changed, 11 insertions(+), 24 deletions(-) diff --git a/codearchiver/cli.py b/codearchiver/cli.py index 75e8375..4e288df 100644 --- a/codearchiver/cli.py +++ b/codearchiver/cli.py @@ -198,8 +198,7 @@ def main(): os.chdir(td) try: result = module.process() - storage.queue_result(result) - storage.put_queue() + storage.put_result(result) finally: os.chdir('..') diff --git a/codearchiver/storage.py b/codearchiver/storage.py index 20fb045..7b42ab2 100644 --- a/codearchiver/storage.py +++ b/codearchiver/storage.py @@ -11,27 +11,16 @@ _logger = logging.getLogger(__name__) class Storage(abc.ABC): - def __init__(self): - self._queue = [] - - def queue(self, filename: str): - '''Queue a local file for putting into storage. Note that nothing is written to storage until `put_queue` is called.''' - _logger.debug(f'Queueing {filename}') - self._queue.append(filename) + @abc.abstractmethod + def put(self, filename: str): + '''Put a local file into storage. If an error occurs, a partial copy may remain in storage. If it completes, the local input file is removed.''' - def queue_result(self, result: codearchiver.core.Result): + def put_result(self, result: codearchiver.core.Result): + '''Put a module's Result into storage. The semantics are as for `put`, and the exact behaviour regarding partial copies and leftover files on errors is undefined.''' for fn in result.files: - self.queue(fn) + self.put(fn) for _, subresult in result.submoduleResults: - self.queue_result(subresult) - - @property - def queued_files(self) -> typing.List[str]: - return self._queue[:] - - @abc.abstractmethod - def put_queue(self): - '''Put all queued files into storage. If an error occurs, partial copies may remain in storage. If it completes, the local input copy is removed.''' + self.put_result(subresult) @abc.abstractmethod @contextlib.contextmanager @@ -54,11 +43,10 @@ class DirectoryStorage(Storage): if not self._check_directory(): os.makedirs(self._directory) - def put_queue(self): + def put(self, filename): self._ensure_directory() - for fn in self.queued_files: - _logger.info(f'Moving {fn} to {self._directory}') - shutil.move(fn, self._directory) + _logger.info(f'Moving {filename} to {self._directory}') + shutil.move(filename, self._directory) @contextlib.contextmanager def open(self, filename):