Skip to content

Commit a26e1d8

Browse files
chore: remove sqlparse (#33564)
1 parent a7aa8f7 commit a26e1d8

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

77 files changed

+488
-3133
lines changed

pyproject.toml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,6 @@ dependencies = [
9494
"sqlalchemy>=1.4, <2",
9595
"sqlalchemy-utils>=0.38.3, <0.39",
9696
"sqlglot>=26.1.3, <27",
97-
"sqlparse>=0.5.0",
9897
# newer pandas needs 0.9+
9998
"tabulate>=0.9.0, <1.0",
10099
"typing-extensions>=4, <5",
@@ -219,7 +218,7 @@ combine_as_imports = true
219218
include_trailing_comma = true
220219
line_length = 88
221220
known_first_party = "superset"
222-
known_third_party = "alembic, apispec, backoff, celery, click, colorama, cron_descriptor, croniter, cryptography, dateutil, deprecation, flask, flask_appbuilder, flask_babel, flask_caching, flask_compress, flask_jwt_extended, flask_login, flask_migrate, flask_sqlalchemy, flask_talisman, flask_testing, flask_wtf, freezegun, geohash, geopy, holidays, humanize, isodate, jinja2, jwt, markdown, markupsafe, marshmallow, msgpack, nh3, numpy, pandas, parameterized, parsedatetime, pgsanity, polyline, prison, progress, pyarrow, sqlalchemy_bigquery, pyhive, pyparsing, pytest, pytest_mock, pytz, redis, requests, selenium, setuptools, shillelagh, simplejson, slack, sqlalchemy, sqlalchemy_utils, sqlparse, typing_extensions, urllib3, werkzeug, wtforms, wtforms_json, yaml"
221+
known_third_party = "alembic, apispec, backoff, celery, click, colorama, cron_descriptor, croniter, cryptography, dateutil, deprecation, flask, flask_appbuilder, flask_babel, flask_caching, flask_compress, flask_jwt_extended, flask_login, flask_migrate, flask_sqlalchemy, flask_talisman, flask_testing, flask_wtf, freezegun, geohash, geopy, holidays, humanize, isodate, jinja2, jwt, markdown, markupsafe, marshmallow, msgpack, nh3, numpy, pandas, parameterized, parsedatetime, pgsanity, polyline, prison, progress, pyarrow, sqlalchemy_bigquery, pyhive, pyparsing, pytest, pytest_mock, pytz, redis, requests, selenium, setuptools, shillelagh, simplejson, slack, sqlalchemy, sqlalchemy_utils, typing_extensions, urllib3, werkzeug, wtforms, wtforms_json, yaml"
223222
multi_line_output = 3
224223
order_by_type = false
225224

requirements/base.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -379,8 +379,6 @@ sqlalchemy-utils==0.38.3
379379
# flask-appbuilder
380380
sqlglot==26.17.1
381381
# via apache-superset (pyproject.toml)
382-
sqlparse==0.5.3
383-
# via apache-superset (pyproject.toml)
384382
sshtunnel==0.4.0
385383
# via apache-superset (pyproject.toml)
386384
tabulate==0.9.0

requirements/development.txt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -798,10 +798,6 @@ sqlglot==26.17.1
798798
# apache-superset
799799
sqloxide==0.1.51
800800
# via apache-superset
801-
sqlparse==0.5.3
802-
# via
803-
# -c requirements/base.txt
804-
# apache-superset
805801
sshtunnel==0.4.0
806802
# via
807803
# -c requirements/base.txt

superset/commands/database/uploaders/base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
from superset.connectors.sqla.models import SqlaTable
3636
from superset.daos.database import DatabaseDAO
3737
from superset.models.core import Database
38-
from superset.sql_parse import Table
38+
from superset.sql.parse import Table
3939
from superset.utils.backports import StrEnum
4040
from superset.utils.core import get_user
4141
from superset.utils.decorators import on_error, transaction

superset/commands/dataset/create.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
from superset.daos.dataset import DatasetDAO
3434
from superset.exceptions import SupersetSecurityException
3535
from superset.extensions import security_manager
36-
from superset.sql_parse import Table
36+
from superset.sql.parse import Table
3737
from superset.utils.decorators import on_error, transaction
3838

3939
logger = logging.getLogger(__name__)

superset/commands/dataset/duplicate.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
from superset.exceptions import SupersetErrorException
3737
from superset.extensions import db
3838
from superset.models.core import Database
39-
from superset.sql_parse import Table
39+
from superset.sql.parse import Table
4040
from superset.utils.decorators import on_error, transaction
4141

4242
logger = logging.getLogger(__name__)

superset/commands/dataset/exceptions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
ImportFailedError,
2727
UpdateFailedError,
2828
)
29-
from superset.sql_parse import Table
29+
from superset.sql.parse import Table
3030

3131

3232
def get_dataset_exist_error_msg(table: Table) -> str:

superset/commands/dataset/importers/v1/utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
from superset.commands.exceptions import ImportFailedError
3232
from superset.connectors.sqla.models import SqlaTable
3333
from superset.models.core import Database
34-
from superset.sql_parse import Table
34+
from superset.sql.parse import Table
3535
from superset.utils import json
3636
from superset.utils.core import get_user
3737

superset/commands/dataset/update.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
from superset.datasets.schemas import FolderSchema
4848
from superset.exceptions import SupersetSecurityException
4949
from superset.models.core import Database
50-
from superset.sql_parse import Table
50+
from superset.sql.parse import Table
5151
from superset.utils.decorators import on_error, transaction
5252

5353
logger = logging.getLogger(__name__)

superset/common/query_object.py

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
from flask import g
2626
from flask_babel import gettext as _
27+
from jinja2.exceptions import TemplateError
2728
from pandas import DataFrame
2829

2930
from superset import feature_flag_manager
@@ -34,7 +35,7 @@
3435
QueryObjectValidationError,
3536
)
3637
from superset.extensions import event_logger
37-
from superset.sql_parse import sanitize_clause
38+
from superset.sql.parse import sanitize_clause
3839
from superset.superset_typing import Column, Metric, OrderBy
3940
from superset.utils import json, pandas_postprocessing
4041
from superset.utils.core import (
@@ -260,9 +261,11 @@ def metric_names(self) -> list[str]:
260261
"""Return metrics names (labels), coerce adhoc metrics to strings."""
261262
return get_metric_names(
262263
self.metrics or [],
263-
self.datasource.verbose_map
264-
if self.datasource and hasattr(self.datasource, "verbose_map")
265-
else None,
264+
(
265+
self.datasource.verbose_map
266+
if self.datasource and hasattr(self.datasource, "verbose_map")
267+
else None
268+
),
266269
)
267270

268271
@property
@@ -298,11 +301,25 @@ def _validate_no_have_duplicate_labels(self) -> None:
298301
)
299302

300303
def _sanitize_filters(self) -> None:
304+
from superset.jinja_context import get_template_processor
305+
301306
for param in ("where", "having"):
302307
clause = self.extras.get(param)
303-
if clause:
308+
if clause and self.datasource:
304309
try:
305-
sanitized_clause = sanitize_clause(clause)
310+
database = self.datasource.database
311+
processor = get_template_processor(database=database)
312+
try:
313+
clause = processor.process_template(clause, force=True)
314+
except TemplateError as ex:
315+
raise QueryObjectValidationError(
316+
_(
317+
"Error in jinja expression in WHERE clause: %(msg)s",
318+
msg=ex.message,
319+
)
320+
) from ex
321+
engine = database.db_engine_spec.engine
322+
sanitized_clause = sanitize_clause(clause, engine)
306323
if sanitized_clause != clause:
307324
self.extras[param] = sanitized_clause
308325
except QueryClauseValidationException as ex:

0 commit comments

Comments
 (0)