Skip to content

Commit 050c6da

Browse files
chessmanEugene Apollonskyeschutho
authored
fix(cli): add impersonate_user to db import (#29522)
Co-authored-by: Eugene Apollonsky <[email protected]> Co-authored-by: Elizabeth Thompson <[email protected]>
1 parent c016ca5 commit 050c6da

File tree

5 files changed

+28
-0
lines changed

5 files changed

+28
-0
lines changed

superset/databases/schemas.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -857,6 +857,7 @@ def fix_allow_csv_upload(
857857
allow_cvas = fields.Boolean()
858858
allow_dml = fields.Boolean(required=False)
859859
allow_csv_upload = fields.Boolean()
860+
impersonate_user = fields.Boolean()
860861
extra = fields.Nested(ImportV1DatabaseExtraSchema)
861862
uuid = fields.UUID(required=True)
862863
version = fields.String(required=True)

superset/models/core.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ class Database(Model, AuditMixinNullable, ImportExportMixin): # pylint: disable
171171
"allow_dml",
172172
"allow_file_upload",
173173
"extra",
174+
"impersonate_user",
174175
]
175176
extra_import_fields = [
176177
"password",

tests/integration_tests/databases/commands_tests.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,7 @@ def test_export_database_command_key_order(self, mock_g):
371371
"allow_dml",
372372
"allow_csv_upload",
373373
"extra",
374+
"impersonate_user",
374375
"uuid",
375376
"version",
376377
]

tests/unit_tests/databases/commands/importers/v1/import_test.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,30 @@ def test_import_database_with_version(mocker: MockerFixture, session: Session) -
172172
assert json.loads(database.extra)["version"] == "1.1.1"
173173

174174

175+
def test_import_database_with_user_impersonation(
176+
mocker: MockerFixture,
177+
session: Session,
178+
) -> None:
179+
"""
180+
Test importing a database that is managed externally.
181+
"""
182+
from superset import security_manager
183+
from superset.commands.database.importers.v1.utils import import_database
184+
from superset.models.core import Database
185+
from tests.integration_tests.fixtures.importexport import database_config
186+
187+
mocker.patch.object(security_manager, "can_access", return_value=True)
188+
mocker.patch("superset.commands.database.importers.v1.utils.add_permissions")
189+
engine = db.session.get_bind()
190+
Database.metadata.create_all(engine) # pylint: disable=no-member
191+
192+
config = copy.deepcopy(database_config)
193+
config["impersonate_user"] = True
194+
195+
database = import_database(config)
196+
assert database.impersonate_user is True
197+
198+
175199
def test_add_permissions(mocker: MockerFixture) -> None:
176200
"""
177201
Test adding permissions to a database when it's imported.

tests/unit_tests/datasets/commands/export_test.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ def test_export(session: Session) -> None:
220220
engine_params: {{}}
221221
metadata_cache_timeout: {{}}
222222
schemas_allowed_for_file_upload: []
223+
impersonate_user: false
223224
uuid: {database.uuid}
224225
version: 1.0.0
225226
""",

0 commit comments

Comments
 (0)