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 <[email protected]> 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,
