Instead of setting a max_length on posts, catch API error on posting

This commit is contained in:
Jason McBrayer 2018-09-04 19:19:35 -04:00
parent 0d3cc1c5ac
commit 928f0fd7a7
2 changed files with 14 additions and 23 deletions

View File

@ -11,8 +11,6 @@ PRIVACY_CHOICES = (('public', 'Public'),
timezones = [ (tz, tz) for tz in common_timezones] timezones = [ (tz, tz) for tz in common_timezones]
MAX_LENGTH = settings.TOOT_MAX_LENGTH
class LoginForm(forms.Form): class LoginForm(forms.Form):
instance = forms.CharField(label="Instance", instance = forms.CharField(label="Instance",
max_length=256) max_length=256)
@ -31,39 +29,25 @@ class PreferencesForm(forms.ModelForm):
class PostForm(forms.Form): class PostForm(forms.Form):
"""def status_post(self, status, in_reply_to_id=None, media_ids=None, """def status_post(self, status, in_reply_to_id=None, media_ids=None,
sensitive=False, visibility=None, spoiler_text=None):""" sensitive=False, visibility=None, spoiler_text=None):"""
status = forms.CharField(label="Toot", max_length=MAX_LENGTH, widget=forms.Textarea) status = forms.CharField(label="Toot", widget=forms.Textarea)
visibility = forms.ChoiceField(label="Toot visibility", choices=PRIVACY_CHOICES, visibility = forms.ChoiceField(label="Toot visibility", choices=PRIVACY_CHOICES,
required=False) required=False)
spoiler_text = forms.CharField(label="CW or Subject", max_length=MAX_LENGTH, spoiler_text = forms.CharField(label="CW or Subject",
required=False) required=False)
media_file_1 = forms.FileField(label = "Media 1", media_file_1 = forms.FileField(label = "Media 1",
required=False) required=False)
media_text_1 = forms.CharField(label="Describe media 1.", media_text_1 = forms.CharField(label="Describe media 1.",
max_length=MAX_LENGTH,
required=False) required=False)
media_file_2 = forms.FileField(label = "Media 2", media_file_2 = forms.FileField(label = "Media 2",
required=False) required=False)
media_text_2 = forms.CharField(label="Describe media 2.", media_text_2 = forms.CharField(label="Describe media 2.",
max_length=MAX_LENGTH,
required=False) required=False)
media_file_3 = forms.FileField(label = "Media 3", media_file_3 = forms.FileField(label = "Media 3",
required=False) required=False)
media_text_3 = forms.CharField(label="Describe media 3.", media_text_3 = forms.CharField(label="Describe media 3.",
max_length=MAX_LENGTH,
required=False) required=False)
media_file_4 = forms.FileField(label = "Media 4", media_file_4 = forms.FileField(label = "Media 4",
required=False) required=False)
media_text_4 = forms.CharField(label="Describe media 4.", media_text_4 = forms.CharField(label="Describe media 4.",
max_length=MAX_LENGTH,
required=False) required=False)
media_sensitive = forms.BooleanField(label="Sensitive media?", required=False) media_sensitive = forms.BooleanField(label="Sensitive media?", required=False)
def clean(self):
cleaned_data = super().clean()
status = cleaned_data.get("status")
spoiler_text = cleaned_data.get("spoiler_text")
if (status and spoiler_text and len(status) + len(spoiler_text) > MAX_LENGTH):
raise forms.ValidationError("Max length of toot exceeded: %(max_length)s",
code="too_long",
params={"max_length": MAX_LENGTH})

View File

@ -7,7 +7,7 @@ from django.urls import reverse
from django.core.files.uploadhandler import TemporaryFileUploadHandler from django.core.files.uploadhandler import TemporaryFileUploadHandler
from brutaldon.forms import LoginForm, OAuthLoginForm, PreferencesForm, PostForm from brutaldon.forms import LoginForm, OAuthLoginForm, PreferencesForm, PostForm
from brutaldon.models import Client, Account, Preference, Theme from brutaldon.models import Client, Account, Preference, Theme
from mastodon import Mastodon, AttribAccessDict, MastodonError from mastodon import Mastodon, AttribAccessDict, MastodonError, MastodonAPIError
from urllib import parse from urllib import parse
from pdb import set_trace from pdb import set_trace
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
@ -411,10 +411,17 @@ def toot(request, mention=None):
None))) None)))
if form.cleaned_data['visibility'] == '': if form.cleaned_data['visibility'] == '':
form.cleaned_data['visibility'] = request.session['user'].source.privacy form.cleaned_data['visibility'] = request.session['user'].source.privacy
try:
mastodon.status_post(status=form.cleaned_data['status'], mastodon.status_post(status=form.cleaned_data['status'],
visibility=form.cleaned_data['visibility'], visibility=form.cleaned_data['visibility'],
spoiler_text=form.cleaned_data['spoiler_text'], spoiler_text=form.cleaned_data['spoiler_text'],
media_ids=media_objects) media_ids=media_objects)
except MastodonAPIError as error:
form.add_error("", "%s" % error.args[-1])
return render(request, 'main/post.html',
{'form': form,
'own_acct': request.session['user'],
'preferences': account.preferences})
return redirect(home) return redirect(home)
else: else:
return render(request, 'main/post.html', return render(request, 'main/post.html',