浏览代码

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)
try:
result = module.process()
storage.queue_result(result)
storage.put_queue()
storage.put_result(result)
finally:
os.chdir('..')



+ 10
- 22
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):


正在加载...
取消
保存