Source code for

# 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 TYPE_CHECKING, Optional, Union

from swh.model.model import Directory

from .base_node import BaseSWHNode
from .revision import BaseRevisionNode

[docs] class BaseDirectoryNode(BaseSWHNode): """ Base resolver for all the directory nodes """
[docs] def is_type_of(self): return "Directory"
[docs] class DirectoryNode(BaseDirectoryNode): """ Node resolver for a directory requested directly with its SWHID """ 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)
[docs] class RevisionDirectoryNode(BaseDirectoryNode): """ Node resolver for a directory requested from a revision """ # Revision directory is not using the target indirection, # hence this implementation (not using TargetDirectoryNode) _can_be_null = True obj: BaseRevisionNode 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: return None return self.archive.get_directory(directory_id=directory_id, verify=False)
[docs] class TargetDirectoryNode(BaseDirectoryNode): """ Node resolver for a directory requested as a target """ if TYPE_CHECKING: # pragma: no cover from .target import BranchTargetNode, TargetNode obj: Union[ BranchTargetNode, TargetNode, ] _can_be_null = True def _get_node_data(self) -> Optional[Directory]: # existing directory in the archive, hence verify is False return self.archive.get_directory( directory_id=self.obj.target_hash, verify=False )