Add whois command - toot - Unnamed repository; edit this file 'description' to name the repository.
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) LICENSE
---
(DIR) commit 9b48432d04d7ea7904ede5e18b8790ec9765eb56
(DIR) parent e1c993b9d0f90eb4e9a426c6dcfe33bda15b5746
(HTM) Author: Ivan Habunek <ivan@habunek.com>
Date: Wed, 19 Apr 2017 15:29:40 +0200
Add whois command
Diffstat:
toot/commands.py | 42 +++++++++++++++++++++----------
toot/console.py | 13 +++++++++++++
2 files changed, 42 insertions(+), 13 deletions(-)
---
(DIR) diff --git a/toot/commands.py b/toot/commands.py
@@ -11,7 +11,7 @@ from datetime import datetime
from future.moves.itertools import zip_longest
from getpass import getpass
from itertools import chain
-from textwrap import TextWrapper
+from textwrap import TextWrapper, wrap
from toot import api, config, DEFAULT_INSTANCE, User, App, ConsoleError
from toot.output import green, yellow, print_error
@@ -260,13 +260,34 @@ def _do_upload(app, user, file):
def _find_account(app, user, account_name):
- """For a given account name, returns the Account object or None if not found."""
+ """For a given account name, returns the Account object or raises an exception if not found."""
response = api.search(app, user, account_name, False)
for account in response['accounts']:
if account['acct'] == account_name or "@" + account['acct'] == account_name:
return account
+ raise ConsoleError("Account not found")
+
+
+def _print_account(account):
+ print("{} {}".format(green("@" + account['acct']), account['display_name']))
+
+ if account['note']:
+ print("")
+ note = BeautifulSoup(account['note'], "html.parser")
+ print("\n".join(wrap(note.get_text())))
+
+ print("")
+ print("ID: " + green(account['id']))
+ print("Since: " + green(account['created_at'][:19].replace('T', ' @ ')))
+ print("")
+ print("Followers: " + yellow(account['followers_count']))
+ print("Following: " + yellow(account['following_count']))
+ print("Statuses: " + yellow(account['statuses_count']))
+ print("")
+ print(account['url'])
+
def follow(app, user, args):
account = _find_account(app, user, args.account)
@@ -293,15 +314,10 @@ def unfollow(app, user, args):
def whoami(app, user, args):
- response = api.verify_credentials(app, user)
+ account = api.verify_credentials(app, user)
+ _print_account(account)
- print("{} {}".format(green("@" + response['acct']), response['display_name']))
- print(response['note'])
- print(response['url'])
- print("")
- print("ID: " + green(response['id']))
- print("Since: " + green(response['created_at'][:19].replace('T', ' @ ')))
- print("")
- print("Followers: " + yellow(response['followers_count']))
- print("Following: " + yellow(response['following_count']))
- print("Statuses: " + yellow(response['statuses_count']))
+
+def whois(app, user, args):
+ account = _find_account(app, user, args.account)
+ _print_account(account)
(DIR) diff --git a/toot/console.py b/toot/console.py
@@ -58,6 +58,16 @@ COMMANDS = [
require_auth=True,
),
Command(
+ name="whois",
+ description="Display user details",
+ arguments=[
+ (["account"], {
+ "help": "account name or numeric ID"
+ }),
+ ],
+ require_auth=True,
+ ),
+ Command(
name="post",
description="Post a status text to your timeline",
arguments=[
@@ -178,6 +188,9 @@ def run_command(app, user, name, args):
fn = commands.__dict__.get(name)
+ if not fn:
+ raise NotImplementedError("Command '{}' does not have an implementation.".format(name))
+
return fn(app, user, parsed_args)