From 88bd6df85bdd610a33973cf420f875041cf85524 Mon Sep 17 00:00:00 2001 From: Ivan Habunek Date: Wed, 28 Jun 2023 12:08:54 +0200 Subject: [PATCH] Migrate thread command --- toot/aapi.py | 10 ++++++++++ toot/commands.py | 31 ++++++++++++++++++++----------- 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/toot/aapi.py b/toot/aapi.py index 6dbb945..7ad3861 100644 --- a/toot/aapi.py +++ b/toot/aapi.py @@ -116,3 +116,13 @@ async def post_status( } return await request(ctx, "POST", "/api/v1/statuses", json=data, headers=headers) + + +async def get_status(ctx: Context, status_id) -> Response: + url = f"/api/v1/statuses/{status_id}" + return await request(ctx, "GET", url) + + +async def get_status_context(ctx: Context, status_id) -> Response: + url = f"/api/v1/statuses/{status_id}/context" + return await request(ctx, "GET", url) diff --git a/toot/commands.py b/toot/commands.py index 82867c7..c0c72b6 100644 --- a/toot/commands.py +++ b/toot/commands.py @@ -1,4 +1,5 @@ +import asyncio import sys import platform @@ -68,20 +69,28 @@ def timeline(app, user, args, generator=None): break -def thread(app, user, args): - toot = api.single_status(app, user, args.status_id) - context = api.context(app, user, args.status_id) - thread = [] - for item in context['ancestors']: - thread.append(item) +async def thread(ctx: Context, args): + if args.json: + context_response = await aapi.get_status_context(ctx, args.status_id) + print_out(context_response.body) + else: + status_response, context_response = await asyncio.gather( + aapi.get_status(ctx, args.status_id), + aapi.get_status_context(ctx, args.status_id), + ) + status = status_response.json + context = context_response.json + thread = [] + for item in context["ancestors"]: + thread.append(item) - thread.append(toot) + thread.append(status) - for item in context['descendants']: - thread.append(item) + for item in context["descendants"]: + thread.append(item) - statuses = [from_dict(Status, s) for s in thread] - print_timeline(statuses) + statuses = [from_dict(Status, s) for s in thread] + print_timeline(statuses) async def post(ctx, args):