You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by el...@apache.org on 2023/10/20 23:02:50 UTC
[superset] 03/09: fix: Allow chart import to update the dataset an existing chart points to (#24821)
This is an automated email from the ASF dual-hosted git repository.
elizabeth pushed a commit to branch 2.1
in repository https://gitbox.apache.org/repos/asf/superset.git
commit 0bc086569222abaaa332d60110ee9aea1a9ff893
Author: Jack Fragassi <jf...@gmail.com>
AuthorDate: Fri Jul 28 16:08:03 2023 -0700
fix: Allow chart import to update the dataset an existing chart points to (#24821)
---
superset/charts/commands/importers/v1/utils.py | 5 ++++-
superset/models/helpers.py | 16 ++++++++++------
2 files changed, 14 insertions(+), 7 deletions(-)
diff --git a/superset/charts/commands/importers/v1/utils.py b/superset/charts/commands/importers/v1/utils.py
index d4aeb17a1e..bbbe67db92 100644
--- a/superset/charts/commands/importers/v1/utils.py
+++ b/superset/charts/commands/importers/v1/utils.py
@@ -46,7 +46,10 @@ def import_chart(
# TODO (betodealmeida): move this logic to import_from_dict
config["params"] = json.dumps(config["params"])
- chart = Slice.import_from_dict(session, config, recursive=False)
+ chart = Slice.import_from_dict(
+ session, config, recursive=False, allow_reparenting=True
+ )
+
if chart.id is None:
session.flush()
diff --git a/superset/models/helpers.py b/superset/models/helpers.py
index bce9970884..4c68e807d4 100644
--- a/superset/models/helpers.py
+++ b/superset/models/helpers.py
@@ -184,7 +184,7 @@ class ImportExportMixin:
__mapper__: Mapper
@classmethod
- def _unique_constrains(cls) -> List[Set[str]]:
+ def _unique_constraints(cls) -> list[set[str]]:
"""Get all (single column and multi column) unique constraints"""
unique = [
{c.name for c in u.columns}
@@ -245,7 +245,8 @@ class ImportExportMixin:
dict_rep: Dict[Any, Any],
parent: Optional[Any] = None,
recursive: bool = True,
- sync: Optional[List[str]] = None,
+ sync: Optional[list[str]] = None,
+ allow_reparenting: bool = False,
) -> Any:
"""Import obj from a dictionary"""
if sync is None:
@@ -258,7 +259,7 @@ class ImportExportMixin:
| {"uuid"}
)
new_children = {c: dict_rep[c] for c in cls.export_children if c in dict_rep}
- unique_constrains = cls._unique_constrains()
+ unique_constraints = cls._unique_constraints()
filters = [] # Using these filters to check if obj already exists
@@ -279,8 +280,11 @@ class ImportExportMixin:
for k, v in parent_refs.items():
dict_rep[k] = getattr(parent, v)
- # Add filter for parent obj
- filters.extend([getattr(cls, k) == dict_rep.get(k) for k in parent_refs.keys()])
+ if not allow_reparenting:
+ # Add filter for parent obj
+ filters.extend(
+ [getattr(cls, k) == dict_rep.get(k) for k in parent_refs.keys()]
+ )
# Add filter for unique constraints
ucs = [
@@ -291,7 +295,7 @@ class ImportExportMixin:
if dict_rep.get(k) is not None
]
)
- for cs in unique_constrains
+ for cs in unique_constraints
]
filters.append(or_(*ucs))