From 6a5b0a35ae40bcc491d32542f8fdf5401d166442 Mon Sep 17 00:00:00 2001 From: Valentin Deniaud Date: Thu, 19 Dec 2019 11:46:48 +0100 Subject: [PATCH 1/2] base: allow specifying resources to export (#15269) --- passerelle/base/management/commands/export_site.py | 4 +++- passerelle/utils/__init__.py | 4 +++- tests/test_import_export.py | 11 +++++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/passerelle/base/management/commands/export_site.py b/passerelle/base/management/commands/export_site.py index c00f2fdd..ab1a6102 100644 --- a/passerelle/base/management/commands/export_site.py +++ b/passerelle/base/management/commands/export_site.py @@ -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) diff --git a/passerelle/utils/__init__.py b/passerelle/utils/__init__.py index fcf4bb4c..50368aa3 100644 --- a/passerelle/utils/__init__.py +++ b/passerelle/utils/__init__.py @@ -285,7 +285,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 @@ -297,6 +297,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: diff --git a/tests/test_import_export.py b/tests/test_import_export.py index 69cf00d3..ebe93f25 100644 --- a/tests/test_import_export.py +++ b/tests/test_import_export.py @@ -211,3 +211,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']] -- 2.20.1