|
|
@@ -4,20 +4,12 @@ from .models import Pin |
|
|
|
|
|
|
|
|
|
|
|
class PinForm(forms.ModelForm): |
|
|
|
url = forms.CharField(label='url', required=False) |
|
|
|
url = forms.CharField(required=False) |
|
|
|
image = forms.ImageField(label='or Upload', required=False) |
|
|
|
|
|
|
|
class Meta: |
|
|
|
model = Pin |
|
|
|
fields = ['url', 'description', 'tags'] |
|
|
|
|
|
|
|
def check_if_image(self, data): |
|
|
|
# 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.") |
|
|
|
fields = ['url', 'image', 'description', 'tags'] |
|
|
|
|
|
|
|
def clean(self): |
|
|
|
cleaned_data = super(PinForm, self).clean() |
|
|
@@ -26,26 +18,25 @@ class PinForm(forms.ModelForm): |
|
|
|
image = cleaned_data.get('image') |
|
|
|
|
|
|
|
if url: |
|
|
|
self.check_if_image(url) |
|
|
|
image_file_types = ['png', 'gif', 'jpeg', 'jpg'] |
|
|
|
if not url.split('.')[-1].lower() in image_file_types: |
|
|
|
raise forms.ValidationError("Requested URL is not an image file. " |
|
|
|
"Only images are currently supported.") |
|
|
|
try: |
|
|
|
Pin.objects.get(url=url) |
|
|
|
raise forms.ValidationError("URL has already been pinned!") |
|
|
|
except Pin.DoesNotExist: |
|
|
|
pass |
|
|
|
protocol = url.split(':')[0] |
|
|
|
if protocol not in ['http', 'https']: |
|
|
|
raise forms.ValidationError("Currently only support HTTP and " |
|
|
|
"HTTPS protocols, please be sure " |
|
|
|
"you include this in the URL.") |
|
|
|
try: |
|
|
|
Pin.objects.get(url=url) |
|
|
|
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 |
|
|
|
pass |
|
|
|
elif image: |
|
|
|
pass |
|
|
|
else: |
|
|
|