diff options
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 |
commit | ef80c8a83e06b4eff26e2be7f35efb92064ce57a (patch) | |
tree | 25c815a4e9bf9227a9d5935c88edac80bc272072 /chimere/forms.py | |
parent | b033d05ed1464a6f2fd1aca7e98a00d87970ed5d (diff) | |
download | Chimè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.py | 30 |
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) |