Changeset View
Changeset View
Standalone View
Standalone View
swh/graph/server/app.py
Show First 20 Lines • Show All 241 Lines • ▼ Show 20 Lines | class WalkView(StreamingGraphView): | ||||
async def prepare_response(self): | async def prepare_response(self): | ||||
self.src = self.request.match_info["src"] | self.src = self.request.match_info["src"] | ||||
self.dst = self.request.match_info["dst"] | self.dst = self.request.match_info["dst"] | ||||
self.edges = self.get_edges() | self.edges = self.get_edges() | ||||
self.direction = self.get_direction() | self.direction = self.get_direction() | ||||
self.algo = self.get_traversal() | self.algo = self.get_traversal() | ||||
self.limit = self.get_limit() | self.limit = self.get_limit() | ||||
self.max_edges = self.get_max_edges() | |||||
self.return_types = self.get_return_types() | |||||
self.check_swhid(self.src) | self.check_swhid(self.src) | ||||
if self.dst not in EXTENDED_SWHID_TYPES: | if self.dst not in EXTENDED_SWHID_TYPES: | ||||
self.check_swhid(self.dst) | self.check_swhid(self.dst) | ||||
async def get_walk_iterator(self): | async def get_walk_iterator(self): | ||||
return self.backend.traversal( | return self.backend.traversal( | ||||
"walk", self.direction, self.edges, self.algo, self.src, self.dst | "walk", | ||||
self.direction, | |||||
self.edges, | |||||
self.algo, | |||||
self.src, | |||||
self.dst, | |||||
self.max_edges, | |||||
self.return_types, | |||||
) | ) | ||||
async def stream_response(self): | async def stream_response(self): | ||||
it = self.get_walk_iterator() | it = self.get_walk_iterator() | ||||
if self.limit < 0: | if self.limit < 0: | ||||
queue = deque(maxlen=-self.limit) | queue = deque(maxlen=-self.limit) | ||||
async for res_swhid in it: | async for res_swhid in it: | ||||
queue.append(res_swhid) | queue.append(res_swhid) | ||||
Show All 13 Lines | class RandomWalkView(WalkView): | ||||
def get_walk_iterator(self): | def get_walk_iterator(self): | ||||
return self.backend.traversal( | return self.backend.traversal( | ||||
"random_walk", | "random_walk", | ||||
self.direction, | self.direction, | ||||
self.edges, | self.edges, | ||||
RANDOM_RETRIES, | RANDOM_RETRIES, | ||||
self.src, | self.src, | ||||
self.dst, | self.dst, | ||||
self.max_edges, | |||||
self.return_types, | |||||
) | ) | ||||
class CountView(GraphView): | class CountView(GraphView): | ||||
"""Base class for counting views.""" | """Base class for counting views.""" | ||||
count_type: Optional[str] = None | count_type: Optional[str] = None | ||||
async def get(self): | async def get(self): | ||||
self.src = self.request.match_info["src"] | self.src = self.request.match_info["src"] | ||||
self.check_swhid(self.src) | self.check_swhid(self.src) | ||||
self.edges = self.get_edges() | self.edges = self.get_edges() | ||||
self.direction = self.get_direction() | self.direction = self.get_direction() | ||||
self.max_edges = self.get_max_edges() | |||||
loop = asyncio.get_event_loop() | loop = asyncio.get_event_loop() | ||||
cnt = await loop.run_in_executor( | cnt = await loop.run_in_executor( | ||||
None, | None, | ||||
self.backend.count, | self.backend.count, | ||||
self.count_type, | self.count_type, | ||||
self.direction, | self.direction, | ||||
self.edges, | self.edges, | ||||
self.src, | self.src, | ||||
self.max_edges, | |||||
) | ) | ||||
return aiohttp.web.Response(body=str(cnt), content_type="application/json") | return aiohttp.web.Response(body=str(cnt), content_type="application/json") | ||||
class CountNeighborsView(CountView): | class CountNeighborsView(CountView): | ||||
count_type = "neighbors" | count_type = "neighbors" | ||||
▲ Show 20 Lines • Show All 43 Lines • Show Last 20 Lines |