Skip to content

fix(sqllab permalink): Commit SQL Lab permalinks #33237

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Apr 25, 2025
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 25 additions & 12 deletions superset/commands/sql_lab/permalink/create.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,21 @@
# specific language governing permissions and limitations
# under the License.
import logging
from functools import partial
from typing import Any

from sqlalchemy.exc import SQLAlchemyError

from superset import db
from superset.commands.sql_lab.permalink.base import BaseSqlLabPermalinkCommand
from superset.daos.key_value import KeyValueDAO
from superset.key_value.exceptions import KeyValueCodecEncodeException
from superset.key_value.exceptions import (
KeyValueCodecEncodeException,
KeyValueCreateFailedError,
)
from superset.key_value.utils import encode_permalink_key
from superset.sqllab.permalink.exceptions import SqlLabPermalinkCreateFailedError
from superset.utils.decorators import on_error, transaction

logger = logging.getLogger(__name__)

Expand All @@ -31,19 +38,25 @@ class CreateSqlLabPermalinkCommand(BaseSqlLabPermalinkCommand):
def __init__(self, state: dict[str, Any]):
self._properties = state.copy()

@transaction(
on_error=partial(
on_error,
catches=(
KeyValueCodecEncodeException,
KeyValueCreateFailedError,
SQLAlchemyError,
),
reraise=SqlLabPermalinkCreateFailedError,
),
)
def run(self) -> str:
self.validate()
try:
entry = KeyValueDAO.create_entry(
self.resource, self._properties, self.codec
)
db.session.flush()
key = entry.id
if key is None:
raise SqlLabPermalinkCreateFailedError("Unexpected missing key id")
return encode_permalink_key(key=key, salt=self.salt)
except KeyValueCodecEncodeException as ex:
raise SqlLabPermalinkCreateFailedError(str(ex)) from ex
entry = KeyValueDAO.create_entry(self.resource, self._properties, self.codec)
db.session.flush()
key = entry.id
if key is None:
raise SqlLabPermalinkCreateFailedError("Unexpected missing key id")
return encode_permalink_key(key=key, salt=self.salt)

def validate(self) -> None:
pass
Loading