fix(importer): use ORM relationship assignment for dashboard_slices
The v1 import pipeline previously wrote dashboard ↔ chart membership via raw Core DML (``db.session.execute(delete(dashboard_slices)…)`` + ``db.session.execute(insert(dashboard_slices)…)``). With Continuum's M2M tracker enabled by the versioning feature, those Core writes emit malformed shadow INSERTs into ``dashboard_slices_version`` — the tracker can't see the composite-PK columns through the Core layer and produces rows with only ``(transaction_id, operation_type)`` populated, triggering a ``NOT NULL`` violation on ``(dashboard_id, slice_id)``. Rewrites both import paths (``ImportAssetsCommand._import`` in ``commands/importers/v1/assets.py`` and ``ImportDashboardsCommand._import`` in ``commands/dashboard/importers/v1/__init__.py``) to use ORM-level ``dashboard.slices = [...]`` reassignment followed by an explicit ``db.session.flush()``. The explicit flush is necessary to land the M2M rows before any subsequent autoflush fires an inner-flush event handler that would reset the relationship change (cf. the SAWarning ``Attribute history events accumulated on N previously clean instances within inner-flush event handlers have been reset``). The unit tests previously called ``_import`` directly twice in the same session — production wraps ``run()`` in ``@transaction`` so each invocation gets its own DB+Continuum transaction. Added ``db.session.commit()`` between calls in ``test_import_adds_dashboard_charts``, ``test_import_removes_dashboard_charts``, and ``test_dashboard_import_with_overwrite_replaces_charts`` so the tests mirror production semantics; otherwise the second call's M2M shadow inserts conflict with the first call's on ``UNIQUE (dashboard_id, slice_id, transaction_id)``.
M
Mike Bridge committed
a0546b8a43e37744d88e06b427add68996fada79
Parent: 0afeda4