diff --git a/swh/graphql/resolvers/base_connection.py b/swh/graphql/resolvers/base_connection.py --- a/swh/graphql/resolvers/base_connection.py +++ b/swh/graphql/resolvers/base_connection.py @@ -41,9 +41,6 @@ self.kwargs = kwargs self._paged_data = paged_data - def __call__(self, *args, **kw): - return self - @property def edges(self): return self._get_edges() @@ -58,7 +55,9 @@ """ if self._node_class is not None: return [ - self._node_class(self, self.info, node_data=result, **self.kwargs) + self._node_class( + obj=self, info=self.info, node_data=result, **self.kwargs + ) for result in self.get_paged_data().results ] return self.get_paged_data().results diff --git a/swh/graphql/resolvers/base_node.py b/swh/graphql/resolvers/base_node.py --- a/swh/graphql/resolvers/base_node.py +++ b/swh/graphql/resolvers/base_node.py @@ -25,8 +25,8 @@ def _get_node(self, node_data): """ Get the node object from the given data - if the data (node_data) is none make - a function call to get data from backend + if the data (node_data) is none make a function call + to get data from backend """ if node_data is None: node_data = self._get_node_data() @@ -52,22 +52,18 @@ if self._node is None: raise ObjectNotFoundError("Requested object is not available") - def __call__(self, *args, **kw): - return self - def _get_node_data(self): """ Override for desired behaviour - This will be called only when - node_data is None + This will be called only when node_data is None """ # FIXME, make this call async (not for v1) return None def __getattr__(self, name): """ - Any property defined in the sub-class - will get precedence over the _node attributes + Any property defined in the sub-class will get precedence over + the _node attributes """ return getattr(self._node, name) diff --git a/swh/graphql/resolvers/content.py b/swh/graphql/resolvers/content.py --- a/swh/graphql/resolvers/content.py +++ b/swh/graphql/resolvers/content.py @@ -55,5 +55,5 @@ obj: Union[DirectoryEntryNode, BaseReleaseNode, SnapshotBranchNode] def _get_node_data(self): - content_id = self.obj.targetHash + content_id = self.obj.target_hash return self._get_content_by_id(content_id) diff --git a/swh/graphql/resolvers/directory.py b/swh/graphql/resolvers/directory.py --- a/swh/graphql/resolvers/directory.py +++ b/swh/graphql/resolvers/directory.py @@ -52,8 +52,8 @@ obj: BaseRevisionNode def _get_node_data(self): - # self.obj.directorySWHID is the requested directory SWHID - directory_id = self.obj.directorySWHID.object_id + # self.obj.directory_swhid is the requested directory SWHID + directory_id = self.obj.directory_swhid.object_id return self._get_directory_by_id(directory_id) @@ -67,4 +67,4 @@ obj: Union[SnapshotBranchNode, BaseReleaseNode, DirectoryEntryNode] def _get_node_data(self): - return self._get_directory_by_id(self.obj.targetHash) + return self._get_directory_by_id(self.obj.target_hash) diff --git a/swh/graphql/resolvers/directory_entry.py b/swh/graphql/resolvers/directory_entry.py --- a/swh/graphql/resolvers/directory_entry.py +++ b/swh/graphql/resolvers/directory_entry.py @@ -16,7 +16,7 @@ """ @property - def targetHash(self): # To support the schema naming convention + def target_hash(self): # for DirectoryNode return self._node.target diff --git a/swh/graphql/resolvers/release.py b/swh/graphql/resolvers/release.py --- a/swh/graphql/resolvers/release.py +++ b/swh/graphql/resolvers/release.py @@ -20,7 +20,7 @@ return (archive.Archive().get_releases([release_id]) or None)[0] @property - def targetHash(self): # To support the schema naming convention + def target_hash(self): return self._node.target @property @@ -50,5 +50,5 @@ obj: Union[SnapshotBranchNode, BaseReleaseNode] def _get_node_data(self): - # self.obj.targetHash is the requested release id - return self._get_release_by_id(self.obj.targetHash) + # self.obj.target_hash is the requested release id + return self._get_release_by_id(self.obj.target_hash) diff --git a/swh/graphql/resolvers/resolvers.py b/swh/graphql/resolvers/resolvers.py --- a/swh/graphql/resolvers/resolvers.py +++ b/swh/graphql/resolvers/resolvers.py @@ -9,8 +9,11 @@ # Any schema attribute can be resolved by any of the following ways # and in the following priority order -# - In this module using a decorator (eg: @visitstatus.field("snapshot")) +# - In this module using a decorator (eg: @visitstatus.field("snapshot") +# Every object (type) is expected to resolve this way as they can accept arguments +# eg: origin.visits takes arguments to paginate # - As a property in the Node object (eg: resolvers.visit.BaseVisitNode.id) +# Every scalar is expected to resolve this way # - As an attribute/item in the object/dict returned by a backend (eg: Origin.url) from ariadne import ObjectType, UnionType @@ -45,7 +48,7 @@ def origin_resolver(obj: None, info: GraphQLResolveInfo, **kw) -> rs.origin.OriginNode: """ """ resolver = get_node_resolver("origin") - return resolver(obj, info, **kw)() + return resolver(obj, info, **kw) @origin.field("latestVisit") @@ -54,7 +57,7 @@ ) -> rs.visit.LatestVisitNode: """ """ resolver = get_node_resolver("latest-visit") - return resolver(obj, info, **kw)() + return resolver(obj, info, **kw) @query.field("visit") @@ -63,7 +66,7 @@ ) -> rs.visit.OriginVisitNode: """ """ resolver = get_node_resolver("visit") - return resolver(obj, info, **kw)() + return resolver(obj, info, **kw) @visit.field("latestStatus") @@ -72,7 +75,7 @@ ) -> rs.visit_status.LatestVisitStatusNode: """ """ resolver = get_node_resolver("latest-status") - return resolver(obj, info, **kw)() + return resolver(obj, info, **kw) @query.field("snapshot") @@ -81,7 +84,7 @@ ) -> rs.snapshot.SnapshotNode: """ """ resolver = get_node_resolver("snapshot") - return resolver(obj, info, **kw)() + return resolver(obj, info, **kw) @visit_status.field("snapshot") @@ -89,7 +92,7 @@ obj, info: GraphQLResolveInfo, **kw ) -> rs.snapshot.VisitSnapshotNode: resolver = get_node_resolver("visit-snapshot") - return resolver(obj, info, **kw)() + return resolver(obj, info, **kw) @snapshot_branch.field("target") @@ -101,7 +104,7 @@ """ resolver_type = f"branch-{obj.type}" resolver = get_node_resolver(resolver_type) - return resolver(obj, info, **kw)() + return resolver(obj, info, **kw) @query.field("revision") @@ -109,7 +112,7 @@ obj: None, info: GraphQLResolveInfo, **kw ) -> rs.revision.RevisionNode: resolver = get_node_resolver("revision") - return resolver(obj, info, **kw)() + return resolver(obj, info, **kw) @revision.field("directory") @@ -117,7 +120,7 @@ obj, info: GraphQLResolveInfo, **kw ) -> rs.directory.RevisionDirectoryNode: resolver = get_node_resolver("revision-directory") - return resolver(obj, info, **kw)() + return resolver(obj, info, **kw) @query.field("release") @@ -125,7 +128,7 @@ obj: None, info: GraphQLResolveInfo, **kw ) -> rs.release.ReleaseNode: resolver = get_node_resolver("release") - return resolver(obj, info, **kw)() + return resolver(obj, info, **kw) @release.field("target") @@ -138,7 +141,7 @@ """ resolver_type = f"release-{obj.target_type.value}" resolver = get_node_resolver(resolver_type) - return resolver(obj, info, **kw)() + return resolver(obj, info, **kw) @query.field("directory") @@ -146,7 +149,7 @@ obj: None, info: GraphQLResolveInfo, **kw ) -> rs.directory.DirectoryNode: resolver = get_node_resolver("directory") - return resolver(obj, info, **kw)() + return resolver(obj, info, **kw) @directory_entry.field("target") @@ -158,7 +161,7 @@ """ resolver_type = f"dir-entry-{obj.type}" resolver = get_node_resolver(resolver_type) - return resolver(obj, info, **kw)() + return resolver(obj, info, **kw) @query.field("content") @@ -166,7 +169,7 @@ obj: None, info: GraphQLResolveInfo, **kw ) -> rs.content.ContentNode: resolver = get_node_resolver("content") - return resolver(obj, info, **kw)() + return resolver(obj, info, **kw) # Connection resolvers @@ -178,7 +181,7 @@ obj: None, info: GraphQLResolveInfo, **kw ) -> rs.origin.OriginConnection: resolver = get_connection_resolver("origins") - return resolver(obj, info, **kw)() + return resolver(obj, info, **kw) @origin.field("visits") @@ -186,7 +189,7 @@ obj: rs.origin.OriginNode, info: GraphQLResolveInfo, **kw ) -> rs.visit.OriginVisitConnection: resolver = get_connection_resolver("origin-visits") - return resolver(obj, info, **kw)() + return resolver(obj, info, **kw) @origin.field("snapshots") @@ -195,7 +198,7 @@ ) -> rs.snapshot.OriginSnapshotConnection: """ """ resolver = get_connection_resolver("origin-snapshots") - return resolver(obj, info, **kw)() + return resolver(obj, info, **kw) @visit.field("status") @@ -203,7 +206,7 @@ obj, info: GraphQLResolveInfo, **kw ) -> rs.visit_status.VisitStatusConnection: resolver = get_connection_resolver("visit-status") - return resolver(obj, info, **kw)() + return resolver(obj, info, **kw) @snapshot.field("branches") @@ -211,7 +214,7 @@ obj, info: GraphQLResolveInfo, **kw ) -> rs.snapshot_branch.SnapshotBranchConnection: resolver = get_connection_resolver("snapshot-branches") - return resolver(obj, info, **kw)() + return resolver(obj, info, **kw) @revision.field("parents") @@ -219,13 +222,13 @@ obj, info: GraphQLResolveInfo, **kw ) -> rs.revision.ParentRevisionConnection: resolver = get_connection_resolver("revision-parents") - return resolver(obj, info, **kw)() + return resolver(obj, info, **kw) # @revision.field("revisionLog") # def revision_log_resolver(obj, info, **kw): # resolver = get_connection_resolver("revision-log") -# return resolver(obj, info, **kw)() +# return resolver(obj, info, **kw) @directory.field("entries") @@ -233,7 +236,7 @@ obj, info: GraphQLResolveInfo, **kw ) -> rs.directory_entry.DirectoryEntryConnection: resolver = get_connection_resolver("directory-entries") - return resolver(obj, info, **kw)() + return resolver(obj, info, **kw) # Any other type of resolver diff --git a/swh/graphql/resolvers/revision.py b/swh/graphql/resolvers/revision.py --- a/swh/graphql/resolvers/revision.py +++ b/swh/graphql/resolvers/revision.py @@ -24,14 +24,14 @@ return (archive.Archive().get_revisions([revision_id]) or None)[0] @property - def parentSWHIDs(self): # To support the schema naming convention + def parent_swhids(self): # for ParentRevisionConnection resolver return [ CoreSWHID(object_type=ObjectType.REVISION, object_id=parent_id) for parent_id in self._node.parents ] @property - def directorySWHID(self): # To support the schema naming convention + def directory_swhid(self): # for RevisionDirectoryNode resolver return CoreSWHID( object_type=ObjectType.DIRECTORY, object_id=self._node.directory ) @@ -63,8 +63,8 @@ obj: Union[SnapshotBranchNode, BaseReleaseNode] def _get_node_data(self): - # self.obj.targetHash is the requested revision id - return self._get_revision_by_id(self.obj.targetHash) + # self.obj.target_hash is the requested revision id + return self._get_revision_by_id(self.obj.target_hash) class ParentRevisionConnection(BaseConnection): @@ -78,13 +78,13 @@ def _get_paged_result(self): # self.obj is the current(child) revision - # self.obj.parentSWHIDs is the list of parent SWHIDs + # self.obj.parent_swhids is the list of parent SWHIDs # FIXME, using dummy(local) pagination, move pagination to backend # To remove localpagination, just drop the paginated call # STORAGE-TODO (pagination) parents = archive.Archive().get_revisions( - [x.object_id for x in self.obj.parentSWHIDs] + [x.object_id for x in self.obj.parent_swhids] ) return utils.paginated(parents, self._get_first_arg(), self._get_after_arg()) diff --git a/swh/graphql/resolvers/snapshot.py b/swh/graphql/resolvers/snapshot.py --- a/swh/graphql/resolvers/snapshot.py +++ b/swh/graphql/resolvers/snapshot.py @@ -68,7 +68,7 @@ obj: Union[BaseVisitStatusNode, SnapshotBranchNode] def _get_node_data(self): - snapshot_id = self.obj.targetHash + snapshot_id = self.obj.target_hash return self._get_snapshot_by_id(snapshot_id) diff --git a/swh/graphql/resolvers/snapshot_branch.py b/swh/graphql/resolvers/snapshot_branch.py --- a/swh/graphql/resolvers/snapshot_branch.py +++ b/swh/graphql/resolvers/snapshot_branch.py @@ -35,7 +35,7 @@ return namedtuple("NodeObj", node.keys())(*node.values()) @property - def targetHash(self): # To support the schema naming convention + def target_hash(self): return self._node.target