1
0
mirror of https://github.com/ihabunek/toot synced 2025-02-01 11:56:48 +01:00

Remove tags timeline command, moved to timelines tag

This commit is contained in:
Ivan Habunek 2025-01-21 12:14:05 +01:00
parent 50f05c5072
commit 2e96d6146b
No known key found for this signature in database
GPG Key ID: 01DB3DD0D824504C

View File

@ -1,15 +1,11 @@
import json as pyjson import json as pyjson
from typing import Optional
from urllib.parse import quote
import click import click
from toot import api, http from toot import api
from toot.cli import Context, cli, json_option, pass_context from toot.cli import Context, cli, json_option, pass_context
from toot.cli.validators import validate_positive from toot.entities import Tag, from_dict
from toot.entities import Status, Tag, from_dict, from_response_list, from_responses_batched from toot.output import print_tag_list
from toot.output import get_continue, green, print_tag_list, print_timeline, yellow
from toot.utils import drop_empty_values, str_bool_nullable
@cli.group() @cli.group()
@ -133,105 +129,3 @@ def unfeature(ctx: Context, tag: str, json: bool):
click.echo(response.text) click.echo(response.text)
else: else:
click.secho(f"✓ Tag #{featured_tag['name']} is no longer featured", fg="green") click.secho(f"✓ Tag #{featured_tag['name']} is no longer featured", fg="green")
@tags.command()
@click.argument("tag_name")
@click.option(
"-l",
"--local",
is_flag=True,
help="Return only local statuses",
)
@click.option(
"-r",
"--remote",
is_flag=True,
help="Return only remote statuses",
)
@click.option(
"-m",
"--media",
is_flag=True,
help="Return only statuses with media attachments",
)
@click.option(
"-n",
"--limit",
type=int,
default=20,
help="Number of results to fetch per request [max: 40]",
)
@click.option(
"-p",
"--pager",
help="Page the results, optionally define how many results to show per page",
type=int,
callback=validate_positive,
is_flag=False,
flag_value=10,
)
@click.option(
"-c",
"--clear",
help="Clear the screen before printing",
is_flag=True,
)
@json_option
@pass_context
def timeline(
ctx: Context,
tag_name: str,
local: bool,
remote: bool,
media: bool,
limit: int,
pager: Optional[int],
clear: bool,
json: bool,
):
"""View hashtag timeline"""
# TODO: Add `any`, `all`, and `none` params
# TODO: Add `max_id`, `since_id`, and `min_id` params
path = f"/api/v1/timelines/tag/{quote(tag_name)}"
params = drop_empty_values(
{
"local": str_bool_nullable(local),
"remote": str_bool_nullable(remote),
"media": str_bool_nullable(media),
"limit": limit,
}
)
if json:
response = http.get(ctx.app, ctx.user, path, params)
click.echo(response.text)
return
if pager:
first = True
printed_any = False
responses = http.get_paged(ctx.app, ctx.user, path, params)
for page in from_responses_batched(responses, Status, pager):
if not first and not get_continue():
break
if clear:
click.clear()
print_timeline(page)
first = False
printed_any = True
if not printed_any:
click.echo("No statuses found containing the given tag")
return
response = http.get(ctx.app, ctx.user, path, params)
statuses = from_response_list(Status, response)
if statuses:
print_timeline(statuses)
if len(statuses) == limit:
click.secho("There may be more results. Increase the --limit or use --pager to see the rest.", dim=True)
else:
click.echo("No statuses found containing the given tag")