Changeset View
Changeset View
Standalone View
Standalone View
swh/graphql/resolvers/visit.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 swh.graphql.backends import archive | from swh.graphql.backends import archive | ||||
from swh.graphql.utils import utils | from swh.graphql.utils import utils | ||||
from .base_connection import BaseConnection | from .base_connection import BaseConnection | ||||
from .base_node import BaseNode | from .base_node import BaseNode | ||||
from .origin import OriginNode | |||||
class BaseVisitNode(BaseNode): | class BaseVisitNode(BaseNode): | ||||
""" | |||||
Base resolver for all the visit nodes | |||||
""" | |||||
@property | @property | ||||
def id(self): | def id(self): | ||||
# FIXME, use a better id | # FIXME, use a better id | ||||
return utils.get_b64_string(f"{self.origin}-{str(self.visit)}") | return utils.get_b64_string(f"{self.origin}-{str(self.visit)}") | ||||
@property | @property | ||||
def visitId(self): # To support the schema naming convention | def visitId(self): # To support the schema naming convention | ||||
return self._node.visit | return self._node.visit | ||||
class OriginVisitNode(BaseVisitNode): | class OriginVisitNode(BaseVisitNode): | ||||
""" | """ | ||||
Get the visit directly with an origin URL and a visit ID | Node resolver for a visit requested directly with an origin URL | ||||
and a visit ID | |||||
""" | """ | ||||
def _get_node_data(self): | def _get_node_data(self): | ||||
return archive.Archive().get_origin_visit( | return archive.Archive().get_origin_visit( | ||||
self.kwargs.get("originUrl"), int(self.kwargs.get("visitId")) | self.kwargs.get("originUrl"), int(self.kwargs.get("visitId")) | ||||
) | ) | ||||
class LatestVisitNode(BaseVisitNode): | class LatestVisitNode(BaseVisitNode): | ||||
""" | """ | ||||
Get the latest visit for an origin | Node resolver for the latest visit in an origin | ||||
self.obj is the origin object here | |||||
self.obj.url is the origin URL | |||||
""" | """ | ||||
obj: OriginNode | |||||
def _get_node_data(self): | def _get_node_data(self): | ||||
# self.obj.url is the origin URL | |||||
return archive.Archive().get_origin_latest_visit(self.obj.url) | return archive.Archive().get_origin_latest_visit(self.obj.url) | ||||
class OriginVisitConnection(BaseConnection): | class OriginVisitConnection(BaseConnection): | ||||
""" | |||||
Connection resolver for the visit objects in an origin | |||||
""" | |||||
obj: OriginNode | |||||
_node_class = BaseVisitNode | _node_class = BaseVisitNode | ||||
def _get_paged_result(self): | def _get_paged_result(self): | ||||
""" | # self.obj.url is the origin URL | ||||
Get the visits for the given origin | |||||
parent obj (self.obj) is origin here | |||||
""" | |||||
return archive.Archive().get_origin_visits( | return archive.Archive().get_origin_visits( | ||||
self.obj.url, after=self._get_after_arg(), first=self._get_first_arg() | self.obj.url, after=self._get_after_arg(), first=self._get_first_arg() | ||||
) | ) |