You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by mi...@apache.org on 2023/10/02 14:47:52 UTC

[superset] branch 3.0 updated (58778a78b2 -> f577005ff9)

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

michaelsmolina pushed a change to branch 3.0
in repository https://gitbox.apache.org/repos/asf/superset.git


    from 58778a78b2 fix: Duplicate items when pasting into Select (#25447)
     new d8e87aa3cc fix: update the SQLAlchemy model definition at json column for Log table (#25445)
     new f682dbae52 fix(helm chart): set chart appVersion to 3.0.0 (#25373)
     new 615d7f5ccc fix(mysql): handle string typed decimal results (#24241)
     new 0dd1a3bea5 fix: Styles not loading because of faulty CSP setting (#25468)
     new f577005ff9 fix(sqllab): error with lazy_gettext for tab titles (#25469)

The 5 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 helm/superset/Chart.yaml                       |   4 +-
 helm/superset/README.md                        | 476 ++++++++++++-------------
 superset/config.py                             |  16 +-
 superset/db_engine_specs/base.py               |  29 +-
 superset/db_engine_specs/mysql.py              |   6 +-
 superset/models/core.py                        |   2 +-
 superset/views/sql_lab/views.py                |   3 +-
 tests/unit_tests/db_engine_specs/test_mysql.py |  40 +++
 8 files changed, 328 insertions(+), 248 deletions(-)


[superset] 04/05: fix: Styles not loading because of faulty CSP setting (#25468)

Posted by mi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 0dd1a3bea5baf403d9081f0f2cf83b61ce0245ba
Author: Kamil Gabryjelski <ka...@gmail.com>
AuthorDate: Fri Sep 29 20:54:32 2023 +0200

    fix: Styles not loading because of faulty CSP setting (#25468)
    
    (cherry picked from commit 0cebffd59a45bb7256e1817d9792dbe2793fba72)
---
 superset/config.py | 16 ++++++++++++----
 1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/superset/config.py b/superset/config.py
index 6ec132d43e..bda7d0e5f0 100644
--- a/superset/config.py
+++ b/superset/config.py
@@ -1415,10 +1415,14 @@ TALISMAN_CONFIG = {
             "https://events.mapbox.com",
         ],
         "object-src": "'none'",
-        "style-src": ["'self'", "'unsafe-inline'"],
+        "style-src": [
+            "'self'",
+            "'unsafe-inline'",
+            "https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css",
+        ],
         "script-src": ["'self'", "'strict-dynamic'"],
     },
-    "content_security_policy_nonce_in": ["script-src", "style-src"],
+    "content_security_policy_nonce_in": ["script-src"],
     "force_https": False,
 }
 # React requires `eval` to work correctly in dev mode
@@ -1433,10 +1437,14 @@ TALISMAN_DEV_CONFIG = {
             "https://events.mapbox.com",
         ],
         "object-src": "'none'",
-        "style-src": ["'self'", "'unsafe-inline'"],
+        "style-src": [
+            "'self'",
+            "'unsafe-inline'",
+            "https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css",
+        ],
         "script-src": ["'self'", "'unsafe-inline'", "'unsafe-eval'"],
     },
-    "content_security_policy_nonce_in": ["script-src", "style-src"],
+    "content_security_policy_nonce_in": ["script-src"],
     "force_https": False,
 }
 


[superset] 05/05: fix(sqllab): error with lazy_gettext for tab titles (#25469)

Posted by mi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit f577005ff95f7ad5331df67f2c873df25ab5b6c2
Author: ʈᵃᵢ <td...@gmail.com>
AuthorDate: Fri Sep 29 19:31:20 2023 -0700

    fix(sqllab): error with lazy_gettext for tab titles (#25469)
    
    (cherry picked from commit ddde178e3bf2d73811e3e39dbb79a9a86f1e0970)
---
 superset/views/sql_lab/views.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/superset/views/sql_lab/views.py b/superset/views/sql_lab/views.py
index 0002c3f31c..7676d59ef7 100644
--- a/superset/views/sql_lab/views.py
+++ b/superset/views/sql_lab/views.py
@@ -22,6 +22,7 @@ from flask_appbuilder import expose
 from flask_appbuilder.models.sqla.interface import SQLAInterface
 from flask_appbuilder.security.decorators import has_access, has_access_api
 from flask_babel import lazy_gettext as _
+from flask_babel import gettext as __
 from sqlalchemy import and_
 
 from superset import db
@@ -145,7 +146,7 @@ class TabStateView(BaseSupersetView):
             user_id=get_user_id(),
             # This is for backward compatibility
             label=query_editor.get("name")
-            or query_editor.get("title", _("Untitled Query")),
+            or query_editor.get("title", __("Untitled Query")),
             active=True,
             database_id=query_editor["dbId"],
             schema=query_editor.get("schema"),


[superset] 01/05: fix: update the SQLAlchemy model definition at json column for Log table (#25445)

Posted by mi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit d8e87aa3ccbbbcb496aabd74a1310248667b20a6
Author: Gyuil Han <cn...@gmail.com>
AuthorDate: Fri Sep 29 21:02:44 2023 +0900

    fix: update the SQLAlchemy model definition at json column for Log table (#25445)
    
    (cherry picked from commit e83a76a58642018aa93ae5bef509a42cabdec980)
---
 superset/models/core.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/superset/models/core.py b/superset/models/core.py
index e3f91e1379..0581756b81 100755
--- a/superset/models/core.py
+++ b/superset/models/core.py
@@ -995,7 +995,7 @@ class Log(Model):  # pylint: disable=too-few-public-methods
     user_id = Column(Integer, ForeignKey("ab_user.id"))
     dashboard_id = Column(Integer)
     slice_id = Column(Integer)
-    json = Column(Text)
+    json = Column(utils.MediumText())
     user = relationship(
         security_manager.user_model, backref="logs", foreign_keys=[user_id]
     )


[superset] 02/05: fix(helm chart): set chart appVersion to 3.0.0 (#25373)

Posted by mi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit f682dbae522502795f1801b1129fb33711ac5c0b
Author: Celalettin Calis <ce...@gmail.com>
AuthorDate: Fri Sep 29 15:19:03 2023 +0300

    fix(helm chart): set chart appVersion to 3.0.0 (#25373)
---
 helm/superset/Chart.yaml |   4 +-
 helm/superset/README.md  | 476 +++++++++++++++++++++++------------------------
 2 files changed, 240 insertions(+), 240 deletions(-)

diff --git a/helm/superset/Chart.yaml b/helm/superset/Chart.yaml
index 8af3ae4acf..2aa2bc49a3 100644
--- a/helm/superset/Chart.yaml
+++ b/helm/superset/Chart.yaml
@@ -15,7 +15,7 @@
 # limitations under the License.
 #
 apiVersion: v2
-appVersion: "2.1.0"
+appVersion: "3.0.0"
 description: Apache Superset is a modern, enterprise-ready business intelligence web application
 name: superset
 icon: https://artifacthub.io/image/68c1d717-0e97-491f-b046-754e46f46922@2x
@@ -29,7 +29,7 @@ maintainers:
   - name: craig-rueda
     email: craig@craigrueda.com
     url: https://github.com/craig-rueda
-version: 0.10.6
+version: 0.10.9
 dependencies:
   - name: postgresql
     version: 12.1.6
diff --git a/helm/superset/README.md b/helm/superset/README.md
index c3a46fbec4..025aadeb1c 100644
--- a/helm/superset/README.md
+++ b/helm/superset/README.md
@@ -23,7 +23,7 @@ NOTE: This file is generated by helm-docs: https://github.com/norwoodj/helm-docs
 
 # superset
 
-![Version: 0.10.6](https://img.shields.io/badge/Version-0.10.6-informational?style=flat-square)
+![Version: 0.10.9](https://img.shields.io/badge/Version-0.10.9-informational?style=flat-square)
 
 Apache Superset is a modern, enterprise-ready business intelligence web application
 
@@ -31,7 +31,7 @@ Apache Superset is a modern, enterprise-ready business intelligence web applicat
 
 ## Source Code
 
-* <https://github.com/apache/superset>
+- <https://github.com/apache/superset>
 
 ## TL;DR
 
@@ -42,242 +42,242 @@ helm install my-superset superset/superset
 
 ## Requirements
 
-| Repository | Name | Version |
-|------------|------|---------|
-| https://charts.bitnami.com/bitnami | postgresql | 12.1.6 |
-| https://charts.bitnami.com/bitnami | redis | 17.9.4 |
+| Repository                         | Name       | Version |
+| ---------------------------------- | ---------- | ------- |
+| https://charts.bitnami.com/bitnami | postgresql | 12.1.6  |
+| https://charts.bitnami.com/bitnami | redis      | 17.9.4  |
 
 ## Values
 
-| Key | Type | Default | Description |
-|-----|------|---------|-------------|
-| affinity | object | `{}` |  |
-| bootstrapScript | string | see `values.yaml` | Install additional packages and do any other bootstrap configuration in this script For production clusters it's recommended to build own image with this step done in CI |
-| configFromSecret | string | `"{{ template \"superset.fullname\" . }}-config"` | The name of the secret which we will use to generate a superset_config.py file Note: this secret must have the key superset_config.py in it and can include other files as well |
-| configMountPath | string | `"/app/pythonpath"` |  |
-| configOverrides | object | `{}` | A dictionary of overrides to append at the end of superset_config.py - the name does not matter WARNING: the order is not guaranteed Files can be passed as helm --set-file configOverrides.my-override=my-file.py |
-| configOverridesFiles | object | `{}` | Same as above but the values are files |
-| envFromSecret | string | `"{{ template \"superset.fullname\" . }}-env"` | The name of the secret which we will use to populate env vars in deployed pods This can be useful for secret keys, etc. |
-| envFromSecrets | list | `[]` | This can be a list of templated strings |
-| extraConfigMountPath | string | `"/app/configs"` |  |
-| extraConfigs | object | `{}` | Extra files to mount on `/app/pythonpath` |
-| extraEnv | object | `{}` | Extra environment variables that will be passed into pods |
-| extraEnvRaw | list | `[]` | Extra environment variables in RAW format that will be passed into pods |
-| extraSecretEnv | object | `{}` | Extra environment variables to pass as secrets |
-| extraSecrets | object | `{}` | Extra files to mount on `/app/pythonpath` as secrets |
-| extraVolumeMounts | list | `[]` |  |
-| extraVolumes | list | `[]` |  |
-| fullnameOverride | string | `nil` | Provide a name to override the full names of resources |
-| hostAliases | list | `[]` | Custom hostAliases for all superset pods # https://kubernetes.io/docs/tasks/network/customize-hosts-file-for-pods/ |
-| image.pullPolicy | string | `"IfNotPresent"` |  |
-| image.repository | string | `"apachesuperset.docker.scarf.sh/apache/superset"` |  |
-| image.tag | string | `""` |  |
-| imagePullSecrets | list | `[]` |  |
-| ingress.annotations | object | `{}` |  |
-| ingress.enabled | bool | `false` |  |
-| ingress.extraHostsRaw | list | `[]` |  |
-| ingress.hosts[0] | string | `"chart-example.local"` |  |
-| ingress.ingressClassName | string | `nil` |  |
-| ingress.path | string | `"/"` |  |
-| ingress.pathType | string | `"ImplementationSpecific"` |  |
-| ingress.tls | list | `[]` |  |
-| init.adminUser.email | string | `"admin@superset.com"` |  |
-| init.adminUser.firstname | string | `"Superset"` |  |
-| init.adminUser.lastname | string | `"Admin"` |  |
-| init.adminUser.password | string | `"admin"` |  |
-| init.adminUser.username | string | `"admin"` |  |
-| init.affinity | object | `{}` |  |
-| init.command | list | a `superset_init.sh` command | Command |
-| init.containerSecurityContext | object | `{}` |  |
-| init.createAdmin | bool | `true` |  |
-| init.enabled | bool | `true` |  |
-| init.initContainers | list | a container waiting for postgres | List of initContainers |
-| init.initscript | string | a script to create admin user and initailize roles | A Superset init script |
-| init.jobAnnotations."helm.sh/hook" | string | `"post-install,post-upgrade"` |  |
-| init.jobAnnotations."helm.sh/hook-delete-policy" | string | `"before-hook-creation"` |  |
-| init.loadExamples | bool | `false` |  |
-| init.podAnnotations | object | `{}` |  |
-| init.podSecurityContext | object | `{}` |  |
-| init.resources | object | `{}` |  |
-| init.tolerations | list | `[]` |  |
-| init.topologySpreadConstraints | list | `[]` | TopologySpreadConstrains to be added to init job |
-| initImage.pullPolicy | string | `"IfNotPresent"` |  |
-| initImage.repository | string | `"apache/superset"` |  |
-| initImage.tag | string | `"dockerize"` |  |
-| nameOverride | string | `nil` | Provide a name to override the name of the chart |
-| nodeSelector | object | `{}` |  |
-| postgresql | object | see `values.yaml` | Configuration values for the postgresql dependency. ref: https://github.com/kubernetes/charts/blob/master/stable/postgresql/README.md |
-| redis | object | see `values.yaml` | Configuration values for the Redis dependency. ref: https://github.com/bitnami/charts/blob/master/bitnami/redis More documentation can be found here: https://artifacthub.io/packages/helm/bitnami/redis |
-| resources | object | `{}` |  |
-| runAsUser | int | `0` | User ID directive. This user must have enough permissions to run the bootstrap script Running containers as root is not recommended in production. Change this to another UID - e.g. 1000 to be more secure |
-| service.annotations | object | `{}` |  |
-| service.loadBalancerIP | string | `nil` |  |
-| service.nodePort.http | int | `"nil"` |  |
-| service.port | int | `8088` |  |
-| service.type | string | `"ClusterIP"` |  |
-| serviceAccount.annotations | object | `{}` |  |
-| serviceAccount.create | bool | `false` | Create custom service account for Superset. If create: true and serviceAccountName is not provided, `superset.fullname` will be used. |
-| serviceAccountName | string | `nil` | Specify service account name to be used |
-| supersetCeleryBeat.affinity | object | `{}` | Affinity to be added to supersetCeleryBeat deployment |
-| supersetCeleryBeat.command | list | a `celery beat` command | Command |
-| supersetCeleryBeat.containerSecurityContext | object | `{}` |  |
-| supersetCeleryBeat.deploymentAnnotations | object | `{}` | Annotations to be added to supersetCeleryBeat deployment |
-| supersetCeleryBeat.enabled | bool | `false` | This is only required if you intend to use alerts and reports |
-| supersetCeleryBeat.forceReload | bool | `false` | If true, forces deployment to reload on each upgrade |
-| supersetCeleryBeat.initContainers | list | a container waiting for postgres | List of init containers |
-| supersetCeleryBeat.podAnnotations | object | `{}` | Annotations to be added to supersetCeleryBeat pods |
-| supersetCeleryBeat.podLabels | object | `{}` | Labels to be added to supersetCeleryBeat pods |
-| supersetCeleryBeat.podSecurityContext | object | `{}` |  |
-| supersetCeleryBeat.resources | object | `{}` | Resource settings for the CeleryBeat pods - these settings overwrite might existing values from the global resources object defined above. |
-| supersetCeleryBeat.topologySpreadConstraints | list | `[]` | TopologySpreadConstrains to be added to supersetCeleryBeat deployments |
-| supersetCeleryFlower.affinity | object | `{}` | Affinity to be added to supersetCeleryFlower deployment |
-| supersetCeleryFlower.command | list | a `celery flower` command | Command |
-| supersetCeleryFlower.containerSecurityContext | object | `{}` |  |
-| supersetCeleryFlower.deploymentAnnotations | object | `{}` | Annotations to be added to supersetCeleryFlower deployment |
-| supersetCeleryFlower.enabled | bool | `false` | Enables a Celery flower deployment (management UI to monitor celery jobs) WARNING: on superset 1.x, this requires a Superset image that has `flower<1.0.0` installed (which is NOT the case of the default images) flower>=1.0.0 requires Celery 5+ which Superset 1.5 does not support |
-| supersetCeleryFlower.initContainers | list | a container waiting for postgres and redis | List of init containers |
-| supersetCeleryFlower.livenessProbe.failureThreshold | int | `3` |  |
-| supersetCeleryFlower.livenessProbe.httpGet.path | string | `"/api/workers"` |  |
-| supersetCeleryFlower.livenessProbe.httpGet.port | string | `"flower"` |  |
-| supersetCeleryFlower.livenessProbe.initialDelaySeconds | int | `5` |  |
-| supersetCeleryFlower.livenessProbe.periodSeconds | int | `5` |  |
-| supersetCeleryFlower.livenessProbe.successThreshold | int | `1` |  |
-| supersetCeleryFlower.livenessProbe.timeoutSeconds | int | `1` |  |
-| supersetCeleryFlower.podAnnotations | object | `{}` | Annotations to be added to supersetCeleryFlower pods |
-| supersetCeleryFlower.podLabels | object | `{}` | Labels to be added to supersetCeleryFlower pods |
-| supersetCeleryFlower.podSecurityContext | object | `{}` |  |
-| supersetCeleryFlower.readinessProbe.failureThreshold | int | `3` |  |
-| supersetCeleryFlower.readinessProbe.httpGet.path | string | `"/api/workers"` |  |
-| supersetCeleryFlower.readinessProbe.httpGet.port | string | `"flower"` |  |
-| supersetCeleryFlower.readinessProbe.initialDelaySeconds | int | `5` |  |
-| supersetCeleryFlower.readinessProbe.periodSeconds | int | `5` |  |
-| supersetCeleryFlower.readinessProbe.successThreshold | int | `1` |  |
-| supersetCeleryFlower.readinessProbe.timeoutSeconds | int | `1` |  |
-| supersetCeleryFlower.replicaCount | int | `1` |  |
-| supersetCeleryFlower.resources | object | `{}` | Resource settings for the CeleryBeat pods - these settings overwrite might existing values from the global resources object defined above. |
-| supersetCeleryFlower.service.annotations | object | `{}` |  |
-| supersetCeleryFlower.service.loadBalancerIP | string | `nil` |  |
-| supersetCeleryFlower.service.nodePort.http | int | `"nil"` |  |
-| supersetCeleryFlower.service.port | int | `5555` |  |
-| supersetCeleryFlower.service.type | string | `"ClusterIP"` |  |
-| supersetCeleryFlower.startupProbe.failureThreshold | int | `60` |  |
-| supersetCeleryFlower.startupProbe.httpGet.path | string | `"/api/workers"` |  |
-| supersetCeleryFlower.startupProbe.httpGet.port | string | `"flower"` |  |
-| supersetCeleryFlower.startupProbe.initialDelaySeconds | int | `5` |  |
-| supersetCeleryFlower.startupProbe.periodSeconds | int | `5` |  |
-| supersetCeleryFlower.startupProbe.successThreshold | int | `1` |  |
-| supersetCeleryFlower.startupProbe.timeoutSeconds | int | `1` |  |
-| supersetCeleryFlower.topologySpreadConstraints | list | `[]` | TopologySpreadConstrains to be added to supersetCeleryFlower deployments |
-| supersetNode.affinity | object | `{}` | Affinity to be added to supersetNode deployment |
-| supersetNode.command | list | See `values.yaml` | Startup command |
-| supersetNode.connections.db_host | string | `"{{ .Release.Name }}-postgresql"` |  |
-| supersetNode.connections.db_name | string | `"superset"` |  |
-| supersetNode.connections.db_pass | string | `"superset"` |  |
-| supersetNode.connections.db_port | string | `"5432"` |  |
-| supersetNode.connections.db_user | string | `"superset"` |  |
-| supersetNode.connections.redis_host | string | `"{{ .Release.Name }}-redis-headless"` | Change in case of bringing your own redis and then also set redis.enabled:false |
-| supersetNode.connections.redis_port | string | `"6379"` |  |
-| supersetNode.containerSecurityContext | object | `{}` |  |
-| supersetNode.deploymentAnnotations | object | `{}` | Annotations to be added to supersetNode deployment |
-| supersetNode.deploymentLabels | object | `{}` | Labels to be added to supersetNode deployment |
-| supersetNode.env | object | `{}` |  |
-| supersetNode.extraContainers | list | `[]` | Launch additional containers into supersetNode pod |
-| supersetNode.forceReload | bool | `false` | If true, forces deployment to reload on each upgrade |
-| supersetNode.initContainers | list | a container waiting for postgres | Init containers |
-| supersetNode.livenessProbe.failureThreshold | int | `3` |  |
-| supersetNode.livenessProbe.httpGet.path | string | `"/health"` |  |
-| supersetNode.livenessProbe.httpGet.port | string | `"http"` |  |
-| supersetNode.livenessProbe.initialDelaySeconds | int | `15` |  |
-| supersetNode.livenessProbe.periodSeconds | int | `15` |  |
-| supersetNode.livenessProbe.successThreshold | int | `1` |  |
-| supersetNode.livenessProbe.timeoutSeconds | int | `1` |  |
-| supersetNode.podAnnotations | object | `{}` | Annotations to be added to supersetNode pods |
-| supersetNode.podLabels | object | `{}` | Labels to be added to supersetNode pods |
-| supersetNode.podSecurityContext | object | `{}` |  |
-| supersetNode.readinessProbe.failureThreshold | int | `3` |  |
-| supersetNode.readinessProbe.httpGet.path | string | `"/health"` |  |
-| supersetNode.readinessProbe.httpGet.port | string | `"http"` |  |
-| supersetNode.readinessProbe.initialDelaySeconds | int | `15` |  |
-| supersetNode.readinessProbe.periodSeconds | int | `15` |  |
-| supersetNode.readinessProbe.successThreshold | int | `1` |  |
-| supersetNode.readinessProbe.timeoutSeconds | int | `1` |  |
-| supersetNode.replicaCount | int | `1` |  |
-| supersetNode.resources | object | `{}` | Resource settings for the supersetNode pods - these settings overwrite might existing values from the global resources object defined above. |
-| supersetNode.startupProbe.failureThreshold | int | `60` |  |
-| supersetNode.startupProbe.httpGet.path | string | `"/health"` |  |
-| supersetNode.startupProbe.httpGet.port | string | `"http"` |  |
-| supersetNode.startupProbe.initialDelaySeconds | int | `15` |  |
-| supersetNode.startupProbe.periodSeconds | int | `5` |  |
-| supersetNode.startupProbe.successThreshold | int | `1` |  |
-| supersetNode.startupProbe.timeoutSeconds | int | `1` |  |
-| supersetNode.strategy | object | `{}` |  |
-| supersetNode.topologySpreadConstraints | list | `[]` | TopologySpreadConstrains to be added to supersetNode deployments |
-| supersetWebsockets.affinity | object | `{}` | Affinity to be added to supersetWebsockets deployment |
-| supersetWebsockets.command | list | `[]` |  |
-| supersetWebsockets.config | object | see `values.yaml` | The config.json to pass to the server, see https://github.com/apache/superset/tree/master/superset-websocket Note that the configuration can also read from environment variables (which will have priority), see https://github.com/apache/superset/blob/master/superset-websocket/src/config.ts for a list of supported variables |
-| supersetWebsockets.containerSecurityContext | object | `{}` |  |
-| supersetWebsockets.deploymentAnnotations | object | `{}` |  |
-| supersetWebsockets.enabled | bool | `false` | This is only required if you intend to use `GLOBAL_ASYNC_QUERIES` in `ws` mode see https://github.com/apache/superset/blob/master/CONTRIBUTING.md#async-chart-queries |
-| supersetWebsockets.image.pullPolicy | string | `"IfNotPresent"` |  |
-| supersetWebsockets.image.repository | string | `"oneacrefund/superset-websocket"` | There is no official image (yet), this one is community-supported |
-| supersetWebsockets.image.tag | string | `"latest"` |  |
-| supersetWebsockets.ingress.path | string | `"/ws"` |  |
-| supersetWebsockets.ingress.pathType | string | `"Prefix"` |  |
-| supersetWebsockets.livenessProbe.failureThreshold | int | `3` |  |
-| supersetWebsockets.livenessProbe.httpGet.path | string | `"/health"` |  |
-| supersetWebsockets.livenessProbe.httpGet.port | string | `"ws"` |  |
-| supersetWebsockets.livenessProbe.initialDelaySeconds | int | `5` |  |
-| supersetWebsockets.livenessProbe.periodSeconds | int | `5` |  |
-| supersetWebsockets.livenessProbe.successThreshold | int | `1` |  |
-| supersetWebsockets.livenessProbe.timeoutSeconds | int | `1` |  |
-| supersetWebsockets.podAnnotations | object | `{}` |  |
-| supersetWebsockets.podLabels | object | `{}` |  |
-| supersetWebsockets.podSecurityContext | object | `{}` |  |
-| supersetWebsockets.readinessProbe.failureThreshold | int | `3` |  |
-| supersetWebsockets.readinessProbe.httpGet.path | string | `"/health"` |  |
-| supersetWebsockets.readinessProbe.httpGet.port | string | `"ws"` |  |
-| supersetWebsockets.readinessProbe.initialDelaySeconds | int | `5` |  |
-| supersetWebsockets.readinessProbe.periodSeconds | int | `5` |  |
-| supersetWebsockets.readinessProbe.successThreshold | int | `1` |  |
-| supersetWebsockets.readinessProbe.timeoutSeconds | int | `1` |  |
-| supersetWebsockets.replicaCount | int | `1` |  |
-| supersetWebsockets.resources | object | `{}` |  |
-| supersetWebsockets.service.annotations | object | `{}` |  |
-| supersetWebsockets.service.loadBalancerIP | string | `nil` |  |
-| supersetWebsockets.service.nodePort.http | int | `"nil"` |  |
-| supersetWebsockets.service.port | int | `8080` |  |
-| supersetWebsockets.service.type | string | `"ClusterIP"` |  |
-| supersetWebsockets.startupProbe.failureThreshold | int | `60` |  |
-| supersetWebsockets.startupProbe.httpGet.path | string | `"/health"` |  |
-| supersetWebsockets.startupProbe.httpGet.port | string | `"ws"` |  |
-| supersetWebsockets.startupProbe.initialDelaySeconds | int | `5` |  |
-| supersetWebsockets.startupProbe.periodSeconds | int | `5` |  |
-| supersetWebsockets.startupProbe.successThreshold | int | `1` |  |
-| supersetWebsockets.startupProbe.timeoutSeconds | int | `1` |  |
-| supersetWebsockets.strategy | object | `{}` |  |
-| supersetWebsockets.topologySpreadConstraints | list | `[]` | TopologySpreadConstrains to be added to supersetWebsockets deployments |
-| supersetWorker.affinity | object | `{}` | Affinity to be added to supersetWorker deployment |
-| supersetWorker.command | list | a `celery worker` command | Worker startup command |
-| supersetWorker.containerSecurityContext | object | `{}` |  |
-| supersetWorker.deploymentAnnotations | object | `{}` | Annotations to be added to supersetWorker deployment |
-| supersetWorker.deploymentLabels | object | `{}` | Labels to be added to supersetWorker deployment |
-| supersetWorker.extraContainers | list | `[]` | Launch additional containers into supersetWorker pod |
-| supersetWorker.forceReload | bool | `false` | If true, forces deployment to reload on each upgrade |
-| supersetWorker.initContainers | list | a container waiting for postgres and redis | Init container |
-| supersetWorker.livenessProbe.exec.command | list | a `celery inspect ping` command | Liveness probe command |
-| supersetWorker.livenessProbe.failureThreshold | int | `3` |  |
-| supersetWorker.livenessProbe.initialDelaySeconds | int | `120` |  |
-| supersetWorker.livenessProbe.periodSeconds | int | `60` |  |
-| supersetWorker.livenessProbe.successThreshold | int | `1` |  |
-| supersetWorker.livenessProbe.timeoutSeconds | int | `60` |  |
-| supersetWorker.podAnnotations | object | `{}` | Annotations to be added to supersetWorker pods |
-| supersetWorker.podLabels | object | `{}` | Labels to be added to supersetWorker pods |
-| supersetWorker.podSecurityContext | object | `{}` |  |
-| supersetWorker.readinessProbe | object | `{}` | No startup/readiness probes by default since we don't really care about its startup time (it doesn't serve traffic) |
-| supersetWorker.replicaCount | int | `1` |  |
-| supersetWorker.resources | object | `{}` | Resource settings for the supersetWorker pods - these settings overwrite might existing values from the global resources object defined above. |
-| supersetWorker.startupProbe | object | `{}` | No startup/readiness probes by default since we don't really care about its startup time (it doesn't serve traffic) |
-| supersetWorker.strategy | object | `{}` |  |
-| supersetWorker.topologySpreadConstraints | list | `[]` | TopologySpreadConstrains to be added to supersetWorker deployments |
-| tolerations | list | `[]` |  |
-| topologySpreadConstraints | list | `[]` | TopologySpreadConstrains to be added to all deployments |
+| Key                                                     | Type   | Default                                            | Description                                                                                                                                                                                                                                                                                                                         |
+| ------------------------------------------------------- | ------ | -------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| affinity                                                | object | `{}`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| bootstrapScript                                         | string | see `values.yaml`                                  | Install additional packages and do any other bootstrap configuration in this script For production clusters it's recommended to build own image with this step done in CI                                                                                                                                                           |
+| configFromSecret                                        | string | `"{{ template \"superset.fullname\" . }}-config"`  | The name of the secret which we will use to generate a superset_config.py file Note: this secret must have the key superset_config.py in it and can include other files as well                                                                                                                                                     |
+| configMountPath                                         | string | `"/app/pythonpath"`                                |                                                                                                                                                                                                                                                                                                                                     |
+| configOverrides                                         | object | `{}`                                               | A dictionary of overrides to append at the end of superset_config.py - the name does not matter WARNING: the order is not guaranteed Files can be passed as helm --set-file configOverrides.my-override=my-file.py                                                                                                                  |
+| configOverridesFiles                                    | object | `{}`                                               | Same as above but the values are files                                                                                                                                                                                                                                                                                              |
+| envFromSecret                                           | string | `"{{ template \"superset.fullname\" . }}-env"`     | The name of the secret which we will use to populate env vars in deployed pods This can be useful for secret keys, etc.                                                                                                                                                                                                             |
+| envFromSecrets                                          | list   | `[]`                                               | This can be a list of templated strings                                                                                                                                                                                                                                                                                             |
+| extraConfigMountPath                                    | string | `"/app/configs"`                                   |                                                                                                                                                                                                                                                                                                                                     |
+| extraConfigs                                            | object | `{}`                                               | Extra files to mount on `/app/pythonpath`                                                                                                                                                                                                                                                                                           |
+| extraEnv                                                | object | `{}`                                               | Extra environment variables that will be passed into pods                                                                                                                                                                                                                                                                           |
+| extraEnvRaw                                             | list   | `[]`                                               | Extra environment variables in RAW format that will be passed into pods                                                                                                                                                                                                                                                             |
+| extraSecretEnv                                          | object | `{}`                                               | Extra environment variables to pass as secrets                                                                                                                                                                                                                                                                                      |
+| extraSecrets                                            | object | `{}`                                               | Extra files to mount on `/app/pythonpath` as secrets                                                                                                                                                                                                                                                                                |
+| extraVolumeMounts                                       | list   | `[]`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| extraVolumes                                            | list   | `[]`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| fullnameOverride                                        | string | `nil`                                              | Provide a name to override the full names of resources                                                                                                                                                                                                                                                                              |
+| hostAliases                                             | list   | `[]`                                               | Custom hostAliases for all superset pods # https://kubernetes.io/docs/tasks/network/customize-hosts-file-for-pods/                                                                                                                                                                                                                  |
+| image.pullPolicy                                        | string | `"IfNotPresent"`                                   |                                                                                                                                                                                                                                                                                                                                     |
+| image.repository                                        | string | `"apachesuperset.docker.scarf.sh/apache/superset"` |                                                                                                                                                                                                                                                                                                                                     |
+| image.tag                                               | string | `""`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| imagePullSecrets                                        | list   | `[]`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| ingress.annotations                                     | object | `{}`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| ingress.enabled                                         | bool   | `false`                                            |                                                                                                                                                                                                                                                                                                                                     |
+| ingress.extraHostsRaw                                   | list   | `[]`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| ingress.hosts[0]                                        | string | `"chart-example.local"`                            |                                                                                                                                                                                                                                                                                                                                     |
+| ingress.ingressClassName                                | string | `nil`                                              |                                                                                                                                                                                                                                                                                                                                     |
+| ingress.path                                            | string | `"/"`                                              |                                                                                                                                                                                                                                                                                                                                     |
+| ingress.pathType                                        | string | `"ImplementationSpecific"`                         |                                                                                                                                                                                                                                                                                                                                     |
+| ingress.tls                                             | list   | `[]`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| init.adminUser.email                                    | string | `"admin@superset.com"`                             |                                                                                                                                                                                                                                                                                                                                     |
+| init.adminUser.firstname                                | string | `"Superset"`                                       |                                                                                                                                                                                                                                                                                                                                     |
+| init.adminUser.lastname                                 | string | `"Admin"`                                          |                                                                                                                                                                                                                                                                                                                                     |
+| init.adminUser.password                                 | string | `"admin"`                                          |                                                                                                                                                                                                                                                                                                                                     |
+| init.adminUser.username                                 | string | `"admin"`                                          |                                                                                                                                                                                                                                                                                                                                     |
+| init.affinity                                           | object | `{}`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| init.command                                            | list   | a `superset_init.sh` command                       | Command                                                                                                                                                                                                                                                                                                                             |
+| init.containerSecurityContext                           | object | `{}`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| init.createAdmin                                        | bool   | `true`                                             |                                                                                                                                                                                                                                                                                                                                     |
+| init.enabled                                            | bool   | `true`                                             |                                                                                                                                                                                                                                                                                                                                     |
+| init.initContainers                                     | list   | a container waiting for postgres                   | List of initContainers                                                                                                                                                                                                                                                                                                              |
+| init.initscript                                         | string | a script to create admin user and initailize roles | A Superset init script                                                                                                                                                                                                                                                                                                              |
+| init.jobAnnotations."helm.sh/hook"                      | string | `"post-install,post-upgrade"`                      |                                                                                                                                                                                                                                                                                                                                     |
+| init.jobAnnotations."helm.sh/hook-delete-policy"        | string | `"before-hook-creation"`                           |                                                                                                                                                                                                                                                                                                                                     |
+| init.loadExamples                                       | bool   | `false`                                            |                                                                                                                                                                                                                                                                                                                                     |
+| init.podAnnotations                                     | object | `{}`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| init.podSecurityContext                                 | object | `{}`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| init.resources                                          | object | `{}`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| init.tolerations                                        | list   | `[]`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| init.topologySpreadConstraints                          | list   | `[]`                                               | TopologySpreadConstrains to be added to init job                                                                                                                                                                                                                                                                                    |
+| initImage.pullPolicy                                    | string | `"IfNotPresent"`                                   |                                                                                                                                                                                                                                                                                                                                     |
+| initImage.repository                                    | string | `"apache/superset"`                                |                                                                                                                                                                                                                                                                                                                                     |
+| initImage.tag                                           | string | `"dockerize"`                                      |                                                                                                                                                                                                                                                                                                                                     |
+| nameOverride                                            | string | `nil`                                              | Provide a name to override the name of the chart                                                                                                                                                                                                                                                                                    |
+| nodeSelector                                            | object | `{}`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| postgresql                                              | object | see `values.yaml`                                  | Configuration values for the postgresql dependency. ref: https://github.com/kubernetes/charts/blob/master/stable/postgresql/README.md                                                                                                                                                                                               |
+| redis                                                   | object | see `values.yaml`                                  | Configuration values for the Redis dependency. ref: https://github.com/bitnami/charts/blob/master/bitnami/redis More documentation can be found here: https://artifacthub.io/packages/helm/bitnami/redis                                                                                                                            |
+| resources                                               | object | `{}`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| runAsUser                                               | int    | `0`                                                | User ID directive. This user must have enough permissions to run the bootstrap script Running containers as root is not recommended in production. Change this to another UID - e.g. 1000 to be more secure                                                                                                                         |
+| service.annotations                                     | object | `{}`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| service.loadBalancerIP                                  | string | `nil`                                              |                                                                                                                                                                                                                                                                                                                                     |
+| service.nodePort.http                                   | int    | `"nil"`                                            |                                                                                                                                                                                                                                                                                                                                     |
+| service.port                                            | int    | `8088`                                             |                                                                                                                                                                                                                                                                                                                                     |
+| service.type                                            | string | `"ClusterIP"`                                      |                                                                                                                                                                                                                                                                                                                                     |
+| serviceAccount.annotations                              | object | `{}`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| serviceAccount.create                                   | bool   | `false`                                            | Create custom service account for Superset. If create: true and serviceAccountName is not provided, `superset.fullname` will be used.                                                                                                                                                                                               |
+| serviceAccountName                                      | string | `nil`                                              | Specify service account name to be used                                                                                                                                                                                                                                                                                             |
+| supersetCeleryBeat.affinity                             | object | `{}`                                               | Affinity to be added to supersetCeleryBeat deployment                                                                                                                                                                                                                                                                               |
+| supersetCeleryBeat.command                              | list   | a `celery beat` command                            | Command                                                                                                                                                                                                                                                                                                                             |
+| supersetCeleryBeat.containerSecurityContext             | object | `{}`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| supersetCeleryBeat.deploymentAnnotations                | object | `{}`                                               | Annotations to be added to supersetCeleryBeat deployment                                                                                                                                                                                                                                                                            |
+| supersetCeleryBeat.enabled                              | bool   | `false`                                            | This is only required if you intend to use alerts and reports                                                                                                                                                                                                                                                                       |
+| supersetCeleryBeat.forceReload                          | bool   | `false`                                            | If true, forces deployment to reload on each upgrade                                                                                                                                                                                                                                                                                |
+| supersetCeleryBeat.initContainers                       | list   | a container waiting for postgres                   | List of init containers                                                                                                                                                                                                                                                                                                             |
+| supersetCeleryBeat.podAnnotations                       | object | `{}`                                               | Annotations to be added to supersetCeleryBeat pods                                                                                                                                                                                                                                                                                  |
+| supersetCeleryBeat.podLabels                            | object | `{}`                                               | Labels to be added to supersetCeleryBeat pods                                                                                                                                                                                                                                                                                       |
+| supersetCeleryBeat.podSecurityContext                   | object | `{}`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| supersetCeleryBeat.resources                            | object | `{}`                                               | Resource settings for the CeleryBeat pods - these settings overwrite might existing values from the global resources object defined above.                                                                                                                                                                                          |
+| supersetCeleryBeat.topologySpreadConstraints            | list   | `[]`                                               | TopologySpreadConstrains to be added to supersetCeleryBeat deployments                                                                                                                                                                                                                                                              |
+| supersetCeleryFlower.affinity                           | object | `{}`                                               | Affinity to be added to supersetCeleryFlower deployment                                                                                                                                                                                                                                                                             |
+| supersetCeleryFlower.command                            | list   | a `celery flower` command                          | Command                                                                                                                                                                                                                                                                                                                             |
+| supersetCeleryFlower.containerSecurityContext           | object | `{}`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| supersetCeleryFlower.deploymentAnnotations              | object | `{}`                                               | Annotations to be added to supersetCeleryFlower deployment                                                                                                                                                                                                                                                                          |
+| supersetCeleryFlower.enabled                            | bool   | `false`                                            | Enables a Celery flower deployment (management UI to monitor celery jobs) WARNING: on superset 1.x, this requires a Superset image that has `flower<1.0.0` installed (which is NOT the case of the default images) flower>=1.0.0 requires Celery 5+ which Superset 1.5 does not support                                             |
+| supersetCeleryFlower.initContainers                     | list   | a container waiting for postgres and redis         | List of init containers                                                                                                                                                                                                                                                                                                             |
+| supersetCeleryFlower.livenessProbe.failureThreshold     | int    | `3`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetCeleryFlower.livenessProbe.httpGet.path         | string | `"/api/workers"`                                   |                                                                                                                                                                                                                                                                                                                                     |
+| supersetCeleryFlower.livenessProbe.httpGet.port         | string | `"flower"`                                         |                                                                                                                                                                                                                                                                                                                                     |
+| supersetCeleryFlower.livenessProbe.initialDelaySeconds  | int    | `5`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetCeleryFlower.livenessProbe.periodSeconds        | int    | `5`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetCeleryFlower.livenessProbe.successThreshold     | int    | `1`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetCeleryFlower.livenessProbe.timeoutSeconds       | int    | `1`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetCeleryFlower.podAnnotations                     | object | `{}`                                               | Annotations to be added to supersetCeleryFlower pods                                                                                                                                                                                                                                                                                |
+| supersetCeleryFlower.podLabels                          | object | `{}`                                               | Labels to be added to supersetCeleryFlower pods                                                                                                                                                                                                                                                                                     |
+| supersetCeleryFlower.podSecurityContext                 | object | `{}`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| supersetCeleryFlower.readinessProbe.failureThreshold    | int    | `3`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetCeleryFlower.readinessProbe.httpGet.path        | string | `"/api/workers"`                                   |                                                                                                                                                                                                                                                                                                                                     |
+| supersetCeleryFlower.readinessProbe.httpGet.port        | string | `"flower"`                                         |                                                                                                                                                                                                                                                                                                                                     |
+| supersetCeleryFlower.readinessProbe.initialDelaySeconds | int    | `5`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetCeleryFlower.readinessProbe.periodSeconds       | int    | `5`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetCeleryFlower.readinessProbe.successThreshold    | int    | `1`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetCeleryFlower.readinessProbe.timeoutSeconds      | int    | `1`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetCeleryFlower.replicaCount                       | int    | `1`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetCeleryFlower.resources                          | object | `{}`                                               | Resource settings for the CeleryBeat pods - these settings overwrite might existing values from the global resources object defined above.                                                                                                                                                                                          |
+| supersetCeleryFlower.service.annotations                | object | `{}`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| supersetCeleryFlower.service.loadBalancerIP             | string | `nil`                                              |                                                                                                                                                                                                                                                                                                                                     |
+| supersetCeleryFlower.service.nodePort.http              | int    | `"nil"`                                            |                                                                                                                                                                                                                                                                                                                                     |
+| supersetCeleryFlower.service.port                       | int    | `5555`                                             |                                                                                                                                                                                                                                                                                                                                     |
+| supersetCeleryFlower.service.type                       | string | `"ClusterIP"`                                      |                                                                                                                                                                                                                                                                                                                                     |
+| supersetCeleryFlower.startupProbe.failureThreshold      | int    | `60`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| supersetCeleryFlower.startupProbe.httpGet.path          | string | `"/api/workers"`                                   |                                                                                                                                                                                                                                                                                                                                     |
+| supersetCeleryFlower.startupProbe.httpGet.port          | string | `"flower"`                                         |                                                                                                                                                                                                                                                                                                                                     |
+| supersetCeleryFlower.startupProbe.initialDelaySeconds   | int    | `5`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetCeleryFlower.startupProbe.periodSeconds         | int    | `5`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetCeleryFlower.startupProbe.successThreshold      | int    | `1`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetCeleryFlower.startupProbe.timeoutSeconds        | int    | `1`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetCeleryFlower.topologySpreadConstraints          | list   | `[]`                                               | TopologySpreadConstrains to be added to supersetCeleryFlower deployments                                                                                                                                                                                                                                                            |
+| supersetNode.affinity                                   | object | `{}`                                               | Affinity to be added to supersetNode deployment                                                                                                                                                                                                                                                                                     |
+| supersetNode.command                                    | list   | See `values.yaml`                                  | Startup command                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.connections.db_host                        | string | `"{{ .Release.Name }}-postgresql"`                 |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.connections.db_name                        | string | `"superset"`                                       |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.connections.db_pass                        | string | `"superset"`                                       |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.connections.db_port                        | string | `"5432"`                                           |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.connections.db_user                        | string | `"superset"`                                       |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.connections.redis_host                     | string | `"{{ .Release.Name }}-redis-headless"`             | Change in case of bringing your own redis and then also set redis.enabled:false                                                                                                                                                                                                                                                     |
+| supersetNode.connections.redis_port                     | string | `"6379"`                                           |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.containerSecurityContext                   | object | `{}`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.deploymentAnnotations                      | object | `{}`                                               | Annotations to be added to supersetNode deployment                                                                                                                                                                                                                                                                                  |
+| supersetNode.deploymentLabels                           | object | `{}`                                               | Labels to be added to supersetNode deployment                                                                                                                                                                                                                                                                                       |
+| supersetNode.env                                        | object | `{}`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.extraContainers                            | list   | `[]`                                               | Launch additional containers into supersetNode pod                                                                                                                                                                                                                                                                                  |
+| supersetNode.forceReload                                | bool   | `false`                                            | If true, forces deployment to reload on each upgrade                                                                                                                                                                                                                                                                                |
+| supersetNode.initContainers                             | list   | a container waiting for postgres                   | Init containers                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.livenessProbe.failureThreshold             | int    | `3`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.livenessProbe.httpGet.path                 | string | `"/health"`                                        |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.livenessProbe.httpGet.port                 | string | `"http"`                                           |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.livenessProbe.initialDelaySeconds          | int    | `15`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.livenessProbe.periodSeconds                | int    | `15`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.livenessProbe.successThreshold             | int    | `1`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.livenessProbe.timeoutSeconds               | int    | `1`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.podAnnotations                             | object | `{}`                                               | Annotations to be added to supersetNode pods                                                                                                                                                                                                                                                                                        |
+| supersetNode.podLabels                                  | object | `{}`                                               | Labels to be added to supersetNode pods                                                                                                                                                                                                                                                                                             |
+| supersetNode.podSecurityContext                         | object | `{}`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.readinessProbe.failureThreshold            | int    | `3`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.readinessProbe.httpGet.path                | string | `"/health"`                                        |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.readinessProbe.httpGet.port                | string | `"http"`                                           |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.readinessProbe.initialDelaySeconds         | int    | `15`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.readinessProbe.periodSeconds               | int    | `15`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.readinessProbe.successThreshold            | int    | `1`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.readinessProbe.timeoutSeconds              | int    | `1`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.replicaCount                               | int    | `1`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.resources                                  | object | `{}`                                               | Resource settings for the supersetNode pods - these settings overwrite might existing values from the global resources object defined above.                                                                                                                                                                                        |
+| supersetNode.startupProbe.failureThreshold              | int    | `60`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.startupProbe.httpGet.path                  | string | `"/health"`                                        |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.startupProbe.httpGet.port                  | string | `"http"`                                           |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.startupProbe.initialDelaySeconds           | int    | `15`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.startupProbe.periodSeconds                 | int    | `5`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.startupProbe.successThreshold              | int    | `1`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.startupProbe.timeoutSeconds                | int    | `1`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.strategy                                   | object | `{}`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| supersetNode.topologySpreadConstraints                  | list   | `[]`                                               | TopologySpreadConstrains to be added to supersetNode deployments                                                                                                                                                                                                                                                                    |
+| supersetWebsockets.affinity                             | object | `{}`                                               | Affinity to be added to supersetWebsockets deployment                                                                                                                                                                                                                                                                               |
+| supersetWebsockets.command                              | list   | `[]`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.config                               | object | see `values.yaml`                                  | The config.json to pass to the server, see https://github.com/apache/superset/tree/master/superset-websocket Note that the configuration can also read from environment variables (which will have priority), see https://github.com/apache/superset/blob/master/superset-websocket/src/config.ts for a list of supported variables |
+| supersetWebsockets.containerSecurityContext             | object | `{}`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.deploymentAnnotations                | object | `{}`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.enabled                              | bool   | `false`                                            | This is only required if you intend to use `GLOBAL_ASYNC_QUERIES` in `ws` mode see https://github.com/apache/superset/blob/master/CONTRIBUTING.md#async-chart-queries                                                                                                                                                               |
+| supersetWebsockets.image.pullPolicy                     | string | `"IfNotPresent"`                                   |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.image.repository                     | string | `"oneacrefund/superset-websocket"`                 | There is no official image (yet), this one is community-supported                                                                                                                                                                                                                                                                   |
+| supersetWebsockets.image.tag                            | string | `"latest"`                                         |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.ingress.path                         | string | `"/ws"`                                            |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.ingress.pathType                     | string | `"Prefix"`                                         |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.livenessProbe.failureThreshold       | int    | `3`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.livenessProbe.httpGet.path           | string | `"/health"`                                        |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.livenessProbe.httpGet.port           | string | `"ws"`                                             |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.livenessProbe.initialDelaySeconds    | int    | `5`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.livenessProbe.periodSeconds          | int    | `5`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.livenessProbe.successThreshold       | int    | `1`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.livenessProbe.timeoutSeconds         | int    | `1`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.podAnnotations                       | object | `{}`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.podLabels                            | object | `{}`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.podSecurityContext                   | object | `{}`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.readinessProbe.failureThreshold      | int    | `3`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.readinessProbe.httpGet.path          | string | `"/health"`                                        |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.readinessProbe.httpGet.port          | string | `"ws"`                                             |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.readinessProbe.initialDelaySeconds   | int    | `5`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.readinessProbe.periodSeconds         | int    | `5`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.readinessProbe.successThreshold      | int    | `1`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.readinessProbe.timeoutSeconds        | int    | `1`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.replicaCount                         | int    | `1`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.resources                            | object | `{}`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.service.annotations                  | object | `{}`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.service.loadBalancerIP               | string | `nil`                                              |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.service.nodePort.http                | int    | `"nil"`                                            |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.service.port                         | int    | `8080`                                             |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.service.type                         | string | `"ClusterIP"`                                      |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.startupProbe.failureThreshold        | int    | `60`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.startupProbe.httpGet.path            | string | `"/health"`                                        |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.startupProbe.httpGet.port            | string | `"ws"`                                             |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.startupProbe.initialDelaySeconds     | int    | `5`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.startupProbe.periodSeconds           | int    | `5`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.startupProbe.successThreshold        | int    | `1`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.startupProbe.timeoutSeconds          | int    | `1`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.strategy                             | object | `{}`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWebsockets.topologySpreadConstraints            | list   | `[]`                                               | TopologySpreadConstrains to be added to supersetWebsockets deployments                                                                                                                                                                                                                                                              |
+| supersetWorker.affinity                                 | object | `{}`                                               | Affinity to be added to supersetWorker deployment                                                                                                                                                                                                                                                                                   |
+| supersetWorker.command                                  | list   | a `celery worker` command                          | Worker startup command                                                                                                                                                                                                                                                                                                              |
+| supersetWorker.containerSecurityContext                 | object | `{}`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWorker.deploymentAnnotations                    | object | `{}`                                               | Annotations to be added to supersetWorker deployment                                                                                                                                                                                                                                                                                |
+| supersetWorker.deploymentLabels                         | object | `{}`                                               | Labels to be added to supersetWorker deployment                                                                                                                                                                                                                                                                                     |
+| supersetWorker.extraContainers                          | list   | `[]`                                               | Launch additional containers into supersetWorker pod                                                                                                                                                                                                                                                                                |
+| supersetWorker.forceReload                              | bool   | `false`                                            | If true, forces deployment to reload on each upgrade                                                                                                                                                                                                                                                                                |
+| supersetWorker.initContainers                           | list   | a container waiting for postgres and redis         | Init container                                                                                                                                                                                                                                                                                                                      |
+| supersetWorker.livenessProbe.exec.command               | list   | a `celery inspect ping` command                    | Liveness probe command                                                                                                                                                                                                                                                                                                              |
+| supersetWorker.livenessProbe.failureThreshold           | int    | `3`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWorker.livenessProbe.initialDelaySeconds        | int    | `120`                                              |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWorker.livenessProbe.periodSeconds              | int    | `60`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWorker.livenessProbe.successThreshold           | int    | `1`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWorker.livenessProbe.timeoutSeconds             | int    | `60`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWorker.podAnnotations                           | object | `{}`                                               | Annotations to be added to supersetWorker pods                                                                                                                                                                                                                                                                                      |
+| supersetWorker.podLabels                                | object | `{}`                                               | Labels to be added to supersetWorker pods                                                                                                                                                                                                                                                                                           |
+| supersetWorker.podSecurityContext                       | object | `{}`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWorker.readinessProbe                           | object | `{}`                                               | No startup/readiness probes by default since we don't really care about its startup time (it doesn't serve traffic)                                                                                                                                                                                                                 |
+| supersetWorker.replicaCount                             | int    | `1`                                                |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWorker.resources                                | object | `{}`                                               | Resource settings for the supersetWorker pods - these settings overwrite might existing values from the global resources object defined above.                                                                                                                                                                                      |
+| supersetWorker.startupProbe                             | object | `{}`                                               | No startup/readiness probes by default since we don't really care about its startup time (it doesn't serve traffic)                                                                                                                                                                                                                 |
+| supersetWorker.strategy                                 | object | `{}`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| supersetWorker.topologySpreadConstraints                | list   | `[]`                                               | TopologySpreadConstrains to be added to supersetWorker deployments                                                                                                                                                                                                                                                                  |
+| tolerations                                             | list   | `[]`                                               |                                                                                                                                                                                                                                                                                                                                     |
+| topologySpreadConstraints                               | list   | `[]`                                               | TopologySpreadConstrains to be added to all deployments                                                                                                                                                                                                                                                                             |


[superset] 03/05: fix(mysql): handle string typed decimal results (#24241)

Posted by mi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 615d7f5ccc7f46dcbdc075e378e60bd674855fbd
Author: Ville Brofeldt <33...@users.noreply.github.com>
AuthorDate: Fri Sep 29 10:48:08 2023 -0700

    fix(mysql): handle string typed decimal results (#24241)
    
    (cherry picked from commit 7eab59af513ccccb3b1fed7aca5798c98c35fdb8)
---
 superset/db_engine_specs/base.py               | 29 ++++++++++++++++++-
 superset/db_engine_specs/mysql.py              |  6 +++-
 tests/unit_tests/db_engine_specs/test_mysql.py | 40 ++++++++++++++++++++++++++
 3 files changed, 73 insertions(+), 2 deletions(-)

diff --git a/superset/db_engine_specs/base.py b/superset/db_engine_specs/base.py
index e7f8675423..6be3ab24b0 100644
--- a/superset/db_engine_specs/base.py
+++ b/superset/db_engine_specs/base.py
@@ -309,6 +309,10 @@ class BaseEngineSpec:  # pylint: disable=too-many-public-methods
     # engine-specific type mappings to check prior to the defaults
     column_type_mappings: tuple[ColumnTypeMapping, ...] = ()
 
+    # type-specific functions to mutate values received from the database.
+    # Needed on certain databases that return values in an unexpected format
+    column_type_mutators: dict[TypeEngine, Callable[[Any], Any]] = {}
+
     # Does database support join-free timeslot grouping
     time_groupby_inline = False
     limit_method = LimitMethod.FORCE_LIMIT
@@ -730,7 +734,30 @@ class BaseEngineSpec:  # pylint: disable=too-many-public-methods
         try:
             if cls.limit_method == LimitMethod.FETCH_MANY and limit:
                 return cursor.fetchmany(limit)
-            return cursor.fetchall()
+            data = cursor.fetchall()
+            description = cursor.description or []
+            # Create a mapping between column name and a mutator function to normalize
+            # values with. The first two items in the description row are
+            # the column name and type.
+            column_mutators = {
+                row[0]: func
+                for row in description
+                if (
+                    func := cls.column_type_mutators.get(
+                        type(cls.get_sqla_column_type(cls.get_datatype(row[1])))
+                    )
+                )
+            }
+            if column_mutators:
+                indexes = {row[0]: idx for idx, row in enumerate(description)}
+                for row_idx, row in enumerate(data):
+                    new_row = list(row)
+                    for col, func in column_mutators.items():
+                        col_idx = indexes[col]
+                        new_row[col_idx] = func(row[col_idx])
+                    data[row_idx] = tuple(new_row)
+
+            return data
         except Exception as ex:
             raise cls.get_dbapi_mapped_exception(ex) from ex
 
diff --git a/superset/db_engine_specs/mysql.py b/superset/db_engine_specs/mysql.py
index e83e53e426..eaa7d9377d 100644
--- a/superset/db_engine_specs/mysql.py
+++ b/superset/db_engine_specs/mysql.py
@@ -16,8 +16,9 @@
 # under the License.
 import re
 from datetime import datetime
+from decimal import Decimal
 from re import Pattern
-from typing import Any, Optional
+from typing import Any, Callable, Optional
 from urllib import parse
 
 from flask_babel import gettext as __
@@ -125,6 +126,9 @@ class MySQLEngineSpec(BaseEngineSpec, BasicParametersMixin):
             GenericDataType.STRING,
         ),
     )
+    column_type_mutators: dict[types.TypeEngine, Callable[[Any], Any]] = {
+        DECIMAL: lambda val: Decimal(val) if isinstance(val, str) else val
+    }
 
     _time_grain_expressions = {
         None: "{col}",
diff --git a/tests/unit_tests/db_engine_specs/test_mysql.py b/tests/unit_tests/db_engine_specs/test_mysql.py
index 89abf2321d..ed64347017 100644
--- a/tests/unit_tests/db_engine_specs/test_mysql.py
+++ b/tests/unit_tests/db_engine_specs/test_mysql.py
@@ -16,6 +16,7 @@
 # under the License.
 
 from datetime import datetime
+from decimal import Decimal
 from typing import Any, Optional
 from unittest.mock import Mock, patch
 
@@ -220,3 +221,42 @@ def test_get_schema_from_engine_params() -> None:
         )
         == "db1"
     )
+
+
+@pytest.mark.parametrize(
+    "data,description,expected_result",
+    [
+        (
+            [("1.23456", "abc")],
+            [("dec", "decimal(12,6)"), ("str", "varchar(3)")],
+            [(Decimal("1.23456"), "abc")],
+        ),
+        (
+            [(Decimal("1.23456"), "abc")],
+            [("dec", "decimal(12,6)"), ("str", "varchar(3)")],
+            [(Decimal("1.23456"), "abc")],
+        ),
+        (
+            [(None, "abc")],
+            [("dec", "decimal(12,6)"), ("str", "varchar(3)")],
+            [(None, "abc")],
+        ),
+        (
+            [("1.23456", "abc")],
+            [("dec", "varchar(255)"), ("str", "varchar(3)")],
+            [("1.23456", "abc")],
+        ),
+    ],
+)
+def test_column_type_mutator(
+    data: list[tuple[Any, ...]],
+    description: list[Any],
+    expected_result: list[tuple[Any, ...]],
+):
+    from superset.db_engine_specs.mysql import MySQLEngineSpec as spec
+
+    mock_cursor = Mock()
+    mock_cursor.fetchall.return_value = data
+    mock_cursor.description = description
+
+    assert spec.fetch_data(mock_cursor) == expected_result