Changeset View
Changeset View
Standalone View
Standalone View
swh/graphql/resolvers/resolvers.py
Show All 32 Lines | |||||
) | ) | ||||
query: ObjectType = ObjectType("Query") | query: ObjectType = ObjectType("Query") | ||||
origin: ObjectType = ObjectType("Origin") | origin: ObjectType = ObjectType("Origin") | ||||
visit: ObjectType = ObjectType("Visit") | visit: ObjectType = ObjectType("Visit") | ||||
visit_status: ObjectType = ObjectType("VisitStatus") | visit_status: ObjectType = ObjectType("VisitStatus") | ||||
snapshot: ObjectType = ObjectType("Snapshot") | snapshot: ObjectType = ObjectType("Snapshot") | ||||
snapshot_branch: ObjectType = ObjectType("Branch") | snapshot_branch: ObjectType = ObjectType("Branch") | ||||
branch_target: ObjectType = ObjectType("BranchTarget") | |||||
revision: ObjectType = ObjectType("Revision") | revision: ObjectType = ObjectType("Revision") | ||||
release: ObjectType = ObjectType("Release") | release: ObjectType = ObjectType("Release") | ||||
release_target: ObjectType = ObjectType("ReleaseTarget") | |||||
directory: ObjectType = ObjectType("Directory") | directory: ObjectType = ObjectType("Directory") | ||||
directory_entry: ObjectType = ObjectType("DirectoryEntry") | directory_entry: ObjectType = ObjectType("DirectoryEntry") | ||||
directory_entry_target: ObjectType = ObjectType("DirectoryEntryTarget") | |||||
search_result: ObjectType = ObjectType("SearchResult") | search_result: ObjectType = ObjectType("SearchResult") | ||||
search_result_target: ObjectType = ObjectType("SearchResultTarget") | |||||
binary_string: ObjectType = ObjectType("BinaryString") | binary_string: ObjectType = ObjectType("BinaryString") | ||||
date: ObjectType = ObjectType("Date") | date: ObjectType = ObjectType("Date") | ||||
branch_target: UnionType = UnionType("BranchTarget") | branch_target_node: UnionType = UnionType("BranchTargetNode") | ||||
release_target: UnionType = UnionType("ReleaseTarget") | release_target_node: UnionType = UnionType("ReleaseTargetNode") | ||||
directory_entry_target: UnionType = UnionType("DirectoryEntryTarget") | directory_entry_target_node: UnionType = UnionType("DirectoryEntryTargetNode") | ||||
search_result_target: UnionType = UnionType("SearchResultTarget") | search_result_target_node: UnionType = UnionType("SearchResultTargetNode") | ||||
# Node resolvers | # Node resolvers | ||||
# A node resolver will return either an instance of a BaseNode subclass or None | # A node resolver will return either an instance of a BaseNode subclass or None | ||||
@query.field("origin") | @query.field("origin") | ||||
def origin_resolver(obj: None, info: GraphQLResolveInfo, **kw) -> rs.origin.OriginNode: | def origin_resolver(obj: None, info: GraphQLResolveInfo, **kw) -> rs.origin.OriginNode: | ||||
return NodeObjectFactory.create("origin", obj, info, **kw) | return NodeObjectFactory.create("origin", obj, info, **kw) | ||||
Show All 29 Lines | |||||
@visit_status.field("snapshot") | @visit_status.field("snapshot") | ||||
def visit_snapshot_resolver( | def visit_snapshot_resolver( | ||||
obj: rs.visit_status.BaseVisitStatusNode, info: GraphQLResolveInfo, **kw | obj: rs.visit_status.BaseVisitStatusNode, info: GraphQLResolveInfo, **kw | ||||
) -> Optional[rs.snapshot.VisitSnapshotNode]: | ) -> Optional[rs.snapshot.VisitSnapshotNode]: | ||||
return NodeObjectFactory.create("visit-snapshot", obj, info, **kw) | return NodeObjectFactory.create("visit-snapshot", obj, info, **kw) | ||||
@snapshot_branch.field("target") | |||||
def snapshot_branch_target_resolver( | |||||
obj: rs.snapshot_branch.BaseSnapshotBranchNode, info: GraphQLResolveInfo, **kw | |||||
) -> Union[ | |||||
rs.revision.BaseRevisionNode, | |||||
rs.release.BaseReleaseNode, | |||||
rs.directory.BaseDirectoryNode, | |||||
rs.content.BaseContentNode, | |||||
rs.snapshot.BaseSnapshotNode, | |||||
rs.snapshot_branch.BaseSnapshotBranchNode, | |||||
]: | |||||
""" | |||||
Snapshot branch target can be a revision, release, directory, | |||||
content, snapshot or a branch itself (alias type) | |||||
""" | |||||
return NodeObjectFactory.create(f"branch-{obj.targetType}", obj, info, **kw) | |||||
@query.field("revision") | @query.field("revision") | ||||
def revision_resolver( | def revision_resolver( | ||||
obj: None, info: GraphQLResolveInfo, **kw | obj: None, info: GraphQLResolveInfo, **kw | ||||
) -> rs.revision.RevisionNode: | ) -> rs.revision.RevisionNode: | ||||
return NodeObjectFactory.create("revision", obj, info, **kw) | return NodeObjectFactory.create("revision", obj, info, **kw) | ||||
@revision.field("directory") | @revision.field("directory") | ||||
def revision_directory_resolver( | def revision_directory_resolver( | ||||
obj: rs.revision.BaseRevisionNode, info: GraphQLResolveInfo, **kw | obj: rs.revision.BaseRevisionNode, info: GraphQLResolveInfo, **kw | ||||
) -> Optional[rs.directory.RevisionDirectoryNode]: | ) -> Optional[rs.directory.RevisionDirectoryNode]: | ||||
return NodeObjectFactory.create("revision-directory", obj, info, **kw) | return NodeObjectFactory.create("revision-directory", obj, info, **kw) | ||||
@query.field("release") | @query.field("release") | ||||
def release_resolver( | def release_resolver( | ||||
obj: None, info: GraphQLResolveInfo, **kw | obj: None, info: GraphQLResolveInfo, **kw | ||||
) -> rs.release.ReleaseNode: | ) -> rs.release.ReleaseNode: | ||||
return NodeObjectFactory.create("release", obj, info, **kw) | return NodeObjectFactory.create("release", obj, info, **kw) | ||||
@release.field("target") | |||||
def release_target_resolver( | |||||
obj: rs.release.BaseReleaseNode, info: GraphQLResolveInfo, **kw | |||||
) -> Union[ | |||||
rs.revision.BaseRevisionNode, | |||||
rs.release.BaseReleaseNode, | |||||
rs.directory.BaseDirectoryNode, | |||||
rs.content.BaseContentNode, | |||||
]: | |||||
""" | |||||
Release target can be a release, revision, directory or a content | |||||
""" | |||||
return NodeObjectFactory.create(f"release-{obj.targetType}", obj, info, **kw) | |||||
@query.field("directory") | @query.field("directory") | ||||
def directory_resolver( | def directory_resolver( | ||||
obj: None, info: GraphQLResolveInfo, **kw | obj: None, info: GraphQLResolveInfo, **kw | ||||
) -> rs.directory.DirectoryNode: | ) -> rs.directory.DirectoryNode: | ||||
return NodeObjectFactory.create("directory", obj, info, **kw) | return NodeObjectFactory.create("directory", obj, info, **kw) | ||||
@query.field("directoryEntry") | @query.field("directoryEntry") | ||||
def directory_entry_resolver( | def directory_entry_resolver( | ||||
obj: None, info: GraphQLResolveInfo, **kw | obj: None, info: GraphQLResolveInfo, **kw | ||||
) -> rs.directory_entry.DirectoryEntryNode: | ) -> rs.directory_entry.DirectoryEntryNode: | ||||
return NodeObjectFactory.create("directory-entry", obj, info, **kw) | return NodeObjectFactory.create("directory-entry", obj, info, **kw) | ||||
@directory_entry.field("target") | @query.field("contentByHashes") | ||||
def directory_entry_target_resolver( | def content_by_hashes_resolver( | ||||
obj: rs.directory_entry.BaseDirectoryEntryNode, info: GraphQLResolveInfo, **kw | obj: None, info: GraphQLResolveInfo, **kw | ||||
) -> Union[ | ) -> rs.content.ContentbyHashesNode: | ||||
rs.revision.BaseRevisionNode, | return NodeObjectFactory.create("content-by-hashes", obj, info, **kw) | ||||
rs.directory.BaseDirectoryNode, | |||||
rs.content.BaseContentNode, | |||||
]: | |||||
""" | |||||
DirectoryEntry target can be a directory, content or a revision | |||||
""" | |||||
return NodeObjectFactory.create(f"dir-entry-{obj.targetType}", obj, info, **kw) | |||||
@snapshot_branch.field("target") | |||||
@release.field("target") | |||||
@directory_entry.field("target") | |||||
@search_result.field("target") | @search_result.field("target") | ||||
def search_result_target_resolver( | def generic_target_resolver( | ||||
obj: rs.search.SearchResultNode, info: GraphQLResolveInfo, **kw | obj: Union[ | ||||
rs.snapshot_branch.BaseSnapshotBranchNode, | |||||
rs.release.BaseReleaseNode, | |||||
rs.directory_entry.BaseDirectoryEntryNode, | |||||
rs.search.SearchResultNode, | |||||
], | |||||
info: GraphQLResolveInfo, | |||||
**kw, | |||||
) -> rs.target.TargetNode: | |||||
# Generic resolver for all the targets | |||||
return NodeObjectFactory.create("target", obj, info, **kw) | |||||
@branch_target.field("node") | |||||
@directory_entry_target.field("node") | |||||
@search_result_target.field("node") | |||||
@release_target.field("node") | |||||
def target_node_resolver( | |||||
obj: rs.target.TargetNode, info: GraphQLResolveInfo, **kw | |||||
) -> Union[ | ) -> Union[ | ||||
rs.origin.BaseOriginNode, | rs.origin.BaseOriginNode, | ||||
rs.snapshot.BaseSnapshotNode, | rs.snapshot.BaseSnapshotNode, | ||||
rs.revision.BaseRevisionNode, | rs.revision.BaseRevisionNode, | ||||
rs.release.BaseReleaseNode, | rs.release.BaseReleaseNode, | ||||
rs.directory.BaseDirectoryNode, | rs.directory.BaseDirectoryNode, | ||||
rs.content.BaseContentNode, | rs.content.BaseContentNode, | ||||
]: | ]: | ||||
""" | # Generic resolver for all the target nodes | ||||
SearchResult target can be an origin, snapshot, revision, release | return NodeObjectFactory.create(f"target-{obj.type}", obj, info, **kw) | ||||
directory or a content | |||||
""" | |||||
return NodeObjectFactory.create(f"search-result-{obj.targetType}", obj, info, **kw) | |||||
@query.field("contentByHashes") | |||||
def content_by_hashes_resolver( | |||||
obj: None, info: GraphQLResolveInfo, **kw | |||||
) -> rs.content.ContentbyHashesNode: | |||||
return NodeObjectFactory.create("content-by-hashes", obj, info, **kw) | |||||
# Connection resolvers | # Connection resolvers | ||||
# A connection resolver should return an instance of BaseConnection | # A connection resolver should return an instance of BaseConnection | ||||
@query.field("origins") | @query.field("origins") | ||||
def origins_resolver( | def origins_resolver( | ||||
▲ Show 20 Lines • Show All 101 Lines • ▼ Show 20 Lines | def release_author_resolver( | ||||
obj: rs.release.BaseReleaseNode, info: GraphQLResolveInfo, **kw | obj: rs.release.BaseReleaseNode, info: GraphQLResolveInfo, **kw | ||||
) -> rs.revision.RevisionNode: | ) -> rs.revision.RevisionNode: | ||||
return SimpleListFactory.create("release-author", obj, info, **kw) | return SimpleListFactory.create("release-author", obj, info, **kw) | ||||
# Other resolvers | # Other resolvers | ||||
@release_target.type_resolver | @release_target_node.type_resolver | ||||
@directory_entry_target.type_resolver | @directory_entry_target_node.type_resolver | ||||
@branch_target.type_resolver | @search_result_target_node.type_resolver | ||||
@search_result_target.type_resolver | @branch_target_node.type_resolver | ||||
def union_resolver( | def union_resolver( | ||||
obj: Union[ | obj: Union[ | ||||
rs.origin.BaseOriginNode, | rs.origin.BaseOriginNode, | ||||
rs.revision.BaseRevisionNode, | rs.revision.BaseRevisionNode, | ||||
rs.release.BaseReleaseNode, | rs.release.BaseReleaseNode, | ||||
rs.directory.BaseDirectoryNode, | rs.directory.BaseDirectoryNode, | ||||
rs.content.BaseContentNode, | rs.content.BaseContentNode, | ||||
rs.snapshot.BaseSnapshotNode, | rs.snapshot.BaseSnapshotNode, | ||||
Show All 40 Lines |