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, 33 insertions, 10 deletions
diff --git a/chimere/models.py b/chimere/models.py
index 1ca5db9..979ff43 100644
--- a/chimere/models.py
+++ b/chimere/models.py
@@ -368,6 +368,10 @@ class Marker(GeographicItem):
if settings.CHIMERE_DAYS_BEFORE_EVENT:
return self.start_date
+ @property
+ def geometry(self):
+ return self.point.wkt
+
class Meta:
ordering = ('status', 'name')
verbose_name = _(u"Point of interest")
@@ -463,21 +467,33 @@ class Marker(GeographicItem):
url = reverse('chimere:tiny', args=[area_name, urn])
return url
+def geometry_pre_save(cls, pre_save_geom_values):
+ def geom_pre_save(sender, **kwargs):
+ if not kwargs['instance'] or not kwargs['instance'].pk:
+ return
+ instance = kwargs['instance']
+ try:
+ instance = cls.objects.get(pk=instance.pk)
+ pre_save_geom_values[instance.pk] = (instance.name,
+ instance.geometry, instance.import_version)
+ except ObjectDoesNotExist:
+ pass
+ return geom_pre_save
+
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)
+ geometry_pre_save(Marker, pre_save_marker_values)(sender, **kwargs)
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']:
+ if not kwargs['instance'] \
+ or kwargs['instance'].pk not in pre_save_geom_values:
return
instance = kwargs['instance']
- name, geometry, import_version = pre_save_geom_values[instance]
+ name, geometry, import_version = pre_save_geom_values[instance.pk]
if (instance.import_version != import_version
and instance.modified_since_import):
instance.modified_since_import = False
@@ -487,8 +503,13 @@ def geometry_post_save(pre_save_geom_values):
return
if instance.name != name or instance.geometry != geometry:
instance.modified_since_import = True
+ instance.save()
return geom_post_save
-post_save.connect(geometry_post_save(pre_save_marker_values), sender=Marker)
+def marker_post_save(sender, **kwargs):
+ if not kwargs['instance']:
+ return
+ geometry_post_save(pre_save_marker_values)(sender, **kwargs)
+post_save.connect(marker_post_save, sender=Marker)
class MultimediaType(models.Model):
MEDIA_TYPES = (('A', _(u"Audio")),
@@ -779,6 +800,10 @@ class Route(GeographicItem):
ordering = ('status', 'name')
verbose_name = _(u"Route")
+ @property
+ def geometry(self):
+ return self.point.wkt
+
def get_init_multi(self):
if not self.associated_marker.count():
return []
@@ -836,15 +861,13 @@ 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)
+ geometry_pre_save(Route, pre_save_route_values)(sender, **kwargs)
pre_save.connect(route_pre_save, sender=Route)
def route_post_save(sender, **kwargs):
if not kwargs['instance']:
return
- geometry_post_save(pre_save_route_values)
+ geometry_post_save(pre_save_route_values)(sender, **kwargs)
instance = kwargs['instance']
marker_fields = [f.attname for f in Marker._meta.fields]
route_fields = [f.attname for f in Route._meta.fields]