From f9b0cfd54314e9c9939e19474f73f890fad1f647 Mon Sep 17 00:00:00 2001 From: Jayesh Velayudhan <jayesh@softwareheritage.org> Date: Tue, 22 Aug 2023 12:24:48 +0200 Subject: [PATCH] Avoid raising NullableObjectError directly from the resolvers --- swh/graphql/resolvers/base_node.py | 4 +++- swh/graphql/resolvers/directory.py | 12 +++++------- swh/graphql/resolvers/snapshot.py | 3 +-- swh/graphql/resolvers/snapshot_branch.py | 5 ++--- 4 files changed, 11 insertions(+), 13 deletions(-) diff --git a/swh/graphql/resolvers/base_node.py b/swh/graphql/resolvers/base_node.py index cc86f1d..2d4a7c2 100644 --- a/swh/graphql/resolvers/base_node.py +++ b/swh/graphql/resolvers/base_node.py @@ -38,7 +38,9 @@ class BaseNode: """ if node_data is None: node_data = self._get_node_data() - return self._get_node_from_data(node_data) + if node_data is not None: + return self._get_node_from_data(node_data) + return None def _get_node_from_data(self, node_data: Any) -> Optional[Any]: """ diff --git a/swh/graphql/resolvers/directory.py b/swh/graphql/resolvers/directory.py index 48b3818..6581e73 100644 --- a/swh/graphql/resolvers/directory.py +++ b/swh/graphql/resolvers/directory.py @@ -5,7 +5,6 @@ from typing import TYPE_CHECKING, Optional, Union -from swh.graphql.errors import NullableObjectError from swh.model.model import Directory from .base_node import BaseSWHNode @@ -26,8 +25,9 @@ class DirectoryNode(BaseDirectoryNode): Node resolver for a directory requested directly with its SWHID """ - def _get_node_data(self): + def _get_node_data(self) -> Optional[Directory]: swhid = self.kwargs.get("swhid") + assert swhid is not None return self.archive.get_directory(directory_id=swhid.object_id, verify=True) @@ -42,14 +42,12 @@ class RevisionDirectoryNode(BaseDirectoryNode): _can_be_null = True obj: BaseRevisionNode - def _get_node_data(self) -> Directory: + def _get_node_data(self) -> Optional[Directory]: # self.obj.directory_hash is the requested directory Id directory_id = self.obj.directory_hash() if directory_id is None: - raise NullableObjectError() - directory = self.archive.get_directory(directory_id=directory_id, verify=False) - assert directory is not None - return directory + return None + return self.archive.get_directory(directory_id=directory_id, verify=False) class TargetDirectoryNode(BaseDirectoryNode): diff --git a/swh/graphql/resolvers/snapshot.py b/swh/graphql/resolvers/snapshot.py index c1b570c..dfb9759 100644 --- a/swh/graphql/resolvers/snapshot.py +++ b/swh/graphql/resolvers/snapshot.py @@ -5,7 +5,6 @@ from typing import TYPE_CHECKING, Optional, Union -from swh.graphql.errors import NullableObjectError from swh.graphql.utils import utils from swh.model.model import CoreSWHID, Snapshot @@ -52,7 +51,7 @@ class VisitSnapshotNode(BaseSnapshotNode): def _get_node_data(self): snapshot_id = self.obj.snapshot_id() if snapshot_id is None: - raise NullableObjectError() + return None return self.archive.get_snapshot(snapshot_id=snapshot_id, verify=False) diff --git a/swh/graphql/resolvers/snapshot_branch.py b/swh/graphql/resolvers/snapshot_branch.py index 3b71704..6dc3b10 100644 --- a/swh/graphql/resolvers/snapshot_branch.py +++ b/swh/graphql/resolvers/snapshot_branch.py @@ -5,7 +5,6 @@ from typing import List, Optional, Tuple -from swh.graphql.errors import NullableObjectError from swh.model.model import CoreSWHID, SnapshotBranch from swh.storage.interface import PagedResult @@ -55,7 +54,7 @@ class SnapshotHeadBranchNode(BaseSnapshotBranchNode): _can_be_null = True - def _get_node_data(self) -> Tuple[bytes, Optional[SnapshotBranch]]: + def _get_node_data(self) -> Optional[Tuple[bytes, Optional[SnapshotBranch]]]: snapshot_id = self._get_snapshot_swhid().object_id name = b"HEAD" # Get just the branch without following the alias chain @@ -64,7 +63,7 @@ class SnapshotHeadBranchNode(BaseSnapshotBranchNode): snapshot_id=snapshot_id, branch_name=name, follow_chain=False ) if head_branch is None or head_branch.branch_found is False: - raise NullableObjectError() + return None return (name, head_branch.target) def _get_snapshot_swhid(self) -> CoreSWHID: -- GitLab