fix: Allow chart import to update the dataset an existing chart points to (#24821)

This commit is contained in:
Jack Fragassi 2023-07-28 16:08:03 -07:00 committed by GitHub
parent caffe3cb1f
commit 77889b29fb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 6 deletions

View File

@ -53,7 +53,9 @@ def import_chart(
# migrate old viz types to new ones
config = migrate_chart(config)
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()

View File

@ -182,7 +182,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}
@ -244,6 +244,7 @@ class ImportExportMixin:
parent: Optional[Any] = None,
recursive: bool = True,
sync: Optional[list[str]] = None,
allow_reparenting: bool = False,
) -> Any:
"""Import obj from a dictionary"""
if sync is None:
@ -256,7 +257,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
@ -275,8 +276,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 = [
@ -287,7 +291,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))