data: snapshot restore performances (#51472)
This commit is contained in:
parent
95a466f1c7
commit
a55d79e99b
|
@ -232,6 +232,9 @@ class Page(models.Model):
|
||||||
return os.path.splitext(self.picture.name)[-1]
|
return os.path.splitext(self.picture.name)[-1]
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
|
if 'update_fields' in kwargs:
|
||||||
|
return super().save(*args, **kwargs)
|
||||||
|
|
||||||
if not self.id:
|
if not self.id:
|
||||||
self.related_cells = {'cell_types': []}
|
self.related_cells = {'cell_types': []}
|
||||||
if self.order is None:
|
if self.order is None:
|
||||||
|
@ -493,16 +496,15 @@ class Page(models.Model):
|
||||||
cell['fields']['groups'] = [
|
cell['fields']['groups'] = [
|
||||||
[x] for x in cell['fields']['groups'] if isinstance(x, six.string_types)
|
[x] for x in cell['fields']['groups'] if isinstance(x, six.string_types)
|
||||||
]
|
]
|
||||||
if snapshot:
|
cell['fields']['page'] = page.object.id
|
||||||
cell['fields']['page'] = page.object.id
|
|
||||||
else:
|
|
||||||
cell['fields']['page'] = page.object.natural_key()
|
|
||||||
|
|
||||||
# if there were cells, remove them
|
# if there were cells, remove them
|
||||||
# if page was created, do nothing
|
# if page was created, do nothing
|
||||||
if created is False:
|
if created is False:
|
||||||
for cell in CellBase.get_cells(page_id=page.object.id):
|
for klass in get_cell_classes():
|
||||||
cell.delete()
|
if klass is None:
|
||||||
|
continue
|
||||||
|
klass.objects.filter(page=page.object).delete()
|
||||||
return page.object # get page out of deserialization object
|
return page.object # get page out of deserialization object
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -615,10 +617,14 @@ class PageSnapshot(models.Model):
|
||||||
def load_page(self, json_page, snapshot=None):
|
def load_page(self, json_page, snapshot=None):
|
||||||
try:
|
try:
|
||||||
post_save.disconnect(cell_maintain_page_cell_cache)
|
post_save.disconnect(cell_maintain_page_cell_cache)
|
||||||
|
post_delete.disconnect(cell_maintain_page_cell_cache)
|
||||||
|
|
||||||
page = Page.load_serialized_page(json_page, snapshot=snapshot)
|
page = Page.load_serialized_page(json_page, snapshot=snapshot)
|
||||||
page.load_serialized_cells(json_page['cells'])
|
page.load_serialized_cells(json_page['cells'])
|
||||||
finally:
|
finally:
|
||||||
post_save.connect(cell_maintain_page_cell_cache)
|
post_save.connect(cell_maintain_page_cell_cache)
|
||||||
|
post_delete.connect(cell_maintain_page_cell_cache)
|
||||||
|
|
||||||
page.build_cell_cache()
|
page.build_cell_cache()
|
||||||
return page
|
return page
|
||||||
|
|
||||||
|
@ -1990,6 +1996,8 @@ class ConfigJsonCell(JsonCellBase):
|
||||||
def create_redirects(sender, instance, raw, **kwargs):
|
def create_redirects(sender, instance, raw, **kwargs):
|
||||||
if raw or not instance.id or instance.snapshot_id:
|
if raw or not instance.id or instance.snapshot_id:
|
||||||
return
|
return
|
||||||
|
if kwargs.get('update_fields') and kwargs['update_fields'] == frozenset({'related_cells'}):
|
||||||
|
return
|
||||||
try:
|
try:
|
||||||
old_page = Page.objects.get(id=instance.id)
|
old_page = Page.objects.get(id=instance.id)
|
||||||
except Page.DoesNotExist:
|
except Page.DoesNotExist:
|
||||||
|
|
|
@ -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 [853, 854]
|
assert len(ctx.captured_queries) in [823, 824]
|
||||||
|
|
||||||
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) == 378
|
assert len(ctx.captured_queries) == 364
|
||||||
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']
|
||||||
)
|
)
|
||||||
|
@ -2187,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) == 327
|
assert len(ctx.captured_queries) == 143
|
||||||
|
|
||||||
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