You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by hu...@apache.org on 2024/04/24 21:48:04 UTC
(superset) 01/01: ok first set of fixes
This is an automated email from the ASF dual-hosted git repository.
hugh pushed a commit to branch hxgh-ruff
in repository https://gitbox.apache.org/repos/asf/superset.git
commit 35e0bbc4a8e45436134a34d2f5fed2d88726a105
Author: Hugh Miles <hu...@Hughs-MacBook-Pro.local>
AuthorDate: Wed Apr 24 17:46:41 2024 -0400
ok first set of fixes
---
.pre-commit-config.yaml | 11 +++++++++++
RELEASING/changelog.py | 10 +++++-----
scripts/build_docker.py | 6 ++----
scripts/change_detector.py | 5 ++---
scripts/erd/erd.py | 3 +--
superset/__init__.py | 7 -------
superset/commands/chart/importers/v1/__init__.py | 1 -
superset/commands/dashboard/importers/v1/__init__.py | 1 -
superset/commands/database/create.py | 1 -
superset/commands/database/importers/v1/__init__.py | 1 -
superset/commands/database/update.py | 1 -
superset/commands/dataset/importers/v1/__init__.py | 1 -
superset/commands/importers/v1/__init__.py | 6 +-----
superset/commands/query/importers/v1/__init__.py | 2 --
superset/connectors/sqla/__init__.py | 1 -
superset/connectors/sqla/models.py | 8 ++++----
superset/daos/chart.py | 2 +-
superset/daos/dataset.py | 4 ++--
superset/db_engine_specs/duckdb.py | 2 +-
superset/db_engine_specs/hive.py | 6 ++----
superset/db_engine_specs/ocient.py | 4 ++--
superset/db_engine_specs/presto.py | 6 +++---
superset/examples/data_loading.py | 18 ------------------
superset/models/__init__.py | 1 -
superset/reports/notifications/__init__.py | 2 --
superset/row_level_security/api.py | 2 +-
superset/sql_validators/__init__.py | 1 -
superset/sqllab/execution_context_convertor.py | 2 --
superset/tasks/celery_app.py | 1 -
superset/utils/log.py | 2 +-
superset/views/__init__.py | 12 ------------
superset/viz.py | 1 -
32 files changed, 39 insertions(+), 92 deletions(-)
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index a476dc3ab1..73304d9923 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -95,3 +95,14 @@ repos:
hooks:
- id: helm-docs
files: helm
+ - repo: https://github.com/astral-sh/ruff-pre-commit
+ # Ruff version.
+ rev: v0.1.4
+ hooks:
+ # Run the linter.
+ - id: ruff
+ args: [ --fix ]
+ exclude: ^(superset/migrations/|tests/)|superset/config\.py$
+ # Run the formatter.
+ - id: ruff-format
+ exclude: ^(superset/migrations/|tests/)|superset/config\.py$
\ No newline at end of file
diff --git a/RELEASING/changelog.py b/RELEASING/changelog.py
index d1ba06a620..80ff98cba6 100644
--- a/RELEASING/changelog.py
+++ b/RELEASING/changelog.py
@@ -94,10 +94,10 @@ class GitChangeLog:
if not pull_request:
pull_request = github_repo.get_pull(pr_number)
self._github_prs[pr_number] = pull_request
- except BadCredentialsException as ex:
+ except BadCredentialsException:
print(
- f"Bad credentials to github provided"
- f" use access_token parameter or set GITHUB_TOKEN"
+ "Bad credentials to github provided"
+ " use access_token parameter or set GITHUB_TOKEN"
)
sys.exit(1)
@@ -167,8 +167,8 @@ class GitChangeLog:
def _get_changelog_version_head(self) -> str:
if not len(self._logs):
print(
- f"No changes found between revisions. "
- f"Make sure your branch is up to date."
+ "No changes found between revisions. "
+ "Make sure your branch is up to date."
)
sys.exit(1)
return f"### {self._version} ({self._logs[0].time})"
diff --git a/scripts/build_docker.py b/scripts/build_docker.py
index 3351e508df..812d087399 100755
--- a/scripts/build_docker.py
+++ b/scripts/build_docker.py
@@ -82,8 +82,8 @@ def is_latest_release(release: str) -> bool:
return "SKIP_TAG::false" in output
-def make_docker_tag(l: list[str]) -> str:
- return f"{REPO}:" + "-".join([o for o in l if o])
+def make_docker_tag(tags: list[str]) -> str:
+ return f"{REPO}:" + "-".join([o for o in tags if o])
def get_docker_tags(
@@ -140,7 +140,6 @@ def get_docker_command(
build_context_ref: str,
force_latest: bool = False,
) -> str:
- tag = ""
build_target = ""
py_ver = BASE_PY_IMAGE
docker_context = "."
@@ -284,7 +283,6 @@ def main(
script = script + docker_build_command
if verbose:
run_cmd("cat Dockerfile")
- stdout = run_cmd(script)
else:
print("Dry Run - Docker Build Command:")
print(docker_build_command)
diff --git a/scripts/change_detector.py b/scripts/change_detector.py
index df2c872a4a..4c953555fd 100755
--- a/scripts/change_detector.py
+++ b/scripts/change_detector.py
@@ -21,7 +21,6 @@ import os
import re
import subprocess
from typing import List
-from urllib.error import HTTPError, URLError
from urllib.request import Request, urlopen
# Define patterns for each group of files you're interested in
@@ -102,12 +101,12 @@ def main(event_type: str, sha: str, repo: str) -> None:
if event_type == "pull_request":
pr_number = os.getenv("GITHUB_REF", "").split("/")[-2]
files = fetch_changed_files_pr(repo, pr_number)
- print(f"PR files:")
+ print("PR files:")
print_files(files)
elif event_type == "push":
files = fetch_changed_files_push(repo, sha)
- print(f"Files touched since previous commit:")
+ print("Files touched since previous commit:")
print_files(files)
else:
raise ValueError("Unsupported event type")
diff --git a/scripts/erd/erd.py b/scripts/erd/erd.py
index 0622e0d853..b51cd21652 100644
--- a/scripts/erd/erd.py
+++ b/scripts/erd/erd.py
@@ -27,9 +27,8 @@ from typing import Any, Optional
import click
import jinja2
-from flask.cli import FlaskGroup, with_appcontext
-from superset import app, db
+from superset import db
GROUPINGS: dict[str, Iterable[str]] = {
"Core": [
diff --git a/superset/__init__.py b/superset/__init__.py
index d96697de99..a891207156 100644
--- a/superset/__init__.py
+++ b/superset/__init__.py
@@ -19,19 +19,12 @@
from flask import current_app, Flask
from werkzeug.local import LocalProxy
-from superset.app import create_app
from superset.extensions import (
- appbuilder,
cache_manager,
- db,
- event_logger,
feature_flag_manager,
manifest_processor,
results_backend_manager,
- security_manager,
- talisman,
)
-from superset.security import SupersetSecurityManager
# All of the fields located here should be considered legacy. The correct way
# to declare "global" dependencies is to define it in extensions.py,
diff --git a/superset/commands/chart/importers/v1/__init__.py b/superset/commands/chart/importers/v1/__init__.py
index 7f2537383f..c3f67d4146 100644
--- a/superset/commands/chart/importers/v1/__init__.py
+++ b/superset/commands/chart/importers/v1/__init__.py
@@ -18,7 +18,6 @@
from typing import Any
from marshmallow import Schema
-from sqlalchemy.orm import Session
from superset.charts.schemas import ImportV1ChartSchema
from superset.commands.chart.exceptions import ChartImportError
diff --git a/superset/commands/dashboard/importers/v1/__init__.py b/superset/commands/dashboard/importers/v1/__init__.py
index 77d28696cf..e5f948c911 100644
--- a/superset/commands/dashboard/importers/v1/__init__.py
+++ b/superset/commands/dashboard/importers/v1/__init__.py
@@ -18,7 +18,6 @@
from typing import Any
from marshmallow import Schema
-from sqlalchemy.orm import Session
from sqlalchemy.sql import select
from superset import db
diff --git a/superset/commands/database/create.py b/superset/commands/database/create.py
index 9efb39b75a..4903938eb9 100644
--- a/superset/commands/database/create.py
+++ b/superset/commands/database/create.py
@@ -19,7 +19,6 @@ from typing import Any, Optional
from flask import current_app
from flask_appbuilder.models.sqla import Model
-from flask_babel import gettext as _
from marshmallow import ValidationError
from superset import is_feature_enabled
diff --git a/superset/commands/database/importers/v1/__init__.py b/superset/commands/database/importers/v1/__init__.py
index 203f0e3089..89cfa3b66a 100644
--- a/superset/commands/database/importers/v1/__init__.py
+++ b/superset/commands/database/importers/v1/__init__.py
@@ -18,7 +18,6 @@
from typing import Any
from marshmallow import Schema
-from sqlalchemy.orm import Session
from superset.commands.database.exceptions import DatabaseImportError
from superset.commands.database.importers.v1.utils import import_database
diff --git a/superset/commands/database/update.py b/superset/commands/database/update.py
index 5575d674a8..b63e91c176 100644
--- a/superset/commands/database/update.py
+++ b/superset/commands/database/update.py
@@ -18,7 +18,6 @@ import logging
from typing import Any, Optional
from flask_appbuilder.models.sqla import Model
-from flask_babel import gettext as _
from marshmallow import ValidationError
from superset import is_feature_enabled
diff --git a/superset/commands/dataset/importers/v1/__init__.py b/superset/commands/dataset/importers/v1/__init__.py
index 29f850258c..8218bc8592 100644
--- a/superset/commands/dataset/importers/v1/__init__.py
+++ b/superset/commands/dataset/importers/v1/__init__.py
@@ -18,7 +18,6 @@
from typing import Any
from marshmallow import Schema
-from sqlalchemy.orm import Session
from superset.commands.database.importers.v1.utils import import_database
from superset.commands.dataset.exceptions import DatasetImportError
diff --git a/superset/commands/importers/v1/__init__.py b/superset/commands/importers/v1/__init__.py
index 8d90875fd3..1c69d0521c 100644
--- a/superset/commands/importers/v1/__init__.py
+++ b/superset/commands/importers/v1/__init__.py
@@ -16,9 +16,8 @@
# under the License.
from typing import Any, Optional
-from marshmallow import Schema, validate
+from marshmallow import Schema
from marshmallow.exceptions import ValidationError
-from sqlalchemy.orm import Session
from superset import db
from superset.commands.base import BaseCommand
@@ -26,12 +25,9 @@ from superset.commands.exceptions import CommandException, CommandInvalidError
from superset.commands.importers.v1.utils import (
load_configs,
load_metadata,
- load_yaml,
- METADATA_FILE_NAME,
validate_metadata_type,
)
from superset.daos.base import BaseDAO
-from superset.models.core import Database
class ImportModelsCommand(BaseCommand):
diff --git a/superset/commands/query/importers/v1/__init__.py b/superset/commands/query/importers/v1/__init__.py
index f251759c38..b50ef53db6 100644
--- a/superset/commands/query/importers/v1/__init__.py
+++ b/superset/commands/query/importers/v1/__init__.py
@@ -18,13 +18,11 @@
from typing import Any
from marshmallow import Schema
-from sqlalchemy.orm import Session
from superset.commands.database.importers.v1.utils import import_database
from superset.commands.importers.v1 import ImportModelsCommand
from superset.commands.query.exceptions import SavedQueryImportError
from superset.commands.query.importers.v1.utils import import_saved_query
-from superset.connectors.sqla.models import SqlaTable
from superset.daos.query import SavedQueryDAO
from superset.databases.schemas import ImportV1DatabaseSchema
from superset.queries.saved_queries.schemas import ImportV1SavedQuerySchema
diff --git a/superset/connectors/sqla/__init__.py b/superset/connectors/sqla/__init__.py
index ad52fc6d8b..13a83393a9 100644
--- a/superset/connectors/sqla/__init__.py
+++ b/superset/connectors/sqla/__init__.py
@@ -14,4 +14,3 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
-from . import models, views
diff --git a/superset/connectors/sqla/models.py b/superset/connectors/sqla/models.py
index 208487299a..d77aaabf81 100644
--- a/superset/connectors/sqla/models.py
+++ b/superset/connectors/sqla/models.py
@@ -1289,10 +1289,10 @@ class SqlaTable(
@property
def dttm_cols(self) -> list[str]:
- l = [c.column_name for c in self.columns if c.is_dttm]
- if self.main_dttm_col and self.main_dttm_col not in l:
- l.append(self.main_dttm_col)
- return l
+ columns_with_dttm = [c.column_name for c in self.columns if c.is_dttm]
+ if self.main_dttm_col and self.main_dttm_col not in columns_with_dttm:
+ columns_with_dttm.append(self.main_dttm_col)
+ return columns_with_dttm
@property
def num_cols(self) -> list[str]:
diff --git a/superset/daos/chart.py b/superset/daos/chart.py
index eb8b3e809e..844b36b6b3 100644
--- a/superset/daos/chart.py
+++ b/superset/daos/chart.py
@@ -28,7 +28,7 @@ from superset.models.slice import Slice
from superset.utils.core import get_user_id
if TYPE_CHECKING:
- from superset.connectors.sqla.models import BaseDatasource
+ pass
logger = logging.getLogger(__name__)
diff --git a/superset/daos/dataset.py b/superset/daos/dataset.py
index 4647e02ce6..23b46e3329 100644
--- a/superset/daos/dataset.py
+++ b/superset/daos/dataset.py
@@ -245,7 +245,7 @@ class DatasetDAO(BaseDAO[SqlaTable]):
[
{**properties, "table_id": model.id}
for properties in property_columns
- if not "id" in properties
+ if "id" not in properties
],
)
@@ -297,7 +297,7 @@ class DatasetDAO(BaseDAO[SqlaTable]):
[
{**properties, "table_id": model.id}
for properties in property_metrics
- if not "id" in properties
+ if "id" not in properties
],
)
diff --git a/superset/db_engine_specs/duckdb.py b/superset/db_engine_specs/duckdb.py
index 56539d6652..89c45fb572 100644
--- a/superset/db_engine_specs/duckdb.py
+++ b/superset/db_engine_specs/duckdb.py
@@ -23,7 +23,7 @@ from typing import Any, TYPE_CHECKING, TypedDict
from apispec import APISpec
from apispec.ext.marshmallow import MarshmallowPlugin
-from flask_babel import gettext as __, lazy_gettext as _
+from flask_babel import gettext as __
from marshmallow import fields, Schema
from sqlalchemy import types
from sqlalchemy.engine.reflection import Inspector
diff --git a/superset/db_engine_specs/hive.py b/superset/db_engine_specs/hive.py
index 2655ed6c9a..618059fe05 100644
--- a/superset/db_engine_specs/hive.py
+++ b/superset/db_engine_specs/hive.py
@@ -50,8 +50,6 @@ from superset.superset_typing import ResultSetColumnType
if TYPE_CHECKING:
# prevent circular imports
- from pyhive.hive import Cursor
- from TCLIService.ttypes import TFetchOrientation
from superset.models.core import Database
@@ -392,8 +390,8 @@ class HiveEngineSpec(PrestoEngineSpec):
# Wait for job id before logging things out
# this allows for prefixing all log lines and becoming
# searchable in something like Kibana
- for l in log_lines[last_log_line:]:
- logger.info("Query %s: [%s] %s", str(query_id), str(job_id), l)
+ for log in log_lines[last_log_line:]:
+ logger.info("Query %s: [%s] %s", str(query_id), str(job_id), log)
last_log_line = len(log_lines)
if needs_commit:
db.session.commit()
diff --git a/superset/db_engine_specs/ocient.py b/superset/db_engine_specs/ocient.py
index 77c906fe77..34ab672404 100644
--- a/superset/db_engine_specs/ocient.py
+++ b/superset/db_engine_specs/ocient.py
@@ -19,7 +19,7 @@ import contextlib
import re
import threading
from re import Pattern
-from typing import Any, Callable, List, NamedTuple, Optional
+from typing import Any, Callable, NamedTuple, Optional
from flask_babel import gettext as __
from sqlalchemy.engine.reflection import Inspector
@@ -204,7 +204,7 @@ try:
TypeCodes.ST_LINESTRING: _linestring_to_geo_json,
TypeCodes.ST_POLYGON: _polygon_to_geo_json,
}
-except ImportError as e:
+except ImportError:
_sanitized_ocient_type_codes = {}
diff --git a/superset/db_engine_specs/presto.py b/superset/db_engine_specs/presto.py
index a8143c87ed..2d902a6159 100644
--- a/superset/db_engine_specs/presto.py
+++ b/superset/db_engine_specs/presto.py
@@ -447,10 +447,10 @@ class PrestoBaseEngineSpec(BaseEngineSpec, metaclass=ABCMeta):
limit_clause = f"LIMIT {limit}" if limit else ""
order_by_clause = ""
if order_by:
- l = []
+ order_clauses = []
for field, desc in order_by:
- l.append(field + " DESC" if desc else "")
- order_by_clause = "ORDER BY " + ", ".join(l)
+ order_clauses.append(field + " DESC" if desc else "")
+ order_by_clause = "ORDER BY " + ", ".join(order_clauses)
where_clause = ""
if filters:
diff --git a/superset/examples/data_loading.py b/superset/examples/data_loading.py
index 7b79adfcf4..a835ec14e8 100644
--- a/superset/examples/data_loading.py
+++ b/superset/examples/data_loading.py
@@ -15,21 +15,3 @@
# specific language governing permissions and limitations
# under the License.
# pylint: disable=unused-import
-from .bart_lines import load_bart_lines
-from .big_data import load_big_data
-from .birth_names import load_birth_names
-from .country_map import load_country_map_data
-from .css_templates import load_css_templates
-from .deck import load_deck_dash
-from .energy import load_energy
-from .flights import load_flights
-from .long_lat import load_long_lat_data
-from .misc_dashboard import load_misc_dashboard
-from .multiformat_time_series import load_multiformat_time_series
-from .paris import load_paris_iris_geojson
-from .random_time_series import load_random_time_series_data
-from .sf_population_polygons import load_sf_population_polygons
-from .supported_charts_dashboard import load_supported_charts_dashboard
-from .tabbed_dashboard import load_tabbed_dashboard
-from .utils import load_examples_from_configs
-from .world_bank import load_world_bank_health_n_pop
diff --git a/superset/models/__init__.py b/superset/models/__init__.py
index 067d6ae831..13a83393a9 100644
--- a/superset/models/__init__.py
+++ b/superset/models/__init__.py
@@ -14,4 +14,3 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
-from . import core, dynamic_plugins, sql_lab, user_attributes
diff --git a/superset/reports/notifications/__init__.py b/superset/reports/notifications/__init__.py
index b9fff48cf7..d804070a27 100644
--- a/superset/reports/notifications/__init__.py
+++ b/superset/reports/notifications/__init__.py
@@ -16,8 +16,6 @@
# under the License.
from superset.reports.models import ReportRecipients
from superset.reports.notifications.base import BaseNotification, NotificationContent
-from superset.reports.notifications.email import EmailNotification
-from superset.reports.notifications.slack import SlackNotification
def create_notification(
diff --git a/superset/row_level_security/api.py b/superset/row_level_security/api.py
index fc505e724f..86956683cb 100644
--- a/superset/row_level_security/api.py
+++ b/superset/row_level_security/api.py
@@ -299,7 +299,7 @@ class RLSRestApi(BaseSupersetModelRestApi):
exc_info=True,
)
return self.response_422(message=str(ex))
- except RLSRuleNotFoundError as ex:
+ except RLSRuleNotFoundError:
return self.response_404()
@expose("/", methods=("DELETE",))
diff --git a/superset/sql_validators/__init__.py b/superset/sql_validators/__init__.py
index ad048a86a5..8a8cf45aae 100644
--- a/superset/sql_validators/__init__.py
+++ b/superset/sql_validators/__init__.py
@@ -17,7 +17,6 @@
from typing import Optional
from . import base, postgres, presto_db
-from .base import SQLValidationAnnotation
def get_validator_by_name(name: str) -> Optional[type[base.BaseSQLValidator]]:
diff --git a/superset/sqllab/execution_context_convertor.py b/superset/sqllab/execution_context_convertor.py
index a1e7a86d0a..587e027555 100644
--- a/superset/sqllab/execution_context_convertor.py
+++ b/superset/sqllab/execution_context_convertor.py
@@ -28,8 +28,6 @@ from superset.sqllab.utils import apply_display_max_row_configuration_if_require
logger = logging.getLogger(__name__)
if TYPE_CHECKING:
- from superset.models.sql_lab import Query
- from superset.sqllab.sql_json_executer import SqlResults
from superset.sqllab.sqllab_execution_context import SqlJsonExecutionContext
diff --git a/superset/tasks/celery_app.py b/superset/tasks/celery_app.py
index e9ab10c050..85b966530c 100644
--- a/superset/tasks/celery_app.py
+++ b/superset/tasks/celery_app.py
@@ -32,7 +32,6 @@ flask_app = create_app()
# Need to import late, as the celery_app will have been setup by "create_app()"
# pylint: disable=wrong-import-position, unused-import
-from . import cache, scheduler # isort:skip
# Export the celery app globally for Celery (as run on the cmd line) to find
app = celery_app
diff --git a/superset/utils/log.py b/superset/utils/log.py
index cb5343470d..65355c175b 100644
--- a/superset/utils/log.py
+++ b/superset/utils/log.py
@@ -35,7 +35,7 @@ from superset.extensions import stats_logger_manager
from superset.utils.core import get_user_id, LoggerLevel, to_int
if TYPE_CHECKING:
- from superset.stats_logger import BaseStatsLogger
+ pass
logger = logging.getLogger(__name__)
diff --git a/superset/views/__init__.py b/superset/views/__init__.py
index 838e92aca2..13a83393a9 100644
--- a/superset/views/__init__.py
+++ b/superset/views/__init__.py
@@ -14,15 +14,3 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
-from . import (
- alerts,
- api,
- base,
- core,
- css_templates,
- dynamic_plugins,
- health,
- sql_lab,
- tags,
-)
-from .log import api as log_api, views
diff --git a/superset/viz.py b/superset/viz.py
index 447b36d53d..78e71a839d 100644
--- a/superset/viz.py
+++ b/superset/viz.py
@@ -83,7 +83,6 @@ from superset.utils.date_parser import get_since_until, parse_past_timedelta
from superset.utils.hashing import md5_sha_from_str
if TYPE_CHECKING:
- from superset.common.query_context_factory import QueryContextFactory
from superset.connectors.sqla.models import BaseDatasource
config = app.config