Introduction
Introduction Statistics Contact Development Disclaimer Help
Add whoami command - toot - Unnamed repository; edit this file 'description' to…
Log
Files
Refs
LICENSE
---
commit a666689c8d7c53e15fdf2c639903ed0fd110e36c
parent 2c121b2df4717b64a7e9c809420dde7af0c6fe9b
Author: Ivan Habunek <[email protected]>
Date: Sun, 16 Apr 2017 17:52:54 +0200
Add whoami command
Diffstat:
README.rst | 3 ++-
tests/test_console.py | 47 +++++++++++++++++++++++++++++++
toot/api.py | 4 ++++
toot/console.py | 36 +++++++++++++++++++++++++++----
4 files changed, 85 insertions(+), 5 deletions(-)
---
diff --git a/README.rst b/README.rst
@@ -35,7 +35,8 @@ Running ``toot <command> -h`` shows the documentation for the…
=================== =========================================================…
``toot login`` Log into a Mastodon instance, saves access keys for late…
``toot logout`` Log out, deletes stored access keys.
- ``toot auth`` Display current login details.
+ ``toot auth`` Display stored authenitication tokens.
+ ``toot whoami`` Display logged in user details.
``toot post`` Post a status to your timeline.
``toot search`` Search for accounts or hashtags.
``toot timeline`` Display recent items in your public timeline.
diff --git a/tests/test_console.py b/tests/test_console.py
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
import pytest
import requests
+import re
from toot import console, User, App
@@ -10,6 +11,11 @@ app = App('https://habunek.com', 'foo', 'bar')
user = User('[email protected]', 'xxx')
+def uncolorize(text):
+ """Remove ANSI color sequences from a string"""
+ return re.sub(r'\x1b[^m]*m', '', text)
+
+
def test_print_usagecap(capsys):
console.print_usage()
out, err = capsys.readouterr()
@@ -263,3 +269,44 @@ def test_unfollow_not_found(monkeypatch, capsys):
out, err = capsys.readouterr()
assert "Account not found" in err
+
+
+def test_whoami(monkeypatch, capsys):
+ def mock_get(url, params, headers=None):
+ assert url == 'https://habunek.com/api/v1/accounts/verify_credentials'
+ assert headers == {'Authorization': 'Bearer xxx'}
+ assert params is None
+
+ return MockResponse({
+ 'acct': 'ihabunek',
+ 'avatar': 'https://files.mastodon.social/accounts/avatars/000/046/…
+ 'avatar_static': 'https://files.mastodon.social/accounts/avatars/0…
+ 'created_at': '2017-04-04T13:23:09.777Z',
+ 'display_name': 'Ivan Habunek',
+ 'followers_count': 5,
+ 'following_count': 9,
+ 'header': '/headers/original/missing.png',
+ 'header_static': '/headers/original/missing.png',
+ 'id': 46103,
+ 'locked': False,
+ 'note': 'A developer.',
+ 'statuses_count': 19,
+ 'url': 'https://mastodon.social/@ihabunek',
+ 'username': 'ihabunek'
+ })
+
+ monkeypatch.setattr(requests, 'get', mock_get)
+
+ console.cmd_whoami(app, user, [])
+
+ out, err = capsys.readouterr()
+ out = uncolorize(out)
+
+ assert "@ihabunek Ivan Habunek" in out
+ assert "A developer." in out
+ assert "https://mastodon.social/@ihabunek" in out
+ assert "ID: 46103" in out
+ assert "Since: 2017-04-04 @ 13:23:09" in out
+ assert "Followers: 5" in out
+ assert "Following: 9" in out
+ assert "Statuses: 19" in out
diff --git a/toot/api.py b/toot/api.py
@@ -151,3 +151,7 @@ def unfollow(app, user, account):
url = '/api/v1/accounts/%d/unfollow' % account
return _post(app, user, url)
+
+
+def verify_credentials(app, user):
+ return _get(app, user, '/api/v1/accounts/verify_credentials')
diff --git a/toot/console.py b/toot/console.py
@@ -36,6 +36,10 @@ def yellow(text):
return u"\033[33m{}\033[0m".format(text)
+def blue(text):
+ return u"\033[34m{}\033[0m".format(text)
+
+
def print_error(text):
print(red(text), file=sys.stderr)
@@ -80,10 +84,11 @@ def print_usage():
print("toot - interact with Mastodon from the command line")
print("")
print("Usage:")
- print(" toot login - log into a Mastodon instance (saves access toke…
- print(" toot logout - log out (delete saved access tokens)")
- print(" toot auth - shows currently logged in user and instance")
- print(" toot post <msg> - toot a new post to your timeline")
+ print(" toot login - log into a Mastodon instance (stores access tok…
+ print(" toot logout - log out (delete stored access tokens)")
+ print(" toot auth - display stored authentication tokens")
+ print(" toot whoami - display logged in user details")
+ print(" toot post - toot a new post to your timeline")
print(" toot search - search for accounts or hashtags")
print(" toot timeline - shows your public timeline")
print(" toot follow - follow an account")
@@ -322,6 +327,26 @@ def cmd_unfollow(app, user, args):
print(green(u"✓ You are no longer following %s" % args.account))
+def cmd_whoami(app, user, args):
+ parser = ArgumentParser(prog="toot whoami",
+ description="Display logged in user details",
+ epilog="https://github.com/ihabunek/toot")
+ parser.parse_args(args)
+
+ response = api.verify_credentials(app, user)
+
+ 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 run_command(command, args):
app = load_app()
user = load_user()
@@ -360,6 +385,9 @@ def run_command(command, args):
if command == 'unfollow':
return cmd_unfollow(app, user, args)
+ if command == 'whoami':
+ return cmd_whoami(app, user, args)
+
print_error("Unknown command '{}'\n".format(command))
print_usage()
You are viewing proxied material from vernunftzentrum.de. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.