Changeset View
Changeset View
Standalone View
Standalone View
swh/graphql/resolvers/directory.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.model.model import Directory | from swh.model.model import Directory | ||||
from .base_node import BaseSWHNode | from .base_node import BaseSWHNode | ||||
from .revision import BaseRevisionNode | |||||
class BaseDirectoryNode(BaseSWHNode): | class BaseDirectoryNode(BaseSWHNode): | ||||
""" | |||||
Base resolver for all the directory nodes | |||||
""" | |||||
def _get_directory_by_id(self, directory_id): | def _get_directory_by_id(self, directory_id): | ||||
# Return a Directory model object | # Return a Directory model object | ||||
# entries is initialized as empty | # entries is initialized as empty | ||||
# Same pattern is used in snapshot | # Same pattern is used in snapshot | ||||
return Directory(id=directory_id, entries=()) | return Directory(id=directory_id, entries=()) | ||||
def is_type_of(self): | def is_type_of(self): | ||||
return "Directory" | return "Directory" | ||||
class DirectoryNode(BaseDirectoryNode): | class DirectoryNode(BaseDirectoryNode): | ||||
def _get_node_data(self): | |||||
""" | """ | ||||
When a directory is requested directly with its SWHID | Node resolver for a directory requested directly with its SWHID | ||||
""" | """ | ||||
def _get_node_data(self): | |||||
directory_id = self.kwargs.get("swhid").object_id | directory_id = self.kwargs.get("swhid").object_id | ||||
# path = "" | # path = "" | ||||
if archive.Archive().is_directory_available([directory_id]): | if archive.Archive().is_directory_available([directory_id]): | ||||
# _get_directory_by_id is not making any backend call | |||||
# hence the is_directory_available validation | |||||
return self._get_directory_by_id(directory_id) | return self._get_directory_by_id(directory_id) | ||||
return None | return None | ||||
class RevisionDirectoryNode(BaseDirectoryNode): | class RevisionDirectoryNode(BaseDirectoryNode): | ||||
def _get_node_data(self): | |||||
""" | """ | ||||
When a directory is requested from a revision | Node resolver for a directory requested from a revision | ||||
self.obj is revision here | |||||
self.obj.directorySWHID is the required directory SWHID | |||||
(set from resolvers.revision.py:BaseRevisionNode) | |||||
""" | """ | ||||
obj: BaseRevisionNode | |||||
def _get_node_data(self): | |||||
# self.obj.directorySWHID is the requested directory SWHID | |||||
vlorentz: add a type annotation instead | |||||
Done Inline Actionss/required/requested/ ? vlorentz: s/required/requested/ ? | |||||
directory_id = self.obj.directorySWHID.object_id | directory_id = self.obj.directorySWHID.object_id | ||||
return self._get_directory_by_id(directory_id) | return self._get_directory_by_id(directory_id) | ||||
class TargetDirectoryNode(BaseDirectoryNode): | class TargetDirectoryNode(BaseDirectoryNode): | ||||
def _get_node_data(self): | |||||
""" | """ | ||||
When a directory is requested as a target | Node resolver for a directory requested as a target | ||||
self.obj can be a Release or a DirectoryEntry | |||||
obj.targetHash is the requested directory id here | |||||
""" | """ | ||||
def _get_node_data(self): | |||||
return self._get_directory_by_id(self.obj.targetHash) | return self._get_directory_by_id(self.obj.targetHash) | ||||
Done Inline Actionsditto vlorentz: ditto | |||||
Not Done Inline ActionsI still feel "obj.targetHash is the requested directory id" is redundant when the next line clearly gets a directory with that id vlorentz: I still feel "obj.targetHash is the requested directory id" is redundant when the next line… |
add a type annotation instead