Allow attaching media files to posts - toot - Unnamed repository; edit this file 'description' to name the repository.
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) LICENSE
---
(DIR) commit 8285abb04e97ca6a2fa1b741c4a2cc38671f300c
(DIR) parent c2625d536fd6fc7a8eba743a006fa42ddd7d99d7
(HTM) Author: Ivan Habunek <ivan@habunek.com>
Date: Sat, 15 Apr 2017 12:00:05 +0200
Allow attaching media files to posts
fixes #1
Diffstat:
README.rst | 4 ++++
toot/__init__.py | 5 +++--
toot/console.py | 41 ++++++++++++++++++++++---------
3 files changed, 36 insertions(+), 14 deletions(-)
---
(DIR) diff --git a/README.rst b/README.rst
@@ -69,3 +69,7 @@ To post a new status to your timeline:
.. code-block::
toot post "Hello world!"
+
+Optionally attach an image or video to the status:
+
+ toot post "Hello world!" --media=path/to/world.jpg
(DIR) diff --git a/toot/__init__.py b/toot/__init__.py
@@ -94,9 +94,10 @@ def login(app, username, password):
return User(username, access_token)
-def post_status(app, user, status):
+def post_status(app, user, status, media_ids=None):
return _post(app, user, '/api/v1/statuses', {
- 'status': status
+ 'status': status,
+ 'media_ids[]': media_ids,
})
(DIR) diff --git a/toot/console.py b/toot/console.py
@@ -7,10 +7,11 @@ import logging
from bs4 import BeautifulSoup
from builtins import input
from datetime import datetime
+from future.moves.itertools import zip_longest
from getpass import getpass
from itertools import chain
+from optparse import OptionParser
from textwrap import TextWrapper
-from future.moves.itertools import zip_longest
from .config import save_user, load_user, load_app, save_app, CONFIG_APP_FILE, CONFIG_USER_FILE
from . import create_app, login, post_status, timeline_home, upload_media, DEFAULT_INSTANCE
@@ -137,11 +138,24 @@ def cmd_timeline(app, user):
def cmd_post_status(app, user):
- if len(sys.argv) < 3:
- print(red("No status text given"))
- return
+ parser = OptionParser(usage="toot post [options] TEXT")
+
+ parser.add_option("-m", "--media", dest="media", type="string",
+ help="path to the media file to attach")
+
+ (options, args) = parser.parse_args()
+
+ if len(args) < 2:
+ parser.print_help()
+ raise ConsoleError("No text given")
+
+ if options.media:
+ media = do_upload(app, user, options.media)
+ media_ids = [media['id']]
+ else:
+ media_ids = None
- response = post_status(app, user, sys.argv[2])
+ response = post_status(app, user, args[1], media_ids=media_ids)
print("Toot posted: " + green(response.get('url')))
@@ -169,13 +183,7 @@ def cmd_upload(app, user):
path = sys.argv[2]
- if not os.path.exists(path):
- print_error("File does not exist: " + path)
- return
-
- with open(path, 'rb') as f:
- print("Uploading {} ...".format(green(f.name)))
- response = upload_media(app, user, f)
+ response = do_upload(path)
print("\nSuccessfully uploaded media ID {}, type '{}'".format(
yellow(response['id']), yellow(response['type'])))
@@ -184,6 +192,15 @@ def cmd_upload(app, user):
print("Text URL: " + green(response['text_url']))
+def do_upload(app, user, path):
+ if not os.path.exists(path):
+ raise ConsoleError("File does not exist: " + path)
+
+ with open(path, 'rb') as f:
+ print("Uploading media: {}".format(green(f.name)))
+ return upload_media(app, user, f)
+
+
def run_command(command):
app = load_app()
user = load_user()