general: change export format to use a dictionary (#15870)

This commit is contained in:
Frédéric Péters 2017-06-06 13:30:15 +02:00
parent a2492e2b5b
commit 4f813b59e2
2 changed files with 18 additions and 7 deletions

View File

@ -20,7 +20,7 @@ from .models import Page
def export_site():
'''Dump site objects to JSON-dumpable dictionnary'''
return Page.export_all_for_json()
return {'pages': Page.export_all_for_json()}
def import_site(data, if_empty=False, clean=False):
@ -30,5 +30,10 @@ def import_site(data, if_empty=False, clean=False):
if clean:
Page.objects.all().delete()
if isinstance(data, list):
# old export form with a list of pages, convert it to new dictionary
# format.
data = {'pages': data}
with transaction.atomic():
Page.load_serialized_pages(data)
Page.load_serialized_pages(data.get('pages') or [])

View File

@ -36,16 +36,16 @@ def get_output_of_command(command, *args, **kwargs):
def test_import_export(app, some_data):
output = get_output_of_command('export_site')
assert len(json.loads(output)) == 3
import_site(data=[], clean=True)
assert len(json.loads(output)['pages']) == 3
import_site(data={}, clean=True)
assert Page.objects.all().count() == 0
assert TextCell.objects.all().count() == 0
empty_output = get_output_of_command('export_site')
assert len(json.loads(empty_output)) == 0
assert len(json.loads(empty_output)['pages']) == 0
Page(title='test', slug='test').save()
old_stdin = sys.stdin
sys.stdin = StringIO(json.dumps([]))
sys.stdin = StringIO(json.dumps({}))
assert Page.objects.count() == 1
try:
call_command('import_site', '-', clean=True)
@ -61,7 +61,7 @@ def test_import_export(app, some_data):
assert Page.objects.count() == 3
assert TextCell.objects.all().count() == 1
import_site(data=[], if_empty=True)
import_site(data={}, if_empty=True)
assert Page.objects.count() == 3
assert TextCell.objects.all().count() == 1
@ -70,3 +70,9 @@ def test_import_export(app, some_data):
empty_output = get_output_of_command('export_site', output=os.path.join(tempdir, 't.json'))
assert os.path.exists(os.path.join(tempdir, 't.json'))
shutil.rmtree(tempdir)
def test_backward_compatibility_import(app, some_data):
old_export = Page.export_all_for_json()
Page.objects.all().delete()
import_site(data=old_export)
assert Page.objects.count() == 3