This is an automated email from the ASF dual-hosted git repository.

johnbodley pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git


The following commit(s) were added to refs/heads/master by this push:
     new b430b5a172 chore: Simplify views/base (#25948)
b430b5a172 is described below

commit b430b5a1720225c7507682382ed69d969aea31a8
Author: Sebastian Liebscher 
<[email protected]>
AuthorDate: Sun Nov 12 21:11:19 2023 +0100

    chore: Simplify views/base (#25948)
---
 superset/views/base.py | 56 ++++++++++++++++++++++----------------------------
 1 file changed, 24 insertions(+), 32 deletions(-)

diff --git a/superset/views/base.py b/superset/views/base.py
index 4015b7a028..62e4dd06cf 100644
--- a/superset/views/base.py
+++ b/superset/views/base.py
@@ -14,6 +14,8 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
+from __future__ import annotations
+
 import dataclasses
 import functools
 import logging
@@ -21,7 +23,7 @@ import os
 import traceback
 from datetime import datetime
 from importlib.resources import files
-from typing import Any, Callable, cast, Optional, Union
+from typing import Any, Callable, cast
 
 import simplejson as json
 import yaml
@@ -139,15 +141,11 @@ def get_error_msg() -> str:
 
 
 def json_error_response(
-    msg: Optional[str] = None,
+    msg: str | None = None,
     status: int = 500,
-    payload: Optional[dict[str, Any]] = None,
-    link: Optional[str] = None,
+    payload: dict[str, Any] | None = None,
 ) -> FlaskResponse:
-    if not payload:
-        payload = {"error": f"{msg}"}
-    if link:
-        payload["link"] = link
+    payload = payload or {"error": f"{msg}"}
 
     return Response(
         json.dumps(payload, default=utils.json_iso_dttm_ser, ignore_nan=True),
@@ -159,10 +157,9 @@ def json_error_response(
 def json_errors_response(
     errors: list[SupersetError],
     status: int = 500,
-    payload: Optional[dict[str, Any]] = None,
+    payload: dict[str, Any] | None = None,
 ) -> FlaskResponse:
-    if not payload:
-        payload = {}
+    payload = payload or {}
 
     payload["errors"] = [dataclasses.asdict(error) for error in errors]
     return Response(
@@ -182,7 +179,7 @@ def data_payload_response(payload_json: str, has_error: 
bool = False) -> FlaskRe
 
 
 def generate_download_headers(
-    extension: str, filename: Optional[str] = None
+    extension: str, filename: str | None = None
 ) -> dict[str, Any]:
     filename = filename if filename else 
datetime.now().strftime("%Y%m%d_%H%M%S")
     content_disp = f"attachment; filename={filename}.{extension}"
@@ -192,7 +189,7 @@ def generate_download_headers(
 
 def deprecated(
     eol_version: str = "4.0.0",
-    new_target: Optional[str] = None,
+    new_target: str | None = None,
 ) -> Callable[[Callable[..., FlaskResponse]], Callable[..., FlaskResponse]]:
     """
     A decorator to set an API endpoint from SupersetView has deprecated.
@@ -200,7 +197,7 @@ def deprecated(
     """
 
     def _deprecated(f: Callable[..., FlaskResponse]) -> Callable[..., 
FlaskResponse]:
-        def wraps(self: "BaseSupersetView", *args: Any, **kwargs: Any) -> 
FlaskResponse:
+        def wraps(self: BaseSupersetView, *args: Any, **kwargs: Any) -> 
FlaskResponse:
             message = (
                 "%s.%s "
                 "This API endpoint is deprecated and will be removed in 
version %s"
@@ -227,7 +224,7 @@ def api(f: Callable[..., FlaskResponse]) -> Callable[..., 
FlaskResponse]:
     return the response in the JSON format
     """
 
-    def wraps(self: "BaseSupersetView", *args: Any, **kwargs: Any) -> 
FlaskResponse:
+    def wraps(self: BaseSupersetView, *args: Any, **kwargs: Any) -> 
FlaskResponse:
         try:
             return f(self, *args, **kwargs)
         except NoAuthorizationError:
@@ -249,7 +246,7 @@ def handle_api_exception(
     exceptions.
     """
 
-    def wraps(self: "BaseSupersetView", *args: Any, **kwargs: Any) -> 
FlaskResponse:
+    def wraps(self: BaseSupersetView, *args: Any, **kwargs: Any) -> 
FlaskResponse:
         try:
             return f(self, *args, **kwargs)
         except SupersetSecurityException as ex:
@@ -294,7 +291,7 @@ class BaseSupersetView(BaseView):
         )
 
     def render_app_template(
-        self, extra_bootstrap_data: Optional[dict[str, Any]] = None
+        self, extra_bootstrap_data: dict[str, Any] | None = None
     ) -> FlaskResponse:
         payload = {
             "user": bootstrap_user_data(g.user, include_perms=True),
@@ -335,21 +332,16 @@ def get_environment_tag() -> dict[str, Any]:
 
 
 def menu_data(user: User) -> dict[str, Any]:
-    menu = appbuilder.menu.get_data()
+    languages = {
+        lang: {**appbuilder.languages[lang], "url": 
appbuilder.get_url_for_locale(lang)}
+        for lang in appbuilder.languages
+    }
 
-    languages = {}
-    for lang in appbuilder.languages:
-        languages[lang] = {
-            **appbuilder.languages[lang],
-            "url": appbuilder.get_url_for_locale(lang),
-        }
-    brand_text = appbuilder.app.config["LOGO_RIGHT_TEXT"]
-    if callable(brand_text):
+    if callable(brand_text := appbuilder.app.config["LOGO_RIGHT_TEXT"]):
         brand_text = brand_text()
-    build_number = appbuilder.app.config["BUILD_NUMBER"]
 
     return {
-        "menu": menu,
+        "menu": appbuilder.menu.get_data(),
         "brand": {
             "path": appbuilder.app.config["LOGO_TARGET_PATH"] or 
"/superset/welcome/",
             "icon": appbuilder.app_icon,
@@ -369,9 +361,9 @@ def menu_data(user: User) -> dict[str, Any]:
             "documentation_text": appbuilder.app.config["DOCUMENTATION_TEXT"],
             "version_string": appbuilder.app.config["VERSION_STRING"],
             "version_sha": appbuilder.app.config["VERSION_SHA"],
-            "build_number": build_number,
+            "build_number": appbuilder.app.config["BUILD_NUMBER"],
             "languages": languages,
-            "show_language_picker": len(languages.keys()) > 1,
+            "show_language_picker": len(languages) > 1,
             "user_is_anonymous": user.is_anonymous,
             "user_info_url": None
             if is_feature_enabled("MENU_HIDE_USER_INFO")
@@ -595,11 +587,11 @@ class YamlExportMixin:  # pylint: 
disable=too-few-public-methods
     Used on DatabaseView for cli compatibility
     """
 
-    yaml_dict_key: Optional[str] = None
+    yaml_dict_key: str | None = None
 
     @action("yaml_export", __("Export to YAML"), __("Export to YAML?"), 
"fa-download")
     def yaml_export(
-        self, items: Union[ImportExportMixin, list[ImportExportMixin]]
+        self, items: ImportExportMixin | list[ImportExportMixin]
     ) -> FlaskResponse:
         if not isinstance(items, list):
             items = [items]

Reply via email to