From cce4198a3b10d2cffb0b4cf552c118ce8d297cf1 Mon Sep 17 00:00:00 2001 From: Jason McBrayer Date: Thu, 24 Jan 2019 14:10:02 -0500 Subject: [PATCH] Use content_type when posting if it's available in your Mastodon.py This feature hasn't been merged to mainline yet, and then it will probably take a little longer for it to get on pip, so brutaldon has to be belt-and- suspenders when using it. --- brutaldon/views.py | 56 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 42 insertions(+), 14 deletions(-) diff --git a/brutaldon/views.py b/brutaldon/views.py index 072d046..5ccd677 100644 --- a/brutaldon/views.py +++ b/brutaldon/views.py @@ -13,11 +13,16 @@ from urllib import parse from pdb import set_trace from inscriptis import get_text from time import sleep +import inspect import re class NotLoggedInException(Exception): pass +def post_has_content_type(): + sig = inspect.signature(Mastodon.status_post) + return 'content_type' in sig.parameters.keys() + def get_usercontext(request): if is_logged_in(request): try: @@ -485,10 +490,17 @@ def toot(request, mention=None): if form.cleaned_data['visibility'] == '': form.cleaned_data['visibility'] = request.session['user'].source.privacy try: - mastodon.status_post(status=form.cleaned_data['status'], - visibility=form.cleaned_data['visibility'], - spoiler_text=form.cleaned_data['spoiler_text'], - media_ids=media_objects) + if post_has_content_type(): + mastodon.status_post(status=form.cleaned_data['status'], + visibility=form.cleaned_data['visibility'], + spoiler_text=form.cleaned_data['spoiler_text'], + media_ids=media_objects, + content_type='text/markdown') + else: + mastodon.status_post(status=form.cleaned_data['status'], + visibility=form.cleaned_data['visibility'], + spoiler_text=form.cleaned_data['spoiler_text'], + media_ids=media_objects) except MastodonAPIError as error: form.add_error("", "%s (%s used)" % (error.args[-1], len(form.cleaned_data['status']) @@ -542,11 +554,19 @@ def redraft(request, id): if form.cleaned_data['visibility'] == '': form.cleaned_data['visibility'] = request.session['user'].source.privacy try: - mastodon.status_post(status=form.cleaned_data['status'], - visibility=form.cleaned_data['visibility'], - spoiler_text=form.cleaned_data['spoiler_text'], - media_ids=media_objects, - in_reply_to_id=toot.in_reply_to_id) + if post_has_content_type(): + mastodon.status_post(status=form.cleaned_data['status'], + visibility=form.cleaned_data['visibility'], + spoiler_text=form.cleaned_data['spoiler_text'], + media_ids=media_objects, + in_reply_to_id=toot.in_reply_to_id, + content_type='text/markdown') + else: + mastodon.status_post(status=form.cleaned_data['status'], + visibility=form.cleaned_data['visibility'], + spoiler_text=form.cleaned_data['spoiler_text'], + media_ids=media_objects, + in_reply_to_id=toot.in_reply_to_id) mastodon.status_delete(id) except MastodonAPIError as error: form.add_error("", "%s (%s used)" % (error.args[-1], @@ -616,11 +636,19 @@ def reply(request, id): +str(index), None))) try: - mastodon.status_post(status=form.cleaned_data['status'], - visibility=form.cleaned_data['visibility'], - spoiler_text=form.cleaned_data['spoiler_text'], - media_ids=media_objects, - in_reply_to_id=id) + if post_has_content_type(): + mastodon.status_post(status=form.cleaned_data['status'], + visibility=form.cleaned_data['visibility'], + spoiler_text=form.cleaned_data['spoiler_text'], + media_ids=media_objects, + in_reply_to_id=id, + content_type="text/markdown") + else: + mastodon.status_post(status=form.cleaned_data['status'], + visibility=form.cleaned_data['visibility'], + spoiler_text=form.cleaned_data['spoiler_text'], + media_ids=media_objects, + in_reply_to_id=id) except MastodonAPIError as error: form.add_error("", "%s (%s used)" % (error.args[-1], len(form.cleaned_data['status'])