diff options
Diffstat (limited to 'chimere/models.py')
| -rw-r--r-- | chimere/models.py | 55 |
1 files changed, 52 insertions, 3 deletions
diff --git a/chimere/models.py b/chimere/models.py index d51cd5b..123b2fa 100644 --- a/chimere/models.py +++ b/chimere/models.py @@ -34,7 +34,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 _ @@ -330,6 +330,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. "\ @@ -363,6 +367,10 @@ class GeographicItem(models.Model): self.import_key = new_keys self.save() + @classmethod + def properties(cls): + return [pm for pm in PropertyModel.objects.filter(available=True)] + class Marker(GeographicItem): '''Marker for a POI ''' @@ -386,8 +394,7 @@ class Marker(GeographicItem): super(Marker, self).__init__(*args, **kwargs) # add read attributes for properties for property in self.getProperties(): - attr_name = defaultfilters.slugify(property.propertymodel.name) - attr_name = re.sub(r'-','_', attr_name) + attr_name = property.propertymodel.getAttrName() if not hasattr(self, attr_name): setattr(self, attr_name, property.python_value) @@ -521,6 +528,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")), @@ -874,6 +908,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 @@ -1105,6 +1149,11 @@ class PropertyModel(models.Model): ordering = ('order',) verbose_name = _("Property model") + def getAttrName(self): + attr_name = defaultfilters.slugify(self.name) + attr_name = re.sub(r'-','_', attr_name) + return attr_name + def getNamedId(self): '''Get the name used as named id (easily sortable) ''' |
