From 3864563520a83ee1ec5a326f9304d5e10ad27bdb Mon Sep 17 00:00:00 2001 From: Ivan Habunek Date: Sat, 15 Apr 2017 12:39:14 +0200 Subject: [PATCH] Add --visibility option to post command --- README.rst | 6 ++++++ toot/__init__.py | 5 ++--- toot/console.py | 9 ++++++++- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/README.rst b/README.rst index fdb943a..54ccd71 100644 --- a/README.rst +++ b/README.rst @@ -73,3 +73,9 @@ To post a new status to your timeline: Optionally attach an image or video to the status: toot post "Hello world!" --media=path/to/world.jpg + +To set post visibility: + + toot post "Hello world!" --visibility=unlisted + +Possible visibility values are: ``public`` (default), ``unlisted``, ``private``, ``direct``. They are documented `here `_. diff --git a/toot/__init__.py b/toot/__init__.py index 34bbaaf..759fd48 100644 --- a/toot/__init__.py +++ b/toot/__init__.py @@ -7,10 +7,8 @@ from requests import Request, Session App = namedtuple('App', ['base_url', 'client_id', 'client_secret']) User = namedtuple('User', ['username', 'access_token']) -APP_NAME = 'toot' DEFAULT_INSTANCE = 'mastodon.social' - logger = logging.getLogger('toot') @@ -94,10 +92,11 @@ def login(app, username, password): return User(username, access_token) -def post_status(app, user, status, media_ids=None): +def post_status(app, user, status, visibility='public', media_ids=None): return _post(app, user, '/api/v1/statuses', { 'status': status, 'media_ids[]': media_ids, + 'visibility': visibility, }) diff --git a/toot/console.py b/toot/console.py index 2a265fe..baa54fb 100644 --- a/toot/console.py +++ b/toot/console.py @@ -145,19 +145,26 @@ def cmd_post_status(app, user): parser.add_option("-m", "--media", dest="media", type="string", help="path to the media file to attach") + parser.add_option("-v", "--visibility", dest="visibility", type="string", default="public", + help='post visibility, either "public" (default), "direct", "private", or "unlisted"') + (options, args) = parser.parse_args() if len(args) < 2: parser.print_help() raise ConsoleError("No text given") + if options.visibility not in ['public', 'unlisted', 'private', 'direct']: + raise ConsoleError("Invalid visibility value given: '{}'".format(options.visibility)) + if options.media: media = do_upload(app, user, options.media) media_ids = [media['id']] else: media_ids = None - response = post_status(app, user, args[1], media_ids=media_ids) + response = post_status( + app, user, args[1], media_ids=media_ids, visibility=options.visibility) print("Toot posted: " + green(response.get('url')))