fix: Allow chart import to update the dataset an existing chart points to (#24821)
This commit is contained in:
parent
caffe3cb1f
commit
77889b29fb
|
|
@ -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()
|
||||
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue