Files
Pinry/pinry/pins/forms.py

65 lines
2.1 KiB
Python
Raw Normal View History

2012-04-26 03:44:16 +00:00
from django import forms
from .models import Pin
class PinForm(forms.ModelForm):
url = forms.CharField(label='URL', required=False)
image = forms.ImageField(label='or Upload', required=False)
def __init__(self, *args, **kwargs):
super(forms.ModelForm, self).__init__(*args, **kwargs)
self.fields.keyOrder = (
'url',
'image',
'description',
)
2012-05-01 04:42:45 +00:00
def check_if_image(self, data):
2012-05-01 04:42:45 +00:00
# Test file type
image_file_types = ['png', 'gif', 'jpeg', 'jpg']
file_type = data.split('.')[-1]
if file_type.lower() not in image_file_types:
raise forms.ValidationError("Requested URL is not an image file. "
"Only images are currently supported.")
2012-05-01 04:42:45 +00:00
def clean(self):
cleaned_data = super(PinForm, self).clean()
url = cleaned_data.get('url')
image = cleaned_data.get('image')
2012-05-01 04:42:45 +00:00
if url:
self.check_if_image(url)
2012-05-01 04:42:45 +00:00
try:
Pin.objects.get(url=url)
2012-05-01 04:42:45 +00:00
raise forms.ValidationError("URL has already been pinned!")
except Pin.DoesNotExist:
protocol = url.split(':')[0]
if protocol == 'http':
opp_url = url.replace('http://', 'https://')
elif protocol == 'https':
opp_url = url.replace('https://', 'http://')
else:
raise forms.ValidationError("Currently only support HTTP and "
"HTTPS protocols, please be sure "
"you include this in the URL.")
try:
Pin.objects.get(url=opp_url)
raise forms.ValidationError("URL has already been pinned!")
except Pin.DoesNotExist:
pass
elif image:
pass
else:
raise forms.ValidationError("Need either a URL or Upload.")
return cleaned_data
2012-04-26 03:44:16 +00:00
class Meta:
model = Pin
exclude = ['submitter', 'thumbnail']