data: disconnect signals during snapshot loading (#51472)

This commit is contained in:
Lauréline Guérin 2021-02-26 15:37:03 +01:00
parent d1fe947574
commit bf3cb40c5c
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
2 changed files with 15 additions and 11 deletions

View File

@ -598,9 +598,7 @@ class PageSnapshot(models.Model):
# try reusing existing page
return Page.snapshots.get(snapshot=self)
except Page.DoesNotExist:
page = Page.load_serialized_page(self.serialization, snapshot=self)
page.load_serialized_cells(self.serialization['cells'])
return page
return self.load_page(self.serialization, snapshot=self)
def restore(self):
json_page = self.serialization
@ -612,8 +610,16 @@ class PageSnapshot(models.Model):
json_page['fields']['exclude_from_navigation'] = self.page.exclude_from_navigation
# restore snapshot
with transaction.atomic():
page = Page.load_serialized_page(json_page)
return self.load_page(json_page)
def load_page(self, json_page, snapshot=None):
try:
post_save.disconnect(cell_maintain_page_cell_cache)
page = Page.load_serialized_page(json_page, snapshot=snapshot)
page.load_serialized_cells(json_page['cells'])
finally:
post_save.connect(cell_maintain_page_cell_cache)
page.build_cell_cache()
return page
@ -1364,7 +1370,7 @@ class LinkCell(CellBase):
return []
def check_validity(self):
if self.link_page:
if self.link_page_id:
self.mark_as_valid()
return
if not self.url:

View File

@ -832,7 +832,7 @@ def test_site_export_import_json(app, admin_user):
resp.form['site_file'] = Upload('site-export.json', site_export, 'application/json')
with CaptureQueriesContext(connection) as ctx:
resp = resp.form.submit()
assert len(ctx.captured_queries) in [1142, 1143]
assert len(ctx.captured_queries) in [1140, 1141]
Page.objects.all().delete()
assert LinkCell.objects.count() == 0
@ -841,7 +841,7 @@ def test_site_export_import_json(app, admin_user):
resp.form['site_file'] = Upload('site-export.json', site_export, 'application/json')
with CaptureQueriesContext(connection) as ctx:
resp = resp.form.submit()
assert len(ctx.captured_queries) == 667
assert len(ctx.captured_queries) == 665
assert set(Page.objects.get(slug='one').related_cells['cell_types']) == set(
['data_textcell', 'data_linkcell']
)
@ -2092,8 +2092,6 @@ def test_page_versionning(app, admin_user):
cell3 = TextCell(page=page, placeholder='content', text='Foobar3', order=2)
cell3.save()
anonymous_app = app
app = login(app)
resp = app.get('/manage/pages/%s/' % page.id, status=200)
@ -2128,7 +2126,7 @@ def test_page_versionning(app, admin_user):
with CaptureQueriesContext(connection) as ctx:
resp2 = resp.click('view', index=1)
assert len(ctx.captured_queries) == 319
assert len(ctx.captured_queries) == 71
assert Page.snapshots.latest('pk').related_cells == {'cell_types': ['data_textcell']}
assert resp2.text.index('Hello world') < resp2.text.index('Foobar3')
@ -2189,7 +2187,7 @@ def test_page_versionning(app, admin_user):
resp = resp.click('restore', index=6)
with CaptureQueriesContext(connection) as ctx:
resp = resp.form.submit().follow()
assert len(ctx.captured_queries) == 575
assert len(ctx.captured_queries) == 327
resp2 = resp.click('See online')
assert resp2.text.index('Foobar1') < resp2.text.index('Foobar2') < resp2.text.index('Foobar3')