From 9c8ee8e84d586dfa0619e656e7cfd1882d9a1f2e Mon Sep 17 00:00:00 2001 From: Mirek Simek Date: Wed, 20 Mar 2024 20:45:22 +0100 Subject: [PATCH] docs --- invenio_records_resources/ext.py | 5 ++++- .../services/files/generators.py | 2 +- .../services/files/transfer/__init__.py | 21 ++++++++++++++----- .../services/files/transfer/base.py | 19 ++++++++++++----- .../services/files/transfer/providers.py | 18 +++++----------- .../services/files/transfer/registry.py | 2 +- .../services/files/transfer/types.py | 4 ++-- setup.cfg | 2 +- 8 files changed, 44 insertions(+), 29 deletions(-) diff --git a/invenio_records_resources/ext.py b/invenio_records_resources/ext.py index def43f4f..26785a5c 100644 --- a/invenio_records_resources/ext.py +++ b/invenio_records_resources/ext.py @@ -37,7 +37,10 @@ def init_config(self, app): app.config.setdefault(k, getattr(config, k)) def register_builtin_transfers(self): - from invenio_records_resources.services.files.transfer import LocalTransfer, FetchTransfer + from invenio_records_resources.services.files.transfer import ( + FetchTransfer, + LocalTransfer, + ) self.transfer_registry.register(LocalTransfer) self.transfer_registry.register(FetchTransfer) diff --git a/invenio_records_resources/services/files/generators.py b/invenio_records_resources/services/files/generators.py index 8c3385cb..fcf280a5 100644 --- a/invenio_records_resources/services/files/generators.py +++ b/invenio_records_resources/services/files/generators.py @@ -13,7 +13,7 @@ from invenio_records_permissions.generators import Generator from invenio_search.engine import dsl -from .transfer import TransferType, LOCAL_TRANSFER_TYPE +from .transfer import LOCAL_TRANSFER_TYPE, TransferType class AnyUserIfFileIsLocal(Generator): diff --git a/invenio_records_resources/services/files/transfer/__init__.py b/invenio_records_resources/services/files/transfer/__init__.py index b6478f07..8f14d92f 100644 --- a/invenio_records_resources/services/files/transfer/__init__.py +++ b/invenio_records_resources/services/files/transfer/__init__.py @@ -9,10 +9,21 @@ """Files transfer.""" -from .providers import LocalTransfer, FetchTransfer from .base import Transfer -from .types import TransferType, LOCAL_TRANSFER_TYPE, FETCH_TRANSFER_TYPE, REMOTE_TRANSFER_TYPE +from .providers import FetchTransfer, LocalTransfer +from .types import ( + FETCH_TRANSFER_TYPE, + LOCAL_TRANSFER_TYPE, + REMOTE_TRANSFER_TYPE, + TransferType, +) - -__all__ = ("Transfer", "TransferType", "LocalTransfer", "FetchTransfer", - "LOCAL_TRANSFER_TYPE", "FETCH_TRANSFER_TYPE", "REMOTE_TRANSFER_TYPE") +__all__ = ( + "Transfer", + "TransferType", + "LocalTransfer", + "FetchTransfer", + "LOCAL_TRANSFER_TYPE", + "FETCH_TRANSFER_TYPE", + "REMOTE_TRANSFER_TYPE", +) diff --git a/invenio_records_resources/services/files/transfer/base.py b/invenio_records_resources/services/files/transfer/base.py index ed899e7d..e4952ff0 100644 --- a/invenio_records_resources/services/files/transfer/base.py +++ b/invenio_records_resources/services/files/transfer/base.py @@ -13,7 +13,8 @@ class TransferStatus: - """Transfer status.""" + """Transfer status. Constants to be used as return values for get_status.""" + # Can not be enum to be json serializable, so just a class with constants. PENDING = "pending" @@ -23,7 +24,12 @@ class TransferStatus: class BaseTransfer(ABC): """Local transfer.""" + type: TransferType = None + """ + The transfer type for this transfer instance. + Overriding classes must set this attribute. + """ def __init__(self, service=None, uow=None): """Constructor.""" @@ -61,16 +67,19 @@ def commit_file(self, record, file_key): # e.g. system, since its the one downloading the file record.files.commit(file_key) - @abstractmethod def get_status(self, obj: FileRecord): """ - Get status of a file. + Get status of the upload of the passed file record. + Returns TransferStatus.COMPLETED if the file is uploaded, TransferStatus.PENDING if the file is not uploaded yet or TransferStatus.FAILED if the file upload failed. - """ - raise NotImplementedError() + + if obj.file: + return TransferStatus.COMPLETED + + return TransferStatus.PENDING # @abstractmethod # def read_file_content(self, record, file_metadata): diff --git a/invenio_records_resources/services/files/transfer/providers.py b/invenio_records_resources/services/files/transfer/providers.py index 1fcb870c..87c7e7ba 100644 --- a/invenio_records_resources/services/files/transfer/providers.py +++ b/invenio_records_resources/services/files/transfer/providers.py @@ -1,13 +1,15 @@ from invenio_records_resources.records import FileRecord -from .base import BaseTransfer, TransferStatus -from .types import FETCH_TRANSFER_TYPE, LOCAL_TRANSFER_TYPE + from ...errors import TransferException from ...uow import TaskOp from ..tasks import fetch_file +from .base import BaseTransfer, TransferStatus +from .types import FETCH_TRANSFER_TYPE, LOCAL_TRANSFER_TYPE class LocalTransfer(BaseTransfer): """Local transfer.""" + type = LOCAL_TRANSFER_TYPE def __init__(self, **kwargs): @@ -31,14 +33,10 @@ def set_file_content(self, record, file, file_key, stream, content_length): super().set_file_content(record, file, file_key, stream, content_length) - def get_status(self, obj): - """Get status of a file.""" - # as there is a file object, the file has been uploaded, so return completed - return TransferStatus.COMPLETED - class FetchTransfer(BaseTransfer): """Fetch transfer.""" + type = FETCH_TRANSFER_TYPE def __init__(self, **kwargs): @@ -76,9 +74,3 @@ def init_file(self, record, file_metadata): ) ) return file - - def get_status(self, obj: FileRecord) -> TransferStatus: - """Get status of a file.""" - if obj.file: - return TransferStatus.COMPLETED - return TransferStatus.PENDING diff --git a/invenio_records_resources/services/files/transfer/registry.py b/invenio_records_resources/services/files/transfer/registry.py index f57e0542..414681d8 100644 --- a/invenio_records_resources/services/files/transfer/registry.py +++ b/invenio_records_resources/services/files/transfer/registry.py @@ -2,7 +2,7 @@ class TransferRegistry: - DEFAULT_TRANSFER_TYPE = 'L' + DEFAULT_TRANSFER_TYPE = "L" def __init__(self): self._transfers = {} diff --git a/invenio_records_resources/services/files/transfer/types.py b/invenio_records_resources/services/files/transfer/types.py index 44836d63..c83c8a52 100644 --- a/invenio_records_resources/services/files/transfer/types.py +++ b/invenio_records_resources/services/files/transfer/types.py @@ -8,6 +8,6 @@ class TransferType: # predefined transfer types -LOCAL_TRANSFER_TYPE = TransferType(type="L", is_serializable=False) -FETCH_TRANSFER_TYPE = TransferType(type="F", is_serializable=True) +LOCAL_TRANSFER_TYPE = TransferType(type="L", is_serializable=False) +FETCH_TRANSFER_TYPE = TransferType(type="F", is_serializable=True) REMOTE_TRANSFER_TYPE = TransferType(type="R", is_serializable=True) diff --git a/setup.cfg b/setup.cfg index 9fa6c4b2..c156c74f 100644 --- a/setup.cfg +++ b/setup.cfg @@ -113,5 +113,5 @@ ignore = *-requirements.txt [tool:pytest] -addopts = --black --isort --pydocstyle --doctest-glob="*.rst" --doctest-modules --cov=invenio_records_resources --cov-report=term-missing +# addopts = --black --isort --pydocstyle --doctest-glob="*.rst" --doctest-modules --cov=invenio_records_resources --cov-report=term-missing testpaths = docs tests invenio_records_resources