fix cache invalidation / mapupdate creation in direct edit with DEBUG=False

This commit is contained in:
Laura Klünder 2017-11-05 17:44:54 +01:00
parent de6e67d8ae
commit 3ee7cf91bf
4 changed files with 23 additions and 6 deletions

View file

@ -0,0 +1 @@
default_app_config = 'c3nav.editor.apps.EditorConfig'

12
src/c3nav/editor/apps.py Normal file
View file

@ -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)

View file

@ -9,7 +9,7 @@ from django.apps import apps
from django.conf import settings from django.conf import settings
from django.core.cache import cache from django.core.cache import cache
from django.core.exceptions import FieldDoesNotExist 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.db.models import Q
from django.urls import reverse from django.urls import reverse
from django.utils.http import int_to_base36 from django.utils.http import int_to_base36
@ -438,6 +438,13 @@ class ChangeSet(models.Model):
def _cleaning_changes(self, value): def _cleaning_changes(self, value):
self.cleaning_changes_cache[self.pk] = 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 @contextmanager
def lock_to_edit(self, request=None): def lock_to_edit(self, request=None):
with transaction.atomic(): with transaction.atomic():
@ -455,10 +462,9 @@ class ChangeSet(models.Model):
elif self.direct_editing: elif self.direct_editing:
with MapUpdate.lock(): with MapUpdate.lock():
changed_geometries.reset() changed_geometries.reset()
queries_before = len(connection.queries) ChangeSet.objects_changed_count = 0
yield self yield self
if any((q['sql'].startswith('UPDATE') or q['sql'].startswith('INSERT') or if ChangeSet.objects_changed_count:
q['sql'].startswith('DELETE')) for q in connection.queries[queries_before:]):
MapUpdate.objects.create(user=user, type='direct_edit') MapUpdate.objects.create(user=user, type='direct_edit')
else: else:
yield self yield self

View file

@ -1,3 +1 @@
default_app_config = 'c3nav.mapdata.apps.MapdataConfig' default_app_config = 'c3nav.mapdata.apps.MapdataConfig'