manager: take snapshots after page import (#51475)
gitea-wip/combo/pipeline/head Build started... Details
gitea/combo/pipeline/head Build started... Details

This commit is contained in:
Lauréline Guérin 2021-03-08 09:17:26 +01:00
parent a8ab4035de
commit 051afa00d8
No known key found for this signature in database
GPG Key ID: 1FAB9B9B4F93D473
4 changed files with 21 additions and 9 deletions

View File

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

View File

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

View File

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

View File

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