general: change export format to use a dictionary (#15870)
This commit is contained in:
parent
a2492e2b5b
commit
4f813b59e2
|
@ -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 [])
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue