From dc493fe7afeab11464c435b09b6da8b6e1caaf32 Mon Sep 17 00:00:00 2001 From: James O'Claire Date: Tue, 27 Feb 2024 23:32:04 +0800 Subject: [PATCH] fix(import-datasources): Use "admin" user as default for importing datasources (#27154) --- superset/cli/importexport.py | 39 ++++++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/superset/cli/importexport.py b/superset/cli/importexport.py index 5b19cc9ffc0d..56abcc31fea1 100755 --- a/superset/cli/importexport.py +++ b/superset/cli/importexport.py @@ -29,6 +29,7 @@ from superset import security_manager from superset.cli.lib import feature_flags from superset.extensions import db +from superset.utils.core import override_user logger = logging.getLogger(__name__) @@ -174,26 +175,34 @@ def import_dashboards(path: str, username: Optional[str]) -> None: "-p", help="Path to a single ZIP file", ) - def import_datasources(path: str) -> None: + @click.option( + "--username", + "-u", + required=False, + default="admin", + help="Specify the user name to assign datasources to", + ) + def import_datasources(path: str, username: Optional[str] = "admin") -> None: """Import datasources from ZIP file""" # pylint: disable=import-outside-toplevel from superset.commands.dataset.importers.dispatcher import ImportDatasetsCommand from superset.commands.importers.v1.utils import get_contents_from_bundle - if is_zipfile(path): - with ZipFile(path) as bundle: - contents = get_contents_from_bundle(bundle) - else: - with open(path) as file: - contents = {path: file.read()} - try: - ImportDatasetsCommand(contents, overwrite=True).run() - except Exception: # pylint: disable=broad-except - logger.exception( - "There was an error when importing the dataset(s), please check the " - "exception traceback in the log" - ) - sys.exit(1) + with override_user(user=security_manager.find_user(username=username)): + if is_zipfile(path): + with ZipFile(path) as bundle: + contents = get_contents_from_bundle(bundle) + else: + with open(path) as file: + contents = {path: file.read()} + try: + ImportDatasetsCommand(contents, overwrite=True).run() + except Exception: # pylint: disable=broad-except + logger.exception( + "There was an error when importing the dataset(s), please check the " + "exception traceback in the log" + ) + sys.exit(1) else: