rusackas commented on code in PR #43471:
URL: https://github.com/apache/superset/pull/43471#discussion_r3847300934
##########
superset/tags/core.py:
##########
@@ -54,80 +54,38 @@ def _tag_delete_listener_declarations() ->
tuple[DeleteListenerDeclaration, ...]
def register_sqla_event_listeners() -> None:
+ """Register cleanup of ``tagged_object`` rows on object deletion.
+
+ Only deletion is handled here: Superset no longer auto-generates
+ ``type:``/``editor:``/``favorited_by:`` tags (see ``TagType``'s docstring),
+ so there's nothing left to do on insert/update. Deletion cleanup stays,
+ since it applies to every tag on the object, custom tags included, and
+ ``tagged_object.object_id`` has no foreign key to cascade on its own.
+ """
import sqlalchemy as sqla
- from superset.connectors.sqla.models import SqlaTable
- from superset.models.core import FavStar
- from superset.models.dashboard import Dashboard
- from superset.models.slice import Slice
from superset.models.sql_lab import SavedQuery
- from superset.tags.models import (
- ChartUpdater,
- DashboardUpdater,
- DatasetUpdater,
- FavStarUpdater,
- QueryUpdater,
- )
-
- declarations: tuple[DeleteListenerDeclaration, ...] = (
- _tag_delete_listener_declarations()
- )
-
- sqla.event.listen(SqlaTable, "after_insert", DatasetUpdater.after_insert)
- sqla.event.listen(SqlaTable, "after_update", DatasetUpdater.after_update)
- register_delete_listener(declarations[0])
-
- sqla.event.listen(Slice, "after_insert", ChartUpdater.after_insert)
- sqla.event.listen(Slice, "after_update", ChartUpdater.after_update)
- register_delete_listener(declarations[1])
+ from superset.tags.models import QueryUpdater
- sqla.event.listen(Dashboard, "after_insert", DashboardUpdater.after_insert)
- sqla.event.listen(Dashboard, "after_update", DashboardUpdater.after_update)
- register_delete_listener(declarations[2])
+ declarations = _tag_delete_listener_declarations()
- sqla.event.listen(FavStar, "after_insert", FavStarUpdater.after_insert)
- sqla.event.listen(FavStar, "after_delete", FavStarUpdater.after_delete)
+ register_delete_listener(declarations[0]) # dataset
+ register_delete_listener(declarations[1]) # chart
+ register_delete_listener(declarations[2]) # dashboard
- sqla.event.listen(SavedQuery, "after_insert", QueryUpdater.after_insert)
- sqla.event.listen(SavedQuery, "after_update", QueryUpdater.after_update)
sqla.event.listen(SavedQuery, "after_delete", QueryUpdater.after_delete)
Review Comment:
Good catch — fixed by guarding the `SavedQuery` listener with
`sa.event.contains()` the same way
`register_delete_listener`/`remove_delete_listener` already do, so repeated
`register_sqla_event_listeners()` calls stay idempotent.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]