commands: add an only-assets parameter to export command (#50399) #144
|
@ -33,20 +33,32 @@ class Command(BaseCommand):
|
|||
parser.add_argument(
|
||||
'--format-json', action='store_true', default=False, help='use JSON format with no asset files'
|
||||
)
|
||||
parser.add_argument('--only-assets', action='store_true', default=False, help='only export assets')
|
||||
|
||||
def handle(self, *args, **options):
|
||||
export_kwargs = {}
|
||||
if options.get('only_assets'):
|
||||
export_kwargs = {
|
||||
'pages': False,
|
||||
'cartography': False,
|
||||
'pwa': False,
|
||||
'assets': True,
|
||||
'payment': False,
|
||||
'site_settings': False,
|
||||
}
|
||||
|
||||
if options['format_json']:
|
||||
if options['output'] and options['output'] != '-':
|
||||
with open(options['output'], 'w') as output:
|
||||
json.dump(export_site(), output, indent=2)
|
||||
json.dump(export_site(**export_kwargs), output, indent=2)
|
||||
else:
|
||||
json.dump(export_site(), sys.stdout, indent=2)
|
||||
json.dump(export_site(**export_kwargs), sys.stdout, indent=2)
|
||||
return
|
||||
|
||||
if options['output'] and options['output'] != '-':
|
||||
try:
|
||||
with open(options['output'], 'wb') as output:
|
||||
export_site_tar(output)
|
||||
export_site_tar(output, export_kwargs=export_kwargs)
|
||||
except OSError as e:
|
||||
raise CommandError(e)
|
||||
return
|
||||
|
|
|
@ -45,6 +45,7 @@ def some_map_layers():
|
|||
|
||||
@pytest.fixture
|
||||
def some_assets():
|
||||
shutil.rmtree(default_storage.path(''))
|
||||
Asset(key='banner', asset=File(BytesIO(b'test'), 'test.png')).save()
|
||||
Asset(key='favicon', asset=File(BytesIO(b'test2'), 'test2.png')).save()
|
||||
|
||||
|
@ -386,6 +387,21 @@ def test_import_export_extra_fields(app, some_data):
|
|||
assert TextCell.objects.count() == 1
|
||||
|
||||
|
||||
def test_import_export_only_assets(app, some_data, some_map_layers, some_assets):
|
||||
output = get_output_of_command('export_site', '--only-assets')
|
||||
payload = json.loads(output)
|
||||
assert list(payload.keys()) == ['assets']
|
||||
|
||||
Page.objects.all().delete()
|
||||
MapLayer.objects.all().delete()
|
||||
Asset.objects.all().delete()
|
||||
import_site(data=payload)
|
||||
|
||||
assert Page.objects.count() == 0
|
||||
assert Map.objects.count() == 0
|
||||
assert Asset.objects.count() == 2
|
||||
|
||||
|
||||
def test_import_export_tar(tmpdir, some_assets):
|
||||
filename = os.path.join(str(tmpdir), 'file.tar')
|
||||
|
||||
|
@ -453,6 +469,23 @@ def test_import_export_tar(tmpdir, some_assets):
|
|||
call_command('import_site', filename)
|
||||
|
||||
|
||||
def test_import_export_tar_only_assets(tmpdir, some_data, some_map_layers, some_assets):
|
||||
filename = os.path.join(str(tmpdir), 'file.tar')
|
||||
call_command('export_site', '--only-assets', '--output', filename)
|
||||
|
||||
Page.objects.all().delete()
|
||||
MapLayer.objects.all().delete()
|
||||
Asset.objects.all().delete()
|
||||
call_command('import_site', filename)
|
||||
|
||||
assert Page.objects.count() == 0
|
||||
assert Map.objects.count() == 0
|
||||
assert Asset.objects.count() == 2
|
||||
assert Asset.objects.get(key='banner').asset.name == 'assets/test.png'
|
||||
with open('%s/assets/test.png' % default_storage.path('')) as fd:
|
||||
assert fd.read() == 'test'
|
||||
|
||||
|
||||
def test_import_export_payment(app):
|
||||
backend = PaymentBackend.objects.create(label='Test', slug='test', service_options={'test': True})
|
||||
Regie.objects.create(label='Test regie', slug='test-regie', payment_backend=backend)
|
||||
|
|
Loading…
Reference in New Issue