From 06de2b031b1ca59a8b85365cb870229fc266cbe1 Mon Sep 17 00:00:00 2001 From: Daniel Hollas Date: Tue, 14 Jan 2025 14:50:30 +0000 Subject: [PATCH 1/2] Run mypy on orm/{comments,computer}.py --- .pre-commit-config.yaml | 3 --- src/aiida/orm/comments.py | 7 ++++--- src/aiida/orm/computers.py | 12 ++++++------ src/aiida/transports/transport.py | 2 +- 4 files changed, 11 insertions(+), 13 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index fb2019ac26..77a7478cc4 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -122,10 +122,7 @@ repos: src/aiida/manage/external/rmq/launcher.py| src/aiida/manage/tests/main.py| src/aiida/manage/tests/pytest_fixtures.py| - src/aiida/orm/comments.py| - src/aiida/orm/computers.py| src/aiida/orm/implementation/storage_backend.py| - src/aiida/orm/nodes/comments.py| src/aiida/orm/nodes/data/array/bands.py| src/aiida/orm/nodes/data/array/trajectory.py| src/aiida/orm/nodes/data/cif.py| diff --git a/src/aiida/orm/comments.py b/src/aiida/orm/comments.py index bc92351c54..b8594da7c5 100644 --- a/src/aiida/orm/comments.py +++ b/src/aiida/orm/comments.py @@ -18,7 +18,7 @@ if TYPE_CHECKING: from aiida.orm import Node, User - from aiida.orm.implementation import StorageBackend + from aiida.orm.implementation import BackendComment, BackendNode, StorageBackend # noqa: F401 __all__ = ('Comment',) @@ -146,7 +146,7 @@ def set_mtime(self, value: datetime) -> None: return self._backend_entity.set_mtime(value) @property - def node(self) -> 'Node': + def node(self) -> 'BackendNode': return self._backend_entity.node @property @@ -154,7 +154,8 @@ def user(self) -> 'User': return entities.from_backend_entity(users.User, self._backend_entity.user) def set_user(self, value: 'User') -> None: - self._backend_entity.user = value.backend_entity + # ignoring mypy error: Property "user" defined in "BackendComment" is read-only + self._backend_entity.user = value.backend_entity # type: ignore[misc] @property def content(self) -> str: diff --git a/src/aiida/orm/computers.py b/src/aiida/orm/computers.py index bae925b25c..51fd491f99 100644 --- a/src/aiida/orm/computers.py +++ b/src/aiida/orm/computers.py @@ -21,7 +21,7 @@ if TYPE_CHECKING: from aiida.orm import AuthInfo, User - from aiida.orm.implementation import StorageBackend + from aiida.orm.implementation import BackendComputer, StorageBackend # noqa: F401 from aiida.schedulers import Scheduler from aiida.transports import Transport @@ -54,7 +54,7 @@ def get_or_create(self, label: Optional[str] = None, **kwargs) -> Tuple[bool, 'C def list_labels(self) -> List[str]: """Return a list with all the labels of the computers in the DB.""" - return self._backend.computers.list_names() + return self._backend.computers.list_names() # type: ignore[attr-defined] def delete(self, pk: int) -> None: """Delete the computer with the given id""" @@ -224,7 +224,7 @@ def _mpirun_command_validator(self, mpirun_cmd: Union[List[str], Tuple[str, ...] """Validates the mpirun_command variable. MUST be called after properly checking for a valid scheduler. """ - if not isinstance(mpirun_cmd, (tuple, list)) or not all(isinstance(i, str) for i in mpirun_cmd): + if not isinstance(mpirun_cmd, (tuple, list)) or not all(isinstance(i, str) for i in mpirun_cmd): # type: ignore[redundant-expr] raise exceptions.ValidationError('the mpirun_command must be a list of strings') try: @@ -278,7 +278,7 @@ def _default_mpiprocs_per_machine_validator(cls, def_cpus_per_machine: Optional[ if def_cpus_per_machine is None: return - if not isinstance(def_cpus_per_machine, int) or def_cpus_per_machine <= 0: + if not isinstance(def_cpus_per_machine, int) or def_cpus_per_machine <= 0: # type: ignore[redundant-expr] raise exceptions.ValidationError( 'Invalid value for default_mpiprocs_per_machine, must be a positive integer, or an empty string if you ' 'do not want to provide a default value.' @@ -290,7 +290,7 @@ def default_memory_per_machine_validator(cls, def_memory_per_machine: Optional[i if def_memory_per_machine is None: return - if not isinstance(def_memory_per_machine, int) or def_memory_per_machine <= 0: + if not isinstance(def_memory_per_machine, int) or def_memory_per_machine <= 0: # type: ignore[redundant-expr] raise exceptions.ValidationError( f'Invalid value for def_memory_per_machine, must be a positive int, got: {def_memory_per_machine}' ) @@ -487,7 +487,7 @@ def set_mpirun_command(self, val: Union[List[str], Tuple[str, ...]]) -> None: """Set the mpirun command. It must be a list of strings (you can use string.split() if you have a single, space-separated string). """ - if not isinstance(val, (tuple, list)) or not all(isinstance(i, str) for i in val): + if not isinstance(val, (tuple, list)) or not all(isinstance(i, str) for i in val): # type: ignore[redundant-expr] raise TypeError('the mpirun_command must be a list of strings') self.set_property('mpirun_command', val) diff --git a/src/aiida/transports/transport.py b/src/aiida/transports/transport.py index a6d755973e..06d2a4e573 100644 --- a/src/aiida/transports/transport.py +++ b/src/aiida/transports/transport.py @@ -43,7 +43,7 @@ class Transport(abc.ABC): """Abstract class for a generic transport (ssh, local, ...) contains the set of minimal methods.""" # This will be used for ``Computer.get_minimum_job_poll_interval`` - DEFAULT_MINIMUM_JOB_POLL_INTERVAL = 10 + DEFAULT_MINIMUM_JOB_POLL_INTERVAL = 10.0 # This is used as a global default in case subclasses don't redefine this, # but this should be redefined in plugins where appropriate From 21db8da8d4e2552237b26a940b15c16f0f575132 Mon Sep 17 00:00:00 2001 From: Daniel Hollas Date: Tue, 14 Jan 2025 15:00:25 +0000 Subject: [PATCH 2/2] Run typing on orm/implementation/storage_backend.py --- .pre-commit-config.yaml | 1 - src/aiida/orm/implementation/storage_backend.py | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 77a7478cc4..c0211570f0 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -122,7 +122,6 @@ repos: src/aiida/manage/external/rmq/launcher.py| src/aiida/manage/tests/main.py| src/aiida/manage/tests/pytest_fixtures.py| - src/aiida/orm/implementation/storage_backend.py| src/aiida/orm/nodes/data/array/bands.py| src/aiida/orm/nodes/data/array/trajectory.py| src/aiida/orm/nodes/data/cif.py| diff --git a/src/aiida/orm/implementation/storage_backend.py b/src/aiida/orm/implementation/storage_backend.py index 6137508f51..7e19a25ca3 100644 --- a/src/aiida/orm/implementation/storage_backend.py +++ b/src/aiida/orm/implementation/storage_backend.py @@ -456,7 +456,7 @@ def get_orm_entities(self, detailed: bool = False) -> dict: """ from aiida.orm import Comment, Computer, Group, Log, Node, QueryBuilder, User - data = {} + data: dict[str, Any] = {} query_user = QueryBuilder(self).append(User, project=['email']) data['Users'] = {'count': query_user.count()}