manager: take snapshots after page import (#51475)
This commit is contained in:
parent
a8ab4035de
commit
051afa00d8
|
@ -525,7 +525,7 @@ class Page(models.Model):
|
|||
def load_serialized_pages(cls, json_site, request=None):
|
||||
cells_to_load = []
|
||||
to_load = []
|
||||
to_build = []
|
||||
imported_pages = []
|
||||
try:
|
||||
post_save.disconnect(cell_maintain_page_cell_cache)
|
||||
post_delete.disconnect(cell_maintain_page_cell_cache)
|
||||
|
@ -544,7 +544,7 @@ class Page(models.Model):
|
|||
|
||||
# now load pages
|
||||
for (page, created, json_page) in to_load:
|
||||
to_build.append(cls.load_serialized_page(json_page, page=page, request=request))
|
||||
imported_pages.append(cls.load_serialized_page(json_page, page=page, request=request))
|
||||
cells_to_load.extend(json_page.get('cells'))
|
||||
|
||||
# and cells
|
||||
|
@ -554,9 +554,11 @@ class Page(models.Model):
|
|||
post_delete.connect(cell_maintain_page_cell_cache)
|
||||
|
||||
# build cache
|
||||
for page in to_build:
|
||||
for page in imported_pages:
|
||||
page.build_cell_cache()
|
||||
|
||||
return imported_pages
|
||||
|
||||
@classmethod
|
||||
def export_all_for_json(cls):
|
||||
ordered_pages = Page.get_as_reordered_flat_hierarchy(cls.objects.all())
|
||||
|
|
|
@ -120,7 +120,7 @@ def import_site(data, if_empty=False, clean=False, request=None):
|
|||
try:
|
||||
MapLayer.load_serialized_objects(data.get('map-layers') or [])
|
||||
Asset.load_serialized_objects(data.get('assets') or [])
|
||||
Page.load_serialized_pages(data.get('pages') or [], request=request)
|
||||
pages = Page.load_serialized_pages(data.get('pages') or [], request=request)
|
||||
|
||||
if data.get('pwa'):
|
||||
PwaSettings.load_serialized_settings(data['pwa'].get('settings'))
|
||||
|
@ -137,6 +137,8 @@ def import_site(data, if_empty=False, clean=False, request=None):
|
|||
except IndexError:
|
||||
raise ImportSiteError(message)
|
||||
raise ImportSiteError(_('Unknown page "%s".') % page_slug)
|
||||
else:
|
||||
return pages
|
||||
|
||||
|
||||
def export_site_tar(fd, export_kwargs=None):
|
||||
|
@ -164,5 +166,6 @@ def import_site_tar(fd, if_empty=False, clean=False, overwrite=False, request=No
|
|||
json_site = tar.extractfile(tarinfo).read()
|
||||
data = json.loads(json_site.decode('utf-8'))
|
||||
data.update(untar_assets_files(tar, overwrite=overwrite))
|
||||
import_site(data, if_empty=if_empty, clean=clean, request=request)
|
||||
pages = import_site(data, if_empty=if_empty, clean=clean, request=request)
|
||||
tar.close()
|
||||
return pages
|
||||
|
|
|
@ -129,12 +129,15 @@ class SiteImportView(FormView):
|
|||
fd.seek(0)
|
||||
try:
|
||||
if format == 'json':
|
||||
import_site(json_site, request=self.request)
|
||||
pages = import_site(json_site, request=self.request)
|
||||
else:
|
||||
import_site_tar(fd, request=self.request)
|
||||
pages = import_site_tar(fd, request=self.request)
|
||||
except ImportSiteError as e:
|
||||
form.add_error('site_file', force_text(e))
|
||||
return self.form_invalid(form)
|
||||
else:
|
||||
for page in pages:
|
||||
PageSnapshot.take(page, request=self.request, comment=_('imported'))
|
||||
|
||||
return super(SiteImportView, self).form_valid(form)
|
||||
|
||||
|
|
|
@ -832,7 +832,9 @@ 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 [268, 269]
|
||||
assert len(ctx.captured_queries) in [303, 304]
|
||||
assert Page.objects.count() == 4
|
||||
assert PageSnapshot.objects.all().count() == 4
|
||||
|
||||
Page.objects.all().delete()
|
||||
assert LinkCell.objects.count() == 0
|
||||
|
@ -841,7 +843,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) == 237
|
||||
assert len(ctx.captured_queries) == 272
|
||||
assert set(Page.objects.get(slug='one').related_cells['cell_types']) == set(
|
||||
['data_textcell', 'data_linkcell']
|
||||
)
|
||||
|
@ -849,6 +851,7 @@ def test_site_export_import_json(app, admin_user):
|
|||
assert LinkCell.objects.count() == 2
|
||||
assert LinkCell.objects.get(page__slug='one').link_page.slug == 'two'
|
||||
assert LinkCell.objects.get(page__slug='two').link_page.slug == 'one'
|
||||
assert PageSnapshot.objects.all().count() == 8
|
||||
|
||||
resp = app.get('/manage/')
|
||||
resp = resp.click('Export Site')
|
||||
|
@ -904,6 +907,7 @@ def test_site_export_import_tar(app, admin_user):
|
|||
resp.form['site_file'] = Upload('site-export.json', site_export, 'application/json')
|
||||
resp = resp.form.submit()
|
||||
assert Page.objects.count() == 1
|
||||
assert PageSnapshot.objects.all().count() == 1
|
||||
assert TextCell.objects.count() == 1
|
||||
assert Asset.objects.filter(key='collectivity:banner').count() == 1
|
||||
assert open('%s/assets/test.png' % path, 'r').read() == 'foo'
|
||||
|
|
Loading…
Reference in New Issue