summaryrefslogtreecommitdiff
path: root/chimere/forms.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2012-11-26 19:50:43 +0100
committerÉtienne Loks <etienne.loks@peacefrogs.net>2012-11-26 19:50:43 +0100
commit43b0c50accfa1017ee323ba121ac53920d1cdbf5 (patch)
tree9f554b2e55dfa8a36209363c82ddaa4915c3448f /chimere/forms.py
parentf769930eca0a0bbccf991e52c6c6abbba6414390 (diff)
parenta95b7d7e58b6d8e0847b9a49e3afe0ac7a939a39 (diff)
downloadChimère-43b0c50accfa1017ee323ba121ac53920d1cdbf5.tar.bz2
Chimère-43b0c50accfa1017ee323ba121ac53920d1cdbf5.zip
Merge branch 'master' into saclay
Conflicts: chimere/admin.py chimere/fixtures/initial_data.json chimere/forms.py chimere/locale/fr/LC_MESSAGES/django.po chimere/static/chimere/css/styles.css chimere/templates/chimere/blocks/alternate_multimedia.html chimere/templates/chimere/blocks/categories.html chimere/widgets.py
Diffstat (limited to 'chimere/forms.py')
-rw-r--r--chimere/forms.py68
1 files changed, 42 insertions, 26 deletions
diff --git a/chimere/forms.py b/chimere/forms.py
index be68205..db084f0 100644
--- a/chimere/forms.py
+++ b/chimere/forms.py
@@ -37,7 +37,7 @@ from chimere.models import Marker, Route, PropertyModel, Property, Area,\
MultimediaExtension, Page
from chimere.widgets import AreaField, PointField, TextareaWidget, \
FullTextareaWidget, DatePickerWidget, ButtonSelectWidget, NominatimWidget, \
- TextareaAdminWidget
+ TextareaAdminWidget, ImportFiltrWidget, ImporterChoicesWidget, RE_XAPI
from datetime import timedelta, datetime, tzinfo
@@ -110,6 +110,23 @@ class PageAdminForm(forms.ModelForm):
class Meta:
model = Page
+class OSMForm(forms.Form):
+ """
+ OSM export form
+ """
+ username = forms.CharField(label=_("OSM user"))
+ password = forms.CharField(label=_(u"Password"),
+ widget=forms.PasswordInput(render_value=False))
+ # API URL are hardcoded: the day the API change Chimère will need
+ # adaptations not only on this portion...
+ api = forms.ChoiceField(label=_(u"API"),
+ choices=(('', '--'),
+ ('api06.dev.openstreetmap.org',
+ _(u"Test API - %s") % 'api06.dev.openstreetmap.org'),
+ ('api.openstreetmap.org/api',
+ _(u"Main API - %s") % 'api.openstreetmap.org/api'),
+ ))
+
class NewsAdminForm(forms.ModelForm):
"""
Main form for news
@@ -119,6 +136,9 @@ class NewsAdminForm(forms.ModelForm):
model = News
class ImporterAdminForm(forms.ModelForm):
+ filtr = forms.CharField(widget=ImportFiltrWidget, required=False)
+ importer_type = forms.ChoiceField(widget=ImporterChoicesWidget,
+ choices=[('', '--')]+list(IMPORTER_CHOICES))
class Meta:
model = Importer
widgets = {
@@ -131,6 +151,14 @@ class ImporterAdminForm(forms.ModelForm):
Verify that only one type of source is provided
Verify that shapefiles are zipped
'''
+ if self.cleaned_data.get('importer_type') == 'OSM' and \
+ not self.cleaned_data.get('filtr'):
+ raise forms.ValidationError(_(u"For OSM import you must be "\
+ u"provide a filter. Select an area and node/way filter."))
+ if self.cleaned_data.get('importer_type') == 'OSM' and \
+ not RE_XAPI.match(self.cleaned_data.get('filtr')):
+ raise forms.ValidationError(_(u"For OSM import you must be "\
+ u"provide a filter. Select an area and node/way filter."))
if self.cleaned_data.get('importer_type') == 'SHP' and \
not self.cleaned_data.get('zipped'):
raise forms.ValidationError(_(u"Shapefiles must be provided in a "\
@@ -358,13 +386,20 @@ class RouteForm(RouteAdminForm):
Custom save method in order to manage associated marker and file
"""
new_route = super(RouteForm, self).save(*args, **keys)
+ if new_route.status == 'S':
+ new_route.has_associated_marker = True
+ new_route.save()
# associate a route file
if 'associated_file_id' in self.cleaned_data and \
self.cleaned_data['associated_file_id']:
file_pk = int(self.cleaned_data['associated_file_id'])
new_route.associated_file = RouteFile.objects.get(pk=file_pk)
new_route.save()
- new_marker = Marker.objects.get(route=new_route)
+ # change the associated marker (if available)
+ q_new_marker = Marker.objects.filter(route=new_route)
+ if not q_new_marker.count():
+ return new_route
+ new_marker = q_new_marker.all()[0]
# save description
if self.cleaned_data['description']:
new_marker.description = self.cleaned_data['description']
@@ -417,6 +452,11 @@ class MultimediaFileAdminForm(forms.ModelForm):
'%schimere/js/menu-sort.js' % settings.STATIC_URL,
]
+ def __init__(self, *args, **kwargs):
+ super(MultimediaFileAdminForm, self).__init__(*args, **kwargs)
+ self.fields['multimedia_type'].widget.choices = \
+ MultimediaType.get_tuples()
+
class MultimediaFileForm(BaseFileForm):
"""
Form for a multimedia file
@@ -433,30 +473,6 @@ class MultimediaFileForm(BaseFileForm):
# this can be auto detect
self.fields['multimedia_type'].required = False
- def clean(self):
- if not self.cleaned_data.get('url'):
- return self.cleaned_data
- if self.cleaned_data.get('multimedia_type') and \
- 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)
class PictureFileAdminForm(forms.ModelForm):