mirror of
https://github.com/ihabunek/toot.git
synced 2024-09-22 04:25:55 -04:00
164 lines
4.4 KiB
Python
164 lines
4.4 KiB
Python
import click
|
|
import json as pyjson
|
|
|
|
from toot import api
|
|
from toot.cli import cli, pass_context, json_option, Context
|
|
from toot.entities import Tag, from_dict
|
|
from toot.output import print_tag_list, print_warning
|
|
|
|
|
|
@cli.group()
|
|
def tags():
|
|
"""List, follow, and unfollow tags"""
|
|
|
|
|
|
@tags.command()
|
|
@click.argument("tag")
|
|
@json_option
|
|
@pass_context
|
|
def info(ctx: Context, tag, json: bool):
|
|
"""Show a hashtag and its associated information"""
|
|
tag = api.find_tag(ctx.app, ctx.user, tag)
|
|
|
|
if not tag:
|
|
raise click.ClickException("Tag not found")
|
|
|
|
if json:
|
|
click.echo(pyjson.dumps(tag))
|
|
else:
|
|
tag = from_dict(Tag, tag)
|
|
click.secho(f"#{tag.name}", fg="yellow")
|
|
click.secho(tag.url, italic=True)
|
|
if tag.following:
|
|
click.echo("Followed")
|
|
else:
|
|
click.echo("Not followed")
|
|
|
|
|
|
@tags.command()
|
|
@json_option
|
|
@pass_context
|
|
def followed(ctx: Context, json: bool):
|
|
"""List followed tags"""
|
|
tags = api.followed_tags(ctx.app, ctx.user)
|
|
if json:
|
|
click.echo(pyjson.dumps(tags))
|
|
else:
|
|
if tags:
|
|
print_tag_list(tags)
|
|
else:
|
|
click.echo("You're not following any hashtags")
|
|
|
|
|
|
@tags.command()
|
|
@click.argument("tag")
|
|
@json_option
|
|
@pass_context
|
|
def follow(ctx: Context, tag: str, json: bool):
|
|
"""Follow a hashtag"""
|
|
tag = tag.lstrip("#")
|
|
response = api.follow_tag(ctx.app, ctx.user, tag)
|
|
if json:
|
|
click.echo(response.text)
|
|
else:
|
|
click.secho(f"✓ You are now following #{tag}", fg="green")
|
|
|
|
|
|
@tags.command()
|
|
@click.argument("tag")
|
|
@json_option
|
|
@pass_context
|
|
def unfollow(ctx: Context, tag: str, json: bool):
|
|
"""Unfollow a hashtag"""
|
|
tag = tag.lstrip("#")
|
|
response = api.unfollow_tag(ctx.app, ctx.user, tag)
|
|
if json:
|
|
click.echo(response.text)
|
|
else:
|
|
click.secho(f"✓ You are no longer following #{tag}", fg="green")
|
|
|
|
|
|
@tags.command()
|
|
@json_option
|
|
@pass_context
|
|
def featured(ctx: Context, json: bool):
|
|
"""List hashtags featured on your profile."""
|
|
response = api.featured_tags(ctx.app, ctx.user)
|
|
if json:
|
|
click.echo(response.text)
|
|
else:
|
|
tags = response.json()
|
|
if tags:
|
|
print_tag_list(tags)
|
|
else:
|
|
click.echo("You don't have any featured hashtags")
|
|
|
|
|
|
@tags.command()
|
|
@click.argument("tag")
|
|
@json_option
|
|
@pass_context
|
|
def feature(ctx: Context, tag: str, json: bool):
|
|
"""Feature a hashtag on your profile"""
|
|
tag = tag.lstrip("#")
|
|
response = api.feature_tag(ctx.app, ctx.user, tag)
|
|
if json:
|
|
click.echo(response.text)
|
|
else:
|
|
click.secho(f"✓ Tag #{tag} is now featured", fg="green")
|
|
|
|
|
|
@tags.command()
|
|
@click.argument("tag")
|
|
@json_option
|
|
@pass_context
|
|
def unfeature(ctx: Context, tag: str, json: bool):
|
|
"""Unfollow a hashtag
|
|
|
|
TAG can either be a tag name like "#foo" or "foo" or a tag ID.
|
|
"""
|
|
featured_tag = api.find_featured_tag(ctx.app, ctx.user, tag)
|
|
|
|
# TODO: should this be idempotent?
|
|
if not featured_tag:
|
|
raise click.ClickException(f"Tag {tag} is not featured")
|
|
|
|
response = api.unfeature_tag(ctx.app, ctx.user, featured_tag["id"])
|
|
if json:
|
|
click.echo(response.text)
|
|
else:
|
|
click.secho(f"✓ Tag #{featured_tag['name']} is no longer featured", fg="green")
|
|
|
|
|
|
# -- Deprecated commands -------------------------------------------------------
|
|
|
|
@cli.command(name="tags_followed", hidden=True)
|
|
@pass_context
|
|
def tags_followed(ctx: Context):
|
|
"""List hashtags you follow"""
|
|
print_warning("`toot tags_followed` is deprecated in favour of `toot tags followed`")
|
|
response = api.followed_tags(ctx.app, ctx.user)
|
|
print_tag_list(response)
|
|
|
|
|
|
@cli.command(name="tags_follow", hidden=True)
|
|
@click.argument("tag")
|
|
@pass_context
|
|
def tags_follow(ctx: Context, tag: str):
|
|
"""Follow a hashtag"""
|
|
print_warning("`toot tags_follow` is deprecated in favour of `toot tags follow`")
|
|
tag = tag.lstrip("#")
|
|
api.follow_tag(ctx.app, ctx.user, tag)
|
|
click.secho(f"✓ You are now following #{tag}", fg="green")
|
|
|
|
|
|
@cli.command(name="tags_unfollow", hidden=True)
|
|
@click.argument("tag")
|
|
@pass_context
|
|
def tags_unfollow(ctx: Context, tag: str):
|
|
"""Unfollow a hashtag"""
|
|
print_warning("`toot tags_unfollow` is deprecated in favour of `toot tags unfollow`")
|
|
tag = tag.lstrip("#")
|
|
api.unfollow_tag(ctx.app, ctx.user, tag)
|
|
click.secho(f"✓ You are no longer following #{tag}", fg="green")
|