diff options
Diffstat (limited to 'chimere/models.py')
| -rw-r--r-- | chimere/models.py | 43 |
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 |
