Changeset View
Changeset View
Standalone View
Standalone View
swh/graph/backend.py
Show First 20 Lines • Show All 62 Lines • ▼ Show 20 Lines | class Backend: | ||||
def stats(self): | def stats(self): | ||||
return self.entry.stats() | return self.entry.stats() | ||||
def count(self, ttype, direction, edges_fmt, src): | def count(self, ttype, direction, edges_fmt, src): | ||||
method = getattr(self.entry, "count_" + ttype) | method = getattr(self.entry, "count_" + ttype) | ||||
return method(direction, edges_fmt, src) | return method(direction, edges_fmt, src) | ||||
async def simple_traversal(self, ttype, direction, edges_fmt, src, max_edges): | async def simple_traversal( | ||||
self, ttype, direction, edges_fmt, src, max_edges, return_types | |||||
): | |||||
assert ttype in ("leaves", "neighbors", "visit_nodes") | assert ttype in ("leaves", "neighbors", "visit_nodes") | ||||
method = getattr(self.stream_proxy, ttype) | method = getattr(self.stream_proxy, ttype) | ||||
async for node_id in method(direction, edges_fmt, src, max_edges): | async for node_id in method(direction, edges_fmt, src, max_edges, return_types): | ||||
yield node_id | yield node_id | ||||
async def walk(self, direction, edges_fmt, algo, src, dst): | async def walk(self, direction, edges_fmt, algo, src, dst): | ||||
if dst in EXTENDED_SWHID_TYPES: | if dst in EXTENDED_SWHID_TYPES: | ||||
it = self.stream_proxy.walk_type(direction, edges_fmt, algo, src, dst) | it = self.stream_proxy.walk_type(direction, edges_fmt, algo, src, dst) | ||||
else: | else: | ||||
it = self.stream_proxy.walk(direction, edges_fmt, algo, src, dst) | it = self.stream_proxy.walk(direction, edges_fmt, algo, src, dst) | ||||
async for node_id in it: | async for node_id in it: | ||||
yield node_id | yield node_id | ||||
async def random_walk(self, direction, edges_fmt, retries, src, dst): | async def random_walk(self, direction, edges_fmt, retries, src, dst, return_types): | ||||
if dst in EXTENDED_SWHID_TYPES: | if dst in EXTENDED_SWHID_TYPES: | ||||
it = self.stream_proxy.random_walk_type( | it = self.stream_proxy.random_walk_type( | ||||
direction, edges_fmt, retries, src, dst | direction, edges_fmt, retries, src, dst, return_types | ||||
) | ) | ||||
else: | else: | ||||
it = self.stream_proxy.random_walk(direction, edges_fmt, retries, src, dst) | it = self.stream_proxy.random_walk( | ||||
direction, edges_fmt, retries, src, dst, return_types | |||||
) | |||||
async for node_id in it: # TODO return 404 if path is empty | async for node_id in it: # TODO return 404 if path is empty | ||||
yield node_id | yield node_id | ||||
async def visit_edges(self, direction, edges_fmt, src, max_edges): | async def visit_edges(self, direction, edges_fmt, src, max_edges): | ||||
it = self.stream_proxy.visit_edges(direction, edges_fmt, src, max_edges) | it = self.stream_proxy.visit_edges(direction, edges_fmt, src, max_edges) | ||||
# convert stream a, b, c, d -> (a, b), (c, d) | # convert stream a, b, c, d -> (a, b), (c, d) | ||||
prevNode = None | prevNode = None | ||||
async for node in it: | async for node in it: | ||||
▲ Show 20 Lines • Show All 97 Lines • Show Last 20 Lines |