Changeset View
Changeset View
Standalone View
Standalone View
swh/graphql/resolvers/release.py
# Copyright (C) 2022 The Software Heritage developers | # Copyright (C) 2022 The Software Heritage developers | ||||
# See the AUTHORS file at the top-level directory of this distribution | # See the AUTHORS file at the top-level directory of this distribution | ||||
# License: GNU General Public License version 3, or any later version | # License: GNU General Public License version 3, or any later version | ||||
# See top-level LICENSE file for more information | # See top-level LICENSE file for more information | ||||
from typing import Union | |||||
from swh.graphql.backends import archive | from swh.graphql.backends import archive | ||||
from .base_node import BaseSWHNode | from .base_node import BaseSWHNode | ||||
from .snapshot_branch import SnapshotBranchNode | |||||
class BaseReleaseNode(BaseSWHNode): | class BaseReleaseNode(BaseSWHNode): | ||||
""" | |||||
Base resolver for all the release nodes | |||||
""" | |||||
def _get_release_by_id(self, release_id): | def _get_release_by_id(self, release_id): | ||||
return (archive.Archive().get_releases([release_id]) or None)[0] | return (archive.Archive().get_releases([release_id]) or None)[0] | ||||
@property | @property | ||||
def targetHash(self): # To support the schema naming convention | def targetHash(self): # To support the schema naming convention | ||||
return self._node.target | return self._node.target | ||||
@property | @property | ||||
def targetType(self): # To support the schema naming convention | def targetType(self): # To support the schema naming convention | ||||
return self._node.target_type.value | return self._node.target_type.value | ||||
def is_type_of(self): | def is_type_of(self): | ||||
""" | # is_type_of is required only when resolving a UNION type | ||||
is_type_of is required only when resolving | # This is for ariadne to return the right type | ||||
a UNION type | |||||
This is for ariadne to return the right type | |||||
""" | |||||
return "Release" | return "Release" | ||||
class ReleaseNode(BaseReleaseNode): | class ReleaseNode(BaseReleaseNode): | ||||
""" | """ | ||||
When the release is requested directly with its SWHID | Node resolver for a release requested directly with its SWHID | ||||
""" | """ | ||||
def _get_node_data(self): | def _get_node_data(self): | ||||
return self._get_release_by_id(self.kwargs.get("swhid").object_id) | return self._get_release_by_id(self.kwargs.get("swhid").object_id) | ||||
class TargetReleaseNode(BaseReleaseNode): | class TargetReleaseNode(BaseReleaseNode): | ||||
""" | """ | ||||
When a release is requested as a target | Node resolver for a release requested as a target | ||||
self.obj could be a snapshotbranch or a release | |||||
self.obj.targetHash is the requested release id here | |||||
""" | """ | ||||
obj: Union[SnapshotBranchNode, BaseReleaseNode] | |||||
def _get_node_data(self): | def _get_node_data(self): | ||||
# self.obj.targetHash is the requested release id | |||||
return self._get_release_by_id(self.obj.targetHash) | return self._get_release_by_id(self.obj.targetHash) |