summaryrefslogtreecommitdiff
path: root/chimere/forms.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2012-08-29 19:29:48 +0200
committerÉtienne Loks <etienne.loks@peacefrogs.net>2012-08-29 19:29:48 +0200
commitef80c8a83e06b4eff26e2be7f35efb92064ce57a (patch)
tree25c815a4e9bf9227a9d5935c88edac80bc272072 /chimere/forms.py
parentb033d05ed1464a6f2fd1aca7e98a00d87970ed5d (diff)
downloadChimère-ef80c8a83e06b4eff26e2be7f35efb92064ce57a.tar.bz2
Chimère-ef80c8a83e06b4eff26e2be7f35efb92064ce57a.zip
Manage auto-detection of multimedia type by extension - improvement on alternate multimedia widget
Diffstat (limited to 'chimere/forms.py')
-rw-r--r--chimere/forms.py30
1 files changed, 27 insertions, 3 deletions
diff --git a/chimere/forms.py b/chimere/forms.py
index 985e2ca..db1719a 100644
--- a/chimere/forms.py
+++ b/chimere/forms.py
@@ -32,8 +32,8 @@ from django.contrib.admin.widgets import AdminDateWidget
from django.core.mail import EmailMessage, BadHeaderError
from chimere.models import Marker, Route, PropertyModel, Property, Area,\
- News, Category, SubCategory, RouteFile, MultimediaFile, MultimediaType, \
- PictureFile, Importer, PropertyModelChoice
+ News, Category, SubCategory, RouteFile, MultimediaFile, MultimediaType, \
+ PictureFile, Importer, PropertyModelChoice, IFRAME_LINKS, MultimediaExtension
from chimere.widgets import AreaField, PointField, TextareaWidget, \
DatePickerWidget, ButtonSelectWidget, NominatimWidget
@@ -386,7 +386,31 @@ class MultimediaFileForm(BaseFileForm):
def __init__(self, *args, **kwargs):
super(MultimediaFileForm, self).__init__(*args, **kwargs)
self.fields['multimedia_type'].widget.choices = \
- MultimediaType.get_tuples()
+ MultimediaType.get_tuples()
+
+ def clean(self):
+ if not self.cleaned_data.get('multimedia_type') or\
+ not self.cleaned_data.get('url'):
+ return self.cleaned_data
+ if self.cleaned_data['multimedia_type'].name != 'auto':
+ return self.cleaned_data
+ url = self.cleaned_data['url']
+ for mm_type in IFRAME_LINKS:
+ res, embeded_url = IFRAME_LINKS[mm_type]
+ if [r for r in res if r.search(url)]:
+ multimedia_type = MultimediaType.objects.get(
+ name__iexact=mm_type)
+ self.cleaned_data['multimedia_type'] = multimedia_type
+ return self.cleaned_data
+ ext = url.split(".")[-1]
+ q = MultimediaExtension.objects.filter(name__iendswith=ext)
+ if q.count():
+ self.cleaned_data['multimedia_type'] = q.all()[0].multimedia_type
+ else:
+ # default to an iframe
+ self.cleaned_data['multimedia_type'] = \
+ MultimediaType.objects.filter(name__iexact='iframe').all()[0]
+ return self.cleaned_data
MultimediaFileFormSet = formset_factory(MultimediaFileForm, can_delete=True)