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): | async def simple_traversal(self, ttype, direction, edges_fmt, src, max_edges): | ||||
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): | async for node_id in method(direction, edges_fmt, src, max_edges): | ||||
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): | ||||
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 | ||||
) | ) | ||||
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) | ||||
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): | async def visit_edges(self, direction, edges_fmt, src, max_edges): | ||||
it = self.stream_proxy.visit_edges(direction, edges_fmt, src) | 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: | ||||
if prevNode is not None: | if prevNode is not None: | ||||
yield (prevNode, node) | yield (prevNode, node) | ||||
prevNode = None | prevNode = None | ||||
else: | else: | ||||
prevNode = node | prevNode = node | ||||
async def visit_paths(self, direction, edges_fmt, src): | async def visit_paths(self, direction, edges_fmt, src, max_edges): | ||||
path = [] | path = [] | ||||
async for node in self.stream_proxy.visit_paths(direction, edges_fmt, src): | async for node in self.stream_proxy.visit_paths( | ||||
direction, edges_fmt, src, max_edges | |||||
): | |||||
if node == PATH_SEPARATOR_ID: | if node == PATH_SEPARATOR_ID: | ||||
yield path | yield path | ||||
path = [] | path = [] | ||||
else: | else: | ||||
path.append(node) | path.append(node) | ||||
class JavaStreamProxy: | class JavaStreamProxy: | ||||
▲ Show 20 Lines • Show All 78 Lines • Show Last 20 Lines |