Fix up models and forms to meet current needs

This commit is contained in:
Jason McBrayer 2018-08-25 10:18:53 -04:00
parent 9cb40914d4
commit 50406383b3
5 changed files with 94 additions and 36 deletions

View File

@ -1,7 +1,7 @@
from django import forms from django import forms
from django.conf import settings from django.conf import settings
from pytz import common_timezones from pytz import common_timezones
from .models import Theme from .models import Theme, Preference
PRIVACY_CHOICES = (('public', 'Public'), PRIVACY_CHOICES = (('public', 'Public'),
@ -24,28 +24,10 @@ class OAuthLoginForm(forms.Form):
instance = forms.CharField(label="Instance", instance = forms.CharField(label="Instance",
max_length=256) max_length=256)
class SettingsForm(forms.Form): class PreferencesForm(forms.ModelForm):
fullbrutalism = forms.BooleanField(label="Use FULLBRUTALISM mode?", class Meta:
required=False, model = Preference
help_text= fields = ['theme', 'filter_replies', 'filter_boosts', 'timezone']
"""FULLBRUTALISM mode strips away most of the niceties of modern web design when
brutaldon is viewed in a graphical browser. It has no effect in text-only browsers.""")
filter_replies = forms.BooleanField(label="Filter replies from home timeline?",
required=False,
help_text=
"""Should replies be filtered out of your home timeline, giving you only pure,
top-level posts?""")
filter_boosts = forms.BooleanField(label="Filter boosts from home timeline?",
required=False,
help_text=
"""Should replies be filtered out of your home timeline, giving you only pure,
Original Content?""")
timezone = forms.ChoiceField(label="Your local timezone",
choices=timezones,
required=False,
help_text=
"""What time zone do you prefer to have times displayed in? The default choice is UTC.""")
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,

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -5,20 +5,20 @@ from pytz import common_timezones
timezones = [(tz, tz) for tz in common_timezones] timezones = [(tz, tz) for tz in common_timezones]
class Client(models.Model): class Client(models.Model):
name = models.TextField(default = "brutaldon") name = models.CharField(default = "brutaldon", max_length=80)
api_base_id = models.URLField(default="https://mastodon.social") api_base_id = models.URLField(default="https://mastodon.social")
client_id = models.TextField(null=True, blank=True) client_id = models.CharField(null=True, blank=True, max_length=2048)
client_secret = models.TextField(null=True, blank=True) client_secret = models.CharField(null=True, blank=True, max_length=2048)
def __str__(self): def __str__(self):
return self.name + ": " + self.api_base_id return self.name + ": " + self.api_base_id
class Theme(models.Model): class Theme(models.Model):
name = models.TextField(max_length=80, unique=True) name = models.CharField(max_length=80, unique=True)
prefix = models.TextField(max_length=40, null=True, default="default") prefix = models.CharField(max_length=40, null=True, default="default")
main_css = models.TextField(max_length=1024, blank=True, null=True, main_css = models.CharField(max_length=1024, blank=True, null=True,
default="css/fullbrutalism.css") default="css/fullbrutalism.css")
tweaks_css = models.TextField(max_length=1024, blank=True, null=True) tweaks_css = models.CharField(max_length=1024, blank=True, null=True)
is_brutalist = models.BooleanField(default=False) is_brutalist = models.BooleanField(default=False)
def __str__(self): def __str__(self):
@ -28,14 +28,14 @@ class Preference(models.Model):
theme = models.ForeignKey(Theme, models.SET_NULL, null=True) theme = models.ForeignKey(Theme, models.SET_NULL, null=True)
filter_replies = models.BooleanField(default=False) filter_replies = models.BooleanField(default=False)
filter_boosts = models.BooleanField(default=False) filter_boosts = models.BooleanField(default=False)
timezone = models.TextField(max_length=80, blank=True, null=True, timezone = models.CharField(max_length=80, blank=True, null=True,
choices=timezones) choices=timezones, default='UTC')
class Account(models.Model): class Account(models.Model):
username = models.EmailField() username = models.EmailField()
email = models.EmailField(null=True, blank=True) email = models.EmailField(null=True, blank=True)
django_user = models.ForeignKey(settings.AUTH_USER_MODEL, models.CASCADE, null=True) django_user = models.ForeignKey(settings.AUTH_USER_MODEL, models.CASCADE, null=True)
access_token = models.TextField(null=True, blank=True) access_token = models.CharField(null=True, blank=True, max_length=2048)
client= models.ForeignKey(Client, models.SET_NULL, null=True) client= models.ForeignKey(Client, models.SET_NULL, null=True)
preferences = models.ForeignKey(Preference, models.SET_NULL, null=True) preferences = models.ForeignKey(Preference, models.SET_NULL, null=True)

View File

@ -5,7 +5,7 @@ from django.urls import reverse
from django.views.decorators.cache import never_cache, cache_page from django.views.decorators.cache import never_cache, cache_page
from django.urls import reverse 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, SettingsForm, 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
from urllib import parse from urllib import parse
@ -370,7 +370,7 @@ def user(request, username, prev=None, next=None):
def settings(request): def settings(request):
account = Account.objects.get(username=username, client_id=client.id) account = Account.objects.get(username=username, client_id=client.id)
if request.method == 'POST': if request.method == 'POST':
form = SettingsForm(request.POST) form = PreferencesForm(request.POST)
if form.is_valid(): if form.is_valid():
account.preferences.theme = Theme.objects.get(form.cleaned_data['theme']) account.preferences.theme = Theme.objects.get(form.cleaned_data['theme'])
account.preferences.filter_replies = form.cleaned_data['filter_replies'] account.preferences.filter_replies = form.cleaned_data['filter_replies']
@ -383,7 +383,7 @@ def settings(request):
return render(request, 'setup/settings.html', return render(request, 'setup/settings.html',
{'form' : form, 'account': account}) {'form' : form, 'account': account})
else: else:
form = SettingsForm(account.preferences) form = PreferencesForm(account.preferences)
return render(request, 'setup/settings.html', return render(request, 'setup/settings.html',
{ 'form': form, { 'form': form,
'own_acct': request.session['user'], 'own_acct': request.session['user'],