diff --git a/superset/connectors/sqla/models.py b/superset/connectors/sqla/models.py index dd9334d9d0..5a644188bf 100644 --- a/superset/connectors/sqla/models.py +++ b/superset/connectors/sqla/models.py @@ -33,11 +33,11 @@ import dateutil.parser import numpy as np import pandas as pd import sqlalchemy as sa -from flask import escape, Markup from flask_appbuilder import Model from flask_appbuilder.security.sqla.models import User from flask_babel import gettext as __, lazy_gettext as _ from jinja2.exceptions import TemplateError +from markupsafe import escape, Markup from sqlalchemy import ( and_, Boolean, diff --git a/superset/connectors/sqla/views.py b/superset/connectors/sqla/views.py index 36eebcb3f7..6917667b0f 100644 --- a/superset/connectors/sqla/views.py +++ b/superset/connectors/sqla/views.py @@ -18,13 +18,14 @@ import logging import re -from flask import flash, Markup, redirect +from flask import flash, redirect from flask_appbuilder import CompactCRUDMixin, expose, permission_name from flask_appbuilder.fields import QuerySelectField from flask_appbuilder.fieldwidgets import Select2Widget from flask_appbuilder.models.sqla.interface import SQLAInterface from flask_appbuilder.security.decorators import has_access from flask_babel import lazy_gettext as _ +from markupsafe import Markup from wtforms.validators import DataRequired, Regexp from superset import db diff --git a/superset/models/helpers.py b/superset/models/helpers.py index 684ef51efa..450def33b2 100644 --- a/superset/models/helpers.py +++ b/superset/models/helpers.py @@ -36,13 +36,14 @@ import pytz import sqlalchemy as sa import sqlparse import yaml -from flask import escape, g, Markup +from flask import g from flask_appbuilder import Model from flask_appbuilder.models.decorators import renders from flask_appbuilder.models.mixins import AuditMixin from flask_appbuilder.security.sqla.models import User from flask_babel import lazy_gettext as _ from jinja2.exceptions import TemplateError +from markupsafe import escape, Markup from sqlalchemy import and_, Column, or_, UniqueConstraint from sqlalchemy.exc import MultipleResultsFound from sqlalchemy.ext.declarative import declared_attr diff --git a/superset/models/sql_lab.py b/superset/models/sql_lab.py index 25c21cdfc8..455dfd1aff 100644 --- a/superset/models/sql_lab.py +++ b/superset/models/sql_lab.py @@ -25,12 +25,13 @@ from typing import Any, Optional, TYPE_CHECKING import simplejson as json import sqlalchemy as sqla -from flask import current_app, Markup +from flask import current_app from flask_appbuilder import Model from flask_appbuilder.models.decorators import renders from flask_babel import gettext as __ from humanize import naturaltime from jinja2.exceptions import TemplateError +from markupsafe import Markup from sqlalchemy import ( Boolean, Column, diff --git a/superset/tags/models.py b/superset/tags/models.py index 7361441940..49efb750be 100644 --- a/superset/tags/models.py +++ b/superset/tags/models.py @@ -19,8 +19,8 @@ from __future__ import annotations import enum from typing import TYPE_CHECKING -from flask import escape from flask_appbuilder import Model +from markupsafe import escape from sqlalchemy import ( Column, Enum, @@ -87,7 +87,6 @@ class ObjectType(enum.Enum): class Tag(Model, AuditMixinNullable): - """A tag attached to an object (query, chart, dashboard, or dataset).""" __tablename__ = "tag" @@ -106,7 +105,6 @@ class Tag(Model, AuditMixinNullable): class TaggedObject(Model, AuditMixinNullable): - """An association between an object and a tag.""" __tablename__ = "tagged_object" diff --git a/superset/utils/core.py b/superset/utils/core.py index c093cbc118..de1034ddb0 100644 --- a/superset/utils/core.py +++ b/superset/utils/core.py @@ -60,11 +60,12 @@ import pandas as pd import sqlalchemy as sa from cryptography.hazmat.backends import default_backend from cryptography.x509 import Certificate, load_pem_x509_certificate -from flask import current_app, g, Markup, request +from flask import current_app, g, request from flask_appbuilder import SQLA from flask_appbuilder.security.sqla.models import User from flask_babel import gettext as __ from flask_babel.speaklater import LazyString +from markupsafe import Markup from pandas.api.types import infer_dtype from pandas.core.dtypes.common import is_numeric_dtype from sqlalchemy import event, exc, inspect, select, Text diff --git a/superset/utils/date_parser.py b/superset/utils/date_parser.py index 615fab4559..0b4c0c2bbd 100644 --- a/superset/utils/date_parser.py +++ b/superset/utils/date_parser.py @@ -49,7 +49,7 @@ from superset.commands.chart.exceptions import ( ) from superset.constants import InstantTimeComparison, LRU_CACHE_MAX_SIZE, NO_TIME_RANGE -ParserElement.enablePackrat() +ParserElement.enable_packrat() logger = logging.getLogger(__name__) diff --git a/superset/views/chart/mixin.py b/superset/views/chart/mixin.py index 00950fc8fc..7c8f66dcc9 100644 --- a/superset/views/chart/mixin.py +++ b/superset/views/chart/mixin.py @@ -14,8 +14,8 @@ # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. -from flask import Markup from flask_babel import lazy_gettext as _ +from markupsafe import Markup from superset.dashboards.filters import DashboardAccessFilter from superset.views.chart.filters import SliceFilter diff --git a/superset/views/database/mixins.py b/superset/views/database/mixins.py index c8fdaae500..c6e799e6d4 100644 --- a/superset/views/database/mixins.py +++ b/superset/views/database/mixins.py @@ -16,8 +16,8 @@ # under the License. import inspect -from flask import Markup from flask_babel import lazy_gettext as _ +from markupsafe import Markup from sqlalchemy import MetaData from superset import app, security_manager