chore(dao/command): Add transaction decorator to try to enforce "unit of work" (#24969)

This commit is contained in:
John Bodley
2024-06-28 12:33:56 -07:00
committed by GitHub
parent a3f0d00714
commit 8fb8199a55
151 changed files with 681 additions and 916 deletions

View File

@@ -15,6 +15,7 @@
# specific language governing permissions and limitations
# under the License.
import logging
from functools import partial
from typing import Optional
from superset.commands.base import BaseCommand
@@ -22,9 +23,9 @@ from superset.commands.query.exceptions import (
SavedQueryDeleteFailedError,
SavedQueryNotFoundError,
)
from superset.daos.exceptions import DAODeleteFailedError
from superset.daos.query import SavedQueryDAO
from superset.models.dashboard import Dashboard
from superset.utils.decorators import on_error, transaction
logger = logging.getLogger(__name__)
@@ -34,15 +35,11 @@ class DeleteSavedQueryCommand(BaseCommand):
self._model_ids = model_ids
self._models: Optional[list[Dashboard]] = None
@transaction(on_error=partial(on_error, reraise=SavedQueryDeleteFailedError))
def run(self) -> None:
self.validate()
assert self._models
try:
SavedQueryDAO.delete(self._models)
except DAODeleteFailedError as ex:
logger.exception(ex.exception)
raise SavedQueryDeleteFailedError() from ex
SavedQueryDAO.delete(self._models)
def validate(self) -> None:
# Validate/populate model exists