From 3ee7cf91bf6aa796cc14f62176da4f1cf4e8e0f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Sun, 5 Nov 2017 17:44:54 +0100 Subject: [PATCH] fix cache invalidation / mapupdate creation in direct edit with DEBUG=False --- src/c3nav/editor/__init__.py | 1 + src/c3nav/editor/apps.py | 12 ++++++++++++ src/c3nav/editor/models/changeset.py | 14 ++++++++++---- src/c3nav/mapdata/__init__.py | 2 -- 4 files changed, 23 insertions(+), 6 deletions(-) create mode 100644 src/c3nav/editor/apps.py diff --git a/src/c3nav/editor/__init__.py b/src/c3nav/editor/__init__.py index e69de29b..01e2b19a 100644 --- a/src/c3nav/editor/__init__.py +++ b/src/c3nav/editor/__init__.py @@ -0,0 +1 @@ +default_app_config = 'c3nav.editor.apps.EditorConfig' diff --git a/src/c3nav/editor/apps.py b/src/c3nav/editor/apps.py new file mode 100644 index 00000000..462dc00a --- /dev/null +++ b/src/c3nav/editor/apps.py @@ -0,0 +1,12 @@ +from django.apps import AppConfig +from django.db.models.signals import m2m_changed, post_delete, post_save + + +class EditorConfig(AppConfig): + name = 'c3nav.editor' + + def ready(self): + from c3nav.editor.models import ChangeSet + post_save.connect(ChangeSet.object_changed_handler) + post_delete.connect(ChangeSet.object_changed_handler) + m2m_changed.connect(ChangeSet.object_changed_handler) diff --git a/src/c3nav/editor/models/changeset.py b/src/c3nav/editor/models/changeset.py index fc8fe5b2..4940b7cb 100644 --- a/src/c3nav/editor/models/changeset.py +++ b/src/c3nav/editor/models/changeset.py @@ -9,7 +9,7 @@ from django.apps import apps from django.conf import settings from django.core.cache import cache from django.core.exceptions import FieldDoesNotExist -from django.db import connection, models, transaction +from django.db import models, transaction from django.db.models import Q from django.urls import reverse from django.utils.http import int_to_base36 @@ -438,6 +438,13 @@ class ChangeSet(models.Model): def _cleaning_changes(self, value): self.cleaning_changes_cache[self.pk] = value + objects_changed_count = 0 + + @classmethod + def object_changed_handler(cls, sender, instance, **kwargs): + if sender._meta.app_label == 'mapdata': + cls.objects_changed_count += 1 + @contextmanager def lock_to_edit(self, request=None): with transaction.atomic(): @@ -455,10 +462,9 @@ class ChangeSet(models.Model): elif self.direct_editing: with MapUpdate.lock(): changed_geometries.reset() - queries_before = len(connection.queries) + ChangeSet.objects_changed_count = 0 yield self - if any((q['sql'].startswith('UPDATE') or q['sql'].startswith('INSERT') or - q['sql'].startswith('DELETE')) for q in connection.queries[queries_before:]): + if ChangeSet.objects_changed_count: MapUpdate.objects.create(user=user, type='direct_edit') else: yield self diff --git a/src/c3nav/mapdata/__init__.py b/src/c3nav/mapdata/__init__.py index e69931c9..d441434e 100644 --- a/src/c3nav/mapdata/__init__.py +++ b/src/c3nav/mapdata/__init__.py @@ -1,3 +1 @@ - - default_app_config = 'c3nav.mapdata.apps.MapdataConfig'