base: allow specifying resources to export (#15269)

This commit is contained in:
Valentin Deniaud 2019-12-19 11:46:48 +01:00
parent 4413995077
commit 696c66b80a
3 changed files with 17 additions and 2 deletions

View File

@ -10,6 +10,8 @@ class Command(BaseCommand):
help = 'Export the site'
def add_arguments(self, parser):
parser.add_argument('--slugs', nargs='+', default=None,
help='specify resources to export')
parser.add_argument('--output', metavar='FILE', default=None,
help='name of a file to write output to')
@ -18,4 +20,4 @@ class Command(BaseCommand):
output = open(options['output'], 'w')
else:
output = sys.stdout
json.dump(export_site(), output, indent=4)
json.dump(export_site(slugs=options['slugs']), output, indent=4)

View File

@ -287,7 +287,7 @@ class Request(RequestSession):
def export_site():
def export_site(slugs=None):
'''Dump passerelle configuration (users, resources and ACLs) to JSON dumpable dictionnary'''
from passerelle.base.models import ApiUser
from passerelle.base.models import BaseResource
@ -299,6 +299,8 @@ def export_site():
if subclass._meta.abstract:
continue
for resource in subclass.objects.all():
if slugs and resource.slug not in slugs:
continue
try:
resources.append(resource.export_json())
except NotImplementedError:

View File

@ -213,3 +213,14 @@ def test_export_access_rights(app, setup):
import_site(first, import_users=True)
second = export_site()
assert first == second
def test_export_by_slug():
Bdp.objects.create(service_url='https://bdp.example.com/', slug='bdp')
Bdp.objects.create(service_url='https://bdp2.example.com/', slug='bdp2')
Bdp.objects.create(service_url='https://bdp3.example.com/', slug='bdp3')
output = get_output_of_command('export_site', '--slugs', 'bdp', 'bdp3')
export = json.loads(output)
assert len(export['resources']) == 2
assert 'bdp2' not in [res['slug'] for res in export['resources']]