You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by be...@apache.org on 2023/12/06 18:18:25 UTC
(superset) 01/01: chore: remove duplicate process_sql_expression
This is an automated email from the ASF dual-hosted git repository.
beto pushed a commit to branch remove-duplicate-process_sql_expression
in repository https://gitbox.apache.org/repos/asf/superset.git
commit 5bb9cf86aa87dbf9d8df19c632d11b5b1dd9f064
Author: Beto Dealmeida <ro...@dealmeida.net>
AuthorDate: Wed Dec 6 13:17:17 2023 -0500
chore: remove duplicate process_sql_expression
---
superset/connectors/sqla/models.py | 26 +++-----------------
superset/models/helpers.py | 50 +++++++++++++++++++-------------------
2 files changed, 28 insertions(+), 48 deletions(-)
diff --git a/superset/connectors/sqla/models.py b/superset/connectors/sqla/models.py
index 598bc6741b..f67036b0b6 100644
--- a/superset/connectors/sqla/models.py
+++ b/superset/connectors/sqla/models.py
@@ -104,6 +104,7 @@ from superset.models.helpers import (
CertificationMixin,
ExploreMixin,
ImportExportMixin,
+ process_sql_expression,
QueryResult,
QueryStringExtended,
validate_adhoc_subquery,
@@ -1078,27 +1079,6 @@ sqlatable_user = Table(
)
-def _process_sql_expression(
- expression: str | None,
- database_id: int,
- schema: str,
- template_processor: BaseTemplateProcessor | None = None,
-) -> str | None:
- if template_processor and expression:
- expression = template_processor.process_template(expression)
- if expression:
- try:
- expression = validate_adhoc_subquery(
- expression,
- database_id,
- schema,
- )
- expression = sanitize_clause(expression)
- except (QueryClauseValidationException, SupersetSecurityException) as ex:
- raise QueryObjectValidationError(ex.message) from ex
- return expression
-
-
class SqlaTable(
Model, BaseDatasource, ExploreMixin
): # pylint: disable=too-many-public-methods
@@ -1533,7 +1513,7 @@ class SqlaTable(
sqla_column = column(column_name)
sqla_metric = self.sqla_aggregations[metric["aggregate"]](sqla_column)
elif expression_type == utils.AdhocMetricExpressionType.SQL:
- expression = _process_sql_expression(
+ expression = process_sql_expression(
expression=metric["sqlExpression"],
database_id=self.database_id,
schema=self.schema,
@@ -1563,7 +1543,7 @@ class SqlaTable(
:rtype: sqlalchemy.sql.column
"""
label = utils.get_column_name(col)
- expression = _process_sql_expression(
+ expression = process_sql_expression(
expression=col["sqlExpression"],
database_id=self.database_id,
schema=self.schema,
diff --git a/superset/models/helpers.py b/superset/models/helpers.py
index df3dd93488..35486d19a6 100644
--- a/superset/models/helpers.py
+++ b/superset/models/helpers.py
@@ -107,6 +107,27 @@ SERIES_LIMIT_SUBQ_ALIAS = "series_limit"
ADVANCED_DATA_TYPES = config["ADVANCED_DATA_TYPES"]
+def process_sql_expression(
+ expression: Optional[str],
+ database_id: int,
+ schema: str,
+ template_processor: Optional[BaseTemplateProcessor],
+) -> Optional[str]:
+ if template_processor and expression:
+ expression = template_processor.process_template(expression)
+ if expression:
+ try:
+ expression = validate_adhoc_subquery(
+ expression,
+ database_id,
+ schema,
+ )
+ expression = sanitize_clause(expression)
+ except (QueryClauseValidationException, SupersetSecurityException) as ex:
+ raise QueryObjectValidationError(ex.message) from ex
+ return expression
+
+
def validate_adhoc_subquery(
sql: str,
database_id: int,
@@ -838,27 +859,6 @@ class ExploreMixin: # pylint: disable=too-many-public-methods
)
) from ex
- def _process_sql_expression(
- self,
- expression: Optional[str],
- database_id: int,
- schema: str,
- template_processor: Optional[BaseTemplateProcessor],
- ) -> Optional[str]:
- if template_processor and expression:
- expression = template_processor.process_template(expression)
- if expression:
- expression = validate_adhoc_subquery(
- expression,
- database_id,
- schema,
- )
- try:
- expression = sanitize_clause(expression)
- except QueryClauseValidationException as ex:
- raise QueryObjectValidationError(ex.message) from ex
- return expression
-
def make_sqla_column_compatible(
self, sqla_col: ColumnElement, label: Optional[str] = None
) -> ColumnElement:
@@ -1136,7 +1136,7 @@ class ExploreMixin: # pylint: disable=too-many-public-methods
sqla_column = sa.column(column_name)
sqla_metric = self.sqla_aggregations[metric["aggregate"]](sqla_column)
elif expression_type == utils.AdhocMetricExpressionType.SQL:
- expression = self._process_sql_expression(
+ expression = process_sql_expression(
expression=metric["sqlExpression"],
database_id=self.database_id,
schema=self.schema,
@@ -1562,7 +1562,7 @@ class ExploreMixin: # pylint: disable=too-many-public-methods
if isinstance(col, dict):
col = cast(AdhocMetric, col)
if col.get("sqlExpression"):
- col["sqlExpression"] = self._process_sql_expression(
+ col["sqlExpression"] = process_sql_expression(
expression=col["sqlExpression"],
database_id=self.database_id,
schema=self.schema,
@@ -1920,7 +1920,7 @@ class ExploreMixin: # pylint: disable=too-many-public-methods
msg=ex.message,
)
) from ex
- where = self._process_sql_expression(
+ where = process_sql_expression(
expression=where,
database_id=self.database_id,
schema=self.schema,
@@ -1938,7 +1938,7 @@ class ExploreMixin: # pylint: disable=too-many-public-methods
msg=ex.message,
)
) from ex
- having = self._process_sql_expression(
+ having = process_sql_expression(
expression=having,
database_id=self.database_id,
schema=self.schema,