data: disconnect signals during snapshot loading (#51472)
This commit is contained in:
parent
d1fe947574
commit
bf3cb40c5c
|
@ -598,9 +598,7 @@ class PageSnapshot(models.Model):
|
||||||
# try reusing existing page
|
# try reusing existing page
|
||||||
return Page.snapshots.get(snapshot=self)
|
return Page.snapshots.get(snapshot=self)
|
||||||
except Page.DoesNotExist:
|
except Page.DoesNotExist:
|
||||||
page = Page.load_serialized_page(self.serialization, snapshot=self)
|
return self.load_page(self.serialization, snapshot=self)
|
||||||
page.load_serialized_cells(self.serialization['cells'])
|
|
||||||
return page
|
|
||||||
|
|
||||||
def restore(self):
|
def restore(self):
|
||||||
json_page = self.serialization
|
json_page = self.serialization
|
||||||
|
@ -612,8 +610,16 @@ class PageSnapshot(models.Model):
|
||||||
json_page['fields']['exclude_from_navigation'] = self.page.exclude_from_navigation
|
json_page['fields']['exclude_from_navigation'] = self.page.exclude_from_navigation
|
||||||
# restore snapshot
|
# restore snapshot
|
||||||
with transaction.atomic():
|
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'])
|
page.load_serialized_cells(json_page['cells'])
|
||||||
|
finally:
|
||||||
|
post_save.connect(cell_maintain_page_cell_cache)
|
||||||
|
page.build_cell_cache()
|
||||||
return page
|
return page
|
||||||
|
|
||||||
|
|
||||||
|
@ -1364,7 +1370,7 @@ class LinkCell(CellBase):
|
||||||
return []
|
return []
|
||||||
|
|
||||||
def check_validity(self):
|
def check_validity(self):
|
||||||
if self.link_page:
|
if self.link_page_id:
|
||||||
self.mark_as_valid()
|
self.mark_as_valid()
|
||||||
return
|
return
|
||||||
if not self.url:
|
if not self.url:
|
||||||
|
|
|
@ -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')
|
resp.form['site_file'] = Upload('site-export.json', site_export, 'application/json')
|
||||||
with CaptureQueriesContext(connection) as ctx:
|
with CaptureQueriesContext(connection) as ctx:
|
||||||
resp = resp.form.submit()
|
resp = resp.form.submit()
|
||||||
assert len(ctx.captured_queries) in [1142, 1143]
|
assert len(ctx.captured_queries) in [1140, 1141]
|
||||||
|
|
||||||
Page.objects.all().delete()
|
Page.objects.all().delete()
|
||||||
assert LinkCell.objects.count() == 0
|
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')
|
resp.form['site_file'] = Upload('site-export.json', site_export, 'application/json')
|
||||||
with CaptureQueriesContext(connection) as ctx:
|
with CaptureQueriesContext(connection) as ctx:
|
||||||
resp = resp.form.submit()
|
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(
|
assert set(Page.objects.get(slug='one').related_cells['cell_types']) == set(
|
||||||
['data_textcell', 'data_linkcell']
|
['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 = TextCell(page=page, placeholder='content', text='Foobar3', order=2)
|
||||||
cell3.save()
|
cell3.save()
|
||||||
|
|
||||||
anonymous_app = app
|
|
||||||
|
|
||||||
app = login(app)
|
app = login(app)
|
||||||
resp = app.get('/manage/pages/%s/' % page.id, status=200)
|
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:
|
with CaptureQueriesContext(connection) as ctx:
|
||||||
resp2 = resp.click('view', index=1)
|
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 Page.snapshots.latest('pk').related_cells == {'cell_types': ['data_textcell']}
|
||||||
assert resp2.text.index('Hello world') < resp2.text.index('Foobar3')
|
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)
|
resp = resp.click('restore', index=6)
|
||||||
with CaptureQueriesContext(connection) as ctx:
|
with CaptureQueriesContext(connection) as ctx:
|
||||||
resp = resp.form.submit().follow()
|
resp = resp.form.submit().follow()
|
||||||
assert len(ctx.captured_queries) == 575
|
assert len(ctx.captured_queries) == 327
|
||||||
|
|
||||||
resp2 = resp.click('See online')
|
resp2 = resp.click('See online')
|
||||||
assert resp2.text.index('Foobar1') < resp2.text.index('Foobar2') < resp2.text.index('Foobar3')
|
assert resp2.text.index('Foobar1') < resp2.text.index('Foobar2') < resp2.text.index('Foobar3')
|
||||||
|
|
Loading…
Reference in New Issue