|
|
from django import forms
|
|
|
from neboard import settings
|
|
|
|
|
|
|
|
|
class PostForm(forms.Form):
|
|
|
MAX_TEXT_LENGTH = 10000
|
|
|
MAX_IMAGE_SIZE = 8 * 1024 * 1024
|
|
|
|
|
|
title = forms.CharField(max_length=50, required=False)
|
|
|
text = forms.CharField(widget=forms.Textarea, required=False)
|
|
|
image = forms.ImageField(required=False)
|
|
|
|
|
|
def clean_text(self):
|
|
|
text = self.cleaned_data['text']
|
|
|
if text:
|
|
|
if len(text) > self.MAX_TEXT_LENGTH:
|
|
|
raise forms.ValidationError('Too many text')
|
|
|
return text
|
|
|
|
|
|
def clean_image(self):
|
|
|
image = self.cleaned_data['image']
|
|
|
if image:
|
|
|
if image._size > self.MAX_IMAGE_SIZE:
|
|
|
raise forms.ValidationError('Too large image: more than ' +
|
|
|
str(self.MAX_IMAGE_SIZE) + ' bytes')
|
|
|
return image
|
|
|
|
|
|
def clean(self):
|
|
|
cleaned_data = super(PostForm, self).clean()
|
|
|
|
|
|
text = cleaned_data.get('text')
|
|
|
image = cleaned_data.get('image')
|
|
|
|
|
|
if (not text) and (not image):
|
|
|
raise forms.ValidationError('Enter either text or image')
|
|
|
|
|
|
return cleaned_data
|
|
|
|
|
|
|
|
|
class ThreadForm(PostForm):
|
|
|
INVALID_TAG_CHARACTERS = ['+', '/', '&', '=', '?']
|
|
|
|
|
|
tags = forms.CharField(max_length=100)
|
|
|
|
|
|
def clean_tags(self):
|
|
|
tags = self.cleaned_data['tags']
|
|
|
if tags:
|
|
|
for character in tags:
|
|
|
if character in self.INVALID_TAG_CHARACTERS:
|
|
|
raise forms.ValidationError(
|
|
|
'Inappropriate characters in tags')
|
|
|
|
|
|
return tags
|
|
|
|
|
|
def clean(self):
|
|
|
cleaned_data = super(ThreadForm, self).clean()
|
|
|
|
|
|
return cleaned_data
|
|
|
|
|
|
|
|
|
class SettingsForm(forms.Form):
|
|
|
theme = forms.ChoiceField(choices=settings.THEMES, widget=forms.RadioSelect)
|