ソースを参照

Simplify storage design; there is no need for the queue

tags/v1.0
JustAnotherArchivist 1年前
コミット
f2d2df9428
2個のファイルの変更11行の追加24行の削除
  1. +1
    -2
      codearchiver/cli.py
  2. +10
    -22
      codearchiver/storage.py

+ 1
- 2
codearchiver/cli.py ファイルの表示

@@ -198,8 +198,7 @@ def main():
os.chdir(td) os.chdir(td)
try: try:
result = module.process() result = module.process()
storage.queue_result(result)
storage.put_queue()
storage.put_result(result)
finally: finally:
os.chdir('..') os.chdir('..')




+ 10
- 22
codearchiver/storage.py ファイルの表示

@@ -11,27 +11,16 @@ _logger = logging.getLogger(__name__)




class Storage(abc.ABC): 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: for fn in result.files:
self.queue(fn)
self.put(fn)
for _, subresult in result.submoduleResults: 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 @abc.abstractmethod
@contextlib.contextmanager @contextlib.contextmanager
@@ -54,11 +43,10 @@ class DirectoryStorage(Storage):
if not self._check_directory(): if not self._check_directory():
os.makedirs(self._directory) os.makedirs(self._directory)


def put_queue(self):
def put(self, filename):
self._ensure_directory() 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 @contextlib.contextmanager
def open(self, filename): def open(self, filename):


読み込み中…
キャンセル
保存