Skip to content

Commit

Permalink
chore: remove deprecated functions in SQLAlchemy (apache#25911)
Browse files Browse the repository at this point in the history
  • Loading branch information
gnought authored Nov 8, 2023
1 parent 6ecddf6 commit 9e4c7c4
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 23 deletions.
39 changes: 18 additions & 21 deletions superset/db_engine_specs/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,10 @@
from pathlib import Path
from typing import Any, Optional

import sqlalchemy.databases
import sqlalchemy.dialects
from importlib_metadata import entry_points
from sqlalchemy.engine.default import DefaultDialect
from sqlalchemy.engine.url import URL
from sqlalchemy.exc import NoSuchModuleError

from superset import app, feature_flag_manager
from superset.db_engine_specs.base import BaseEngineSpec
Expand Down Expand Up @@ -128,27 +127,26 @@ def get_available_engine_specs() -> dict[type[BaseEngineSpec], set[str]]:
drivers: dict[str, set[str]] = defaultdict(set)

# native SQLAlchemy dialects
for attr in sqlalchemy.databases.__all__:
dialect = getattr(sqlalchemy.dialects, attr)
for attribute in dialect.__dict__.values():
for attr in sqlalchemy.dialects.__all__:
try:
dialect = sqlalchemy.dialects.registry.load(attr)
if (
hasattr(attribute, "dialect")
and inspect.isclass(attribute.dialect)
and issubclass(attribute.dialect, DefaultDialect)
issubclass(dialect, DefaultDialect)
and hasattr(dialect, "driver")
# adodbapi dialect is removed in SQLA 1.4 and doesn't implement the
# `dbapi` method, hence needs to be ignored to avoid logging a warning
and attribute.dialect.driver != "adodbapi"
and dialect.driver != "adodbapi"
):
try:
attribute.dialect.dbapi()
dialect.dbapi()
except ModuleNotFoundError:
continue
except Exception as ex: # pylint: disable=broad-except
logger.warning(
"Unable to load dialect %s: %s", attribute.dialect, ex
)
logger.warning("Unable to load dialect %s: %s", dialect, ex)
continue
drivers[attr].add(attribute.dialect.driver)
drivers[attr].add(dialect.driver)
except NoSuchModuleError:
continue

# installed 3rd-party dialects
for ep in entry_points(group="sqlalchemy.dialects"):
Expand All @@ -167,21 +165,20 @@ def get_available_engine_specs() -> dict[type[BaseEngineSpec], set[str]]:
driver = driver.decode()
drivers[backend].add(driver)

dbs_denylist = app.config["DBS_AVAILABLE_DENYLIST"]
if not feature_flag_manager.is_feature_enabled("ENABLE_SUPERSET_META_DB"):
dbs_denylist["superset"] = {""}
dbs_denylist_engines = dbs_denylist.keys()
available_engines = {}

for engine_spec in load_engine_specs():
driver = drivers[engine_spec.engine]

# do not add denied db engine specs to available list
dbs_denylist = app.config["DBS_AVAILABLE_DENYLIST"]
if not feature_flag_manager.is_feature_enabled("ENABLE_SUPERSET_META_DB"):
dbs_denylist["superset"] = {""}
dbs_denylist_engines = dbs_denylist.keys()

if (
engine_spec.engine in dbs_denylist_engines
and hasattr(engine_spec, "default_driver")
and engine_spec.default_driver in dbs_denylist[engine_spec.engine]
):
# do not add denied db engine specs to available list
continue

# lookup driver by engine aliases.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
"""
import sqlalchemy as sa
from alembic import op
from sqlalchemy.databases import mysql
from sqlalchemy.dialects import mysql
from sqlalchemy.dialects.mysql.base import MySQLDialect

# revision identifiers, used by Alembic.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@

import sqlalchemy as sa
from alembic import op
from sqlalchemy.databases import mysql
from sqlalchemy.dialects import mysql
from sqlalchemy.dialects.mysql.base import MySQLDialect


Expand Down

0 comments on commit 9e4c7c4

Please sign in to comment.