Changeset View
Changeset View
Standalone View
Standalone View
swh/graph/http_rpc_server.py
Show First 20 Lines • Show All 138 Lines • ▼ Show 20 Lines | def get_return_types(self): | ||||
) | ) | ||||
# if the user puts a star, | # if the user puts a star, | ||||
# then we filter nothing, we don't need the other information | # then we filter nothing, we don't need the other information | ||||
if "*" in s: | if "*" in s: | ||||
return "*" | return "*" | ||||
else: | else: | ||||
return s | return s | ||||
def get_limit(self): | def get_max_matching_nodes(self): | ||||
"""Validate HTTP query parameter `limit`, i.e., number of results""" | """Validate HTTP query parameter `max_matching_nodes`, i.e., number of results""" | ||||
s = self.request.query.get("limit", "0") | s = self.request.query.get("max_matching_nodes", "0") | ||||
try: | try: | ||||
return int(s) | return int(s) | ||||
except ValueError: | except ValueError: | ||||
raise aiohttp.web.HTTPBadRequest(text=f"invalid limit value: {s}") | raise aiohttp.web.HTTPBadRequest( | ||||
text=f"invalid max_matching_nodes value: {s}" | |||||
) | |||||
def get_max_edges(self): | def get_max_edges(self): | ||||
"""Validate HTTP query parameter 'max_edges', i.e., | """Validate HTTP query parameter 'max_edges', i.e., | ||||
the limit of the number of edges that can be visited""" | the limit of the number of edges that can be visited""" | ||||
s = self.request.query.get("max_edges", "0") | s = self.request.query.get("max_edges", "0") | ||||
try: | try: | ||||
return int(s) | return int(s) | ||||
except ValueError: | except ValueError: | ||||
▲ Show 20 Lines • Show All 82 Lines • ▼ Show 20 Lines | class SimpleTraversalView(StreamingGraphView): | ||||
async def prepare_response(self): | async def prepare_response(self): | ||||
src = self.request.match_info["src"] | src = self.request.match_info["src"] | ||||
self.traversal_request = TraversalRequest( | self.traversal_request = TraversalRequest( | ||||
src=[src], | src=[src], | ||||
edges=self.get_edges(), | edges=self.get_edges(), | ||||
direction=self.get_direction(), | direction=self.get_direction(), | ||||
return_nodes=NodeFilter(types=self.get_return_types()), | return_nodes=NodeFilter(types=self.get_return_types()), | ||||
mask=FieldMask(paths=["swhid"]), | mask=FieldMask(paths=["swhid"]), | ||||
max_matching_nodes=self.get_max_matching_nodes(), | |||||
) | ) | ||||
if self.get_max_edges(): | if self.get_max_edges(): | ||||
self.traversal_request.max_edges = self.get_max_edges() | self.traversal_request.max_edges = self.get_max_edges() | ||||
await self.check_swhid(src) | await self.check_swhid(src) | ||||
self.configure_request() | self.configure_request() | ||||
self.nodes_stream = self.rpc_client.Traverse(self.traversal_request) | self.nodes_stream = self.rpc_client.Traverse(self.traversal_request) | ||||
# Force gRPC to query the server and fetch the first nodes; so errors | # Force gRPC to query the server and fetch the first nodes; so errors | ||||
▲ Show 20 Lines • Show All 42 Lines • ▼ Show 20 Lines | class CountView(GraphView): | ||||
async def get(self): | async def get(self): | ||||
src = self.request.match_info["src"] | src = self.request.match_info["src"] | ||||
self.traversal_request = TraversalRequest( | self.traversal_request = TraversalRequest( | ||||
src=[src], | src=[src], | ||||
edges=self.get_edges(), | edges=self.get_edges(), | ||||
direction=self.get_direction(), | direction=self.get_direction(), | ||||
return_nodes=NodeFilter(types=self.get_return_types()), | return_nodes=NodeFilter(types=self.get_return_types()), | ||||
mask=FieldMask(paths=["swhid"]), | mask=FieldMask(paths=["swhid"]), | ||||
max_matching_nodes=self.get_max_matching_nodes(), | |||||
) | ) | ||||
if self.get_max_edges(): | if self.get_max_edges(): | ||||
self.traversal_request.max_edges = self.get_max_edges() | self.traversal_request.max_edges = self.get_max_edges() | ||||
self.configure_request() | self.configure_request() | ||||
res = await self.rpc_client.CountNodes(self.traversal_request) | res = await self.rpc_client.CountNodes(self.traversal_request) | ||||
return aiohttp.web.Response( | return aiohttp.web.Response( | ||||
body=str(res.count), content_type="application/json" | body=str(res.count), content_type="application/json" | ||||
) | ) | ||||
▲ Show 20 Lines • Show All 98 Lines • Show Last 20 Lines |