Source code for swh.graphql.resolvers.release
# Copyright (C) 2022 The Software Heritage developers
# See the AUTHORS file at the top-level directory of this distribution
# License: GNU General Public License version 3, or any later version
# See top-level LICENSE file for more information
from typing import Optional, Union
from swh.model.model import CoreSWHID
from swh.model.model import Release as ModelRelease
from swh.model.model import ReleaseTargetType, Sha1Git
from .base_node import BaseSWHNode
[docs]
class BaseReleaseNode(BaseSWHNode):
    """
    Base resolver for all the release nodes
    """
    def _get_release_by_id(self, release_id: Sha1Git) -> Optional[ModelRelease]:
        releases = self.archive.get_releases([release_id])
        return releases[0] if releases else None
[docs]
    def target_hash(self) -> Optional[Sha1Git]:
        assert self._node is not None
        return self._node.target 
[docs]
    def target_type(self) -> ReleaseTargetType:
        assert self._node is not None
        return self._node.target_type 
[docs]
    def is_type_of(self) -> str:
        # is_type_of is required only when resolving a UNION type
        # This is for ariadne to return the right type
        return "Release" 
 
[docs]
class ReleaseNode(BaseReleaseNode):
    """
    Node resolver for a release requested directly with its SWHID
    """
    def _get_node_data(self) -> Optional[ModelRelease]:
        release_swhid = self.kwargs.get("swhid")
        assert isinstance(release_swhid, CoreSWHID)
        return self._get_release_by_id(release_swhid.object_id) 
[docs]
class TargetReleaseNode(BaseReleaseNode):
    """
    Node resolver for a release requested as a target
    """
    from .target import BranchTargetNode, TargetNode
    _can_be_null = True
    obj: Union[TargetNode, BranchTargetNode]
    def _get_node_data(self) -> Optional[ModelRelease]:
        # self.obj.target_hash is the requested release id
        return self._get_release_by_id(self.obj.target_hash)