summaryrefslogtreecommitdiff
path: root/chimere/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'chimere/models.py')
-rw-r--r--chimere/models.py43
1 files changed, 42 insertions, 1 deletions
diff --git a/chimere/models.py b/chimere/models.py
index c6c4498..19c99eb 100644
--- a/chimere/models.py
+++ b/chimere/models.py
@@ -33,7 +33,7 @@ from django.contrib import admin
from django.core.files import File
from django.core.exceptions import ValidationError
from django.core.urlresolvers import reverse
-from django.db.models.signals import post_save
+from django.db.models.signals import post_save, pre_save
from django import forms
from django.template import defaultfilters
from django.utils.translation import ugettext_lazy as _
@@ -254,6 +254,10 @@ class GeographicItem(models.Model):
blank=True, null=True)
import_source = models.CharField(_(u"Source"), max_length=200,
blank=True, null=True)
+ modified_since_import = models.BooleanField(_(u"Modified since last import"),
+ default=False)
+ not_for_osm = models.BooleanField(_(u"Not to be imported inside OSM"),
+ default=False)
if settings.CHIMERE_DAYS_BEFORE_EVENT:
start_date = models.DateField(_(u"Start date"), blank=True, null=True,
help_text=_(u"Not mandatory. Set it for dated item such as event. "\
@@ -439,6 +443,33 @@ class Marker(GeographicItem):
url = reverse('chimere:tiny', args=[area_name, urn])
return url
+pre_save_marker_values = {}
+def marker_pre_save(sender, **kwargs):
+ if not kwargs['instance']:
+ return
+ instance = kwargs['instance']
+ pre_save_marker_values[instance.pk] = (instance.name, instance.point,
+ instance.import_version)
+pre_save.connect(marker_pre_save, sender=Marker)
+
+def geometry_post_save(pre_save_geom_values):
+ def geom_post_save(sender, **kwargs):
+ if not kwargs['instance']:
+ return
+ instance = kwargs['instance']
+ name, geometry, import_version = pre_save_geom_values[instance]
+ if (instance.import_version != import_version
+ and instance.modified_since_import):
+ instance.modified_since_import = False
+ instance.save()
+ return
+ if instance.modified_since_import:
+ return
+ if instance.name != name or instance.geometry != geometry:
+ instance.modified_since_import = True
+ return geom_post_save
+post_save.connect(geometry_post_save(pre_save_marker_values), sender=Marker)
+
class MultimediaType(models.Model):
MEDIA_TYPES = (('A', _(u"Audio")),
('V', _(u"Video")),
@@ -781,6 +812,16 @@ class Route(GeographicItem):
self.categories[0].id)
return TinyUrl.getUrnByParameters(parameters)
+pre_save_route_values = {}
+def route_pre_save(sender, **kwargs):
+ if not kwargs['instance']:
+ return
+ instance = kwargs['instance']
+ pre_save_route_values[instance.pk] = (instance.name, instance.route,
+ instance.import_version)
+pre_save.connect(route_pre_save, sender=Route)
+post_save.connect(geometry_post_save(pre_save_route_values), sender=Route)
+
def getDateCondition():
'''
Return an SQL condition for apparition of dates