#362 - address issue with unbalanced parameters and update the stored…

… procedure to remove an invalid variable

did anyone test this updated stored proc on db2?


Fix openeapi files, put correct format for ids

Some request parameters are missing format, like ids in things service they should be format: uuid, also there are some that have incorrect type like ThingID

Some endpoints is missing also, like users/profile


Remove queue-flow, migrate two files to ES6

Pull Request Test Coverage Report for Build 34

491 of 538 (91.26%)  changed or added relevant lines in 11 files are covered.
No unchanged relevant lines lost coverage.
Overall coverage increased (+3.8%) to 88.326%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

lib/transports/server/http.js
24
25
96.0%

lib/transports/server/tcp.js
53
54
98.15%

lib/transports/server/childProcess.js
27
30
90.0%

lib/transports/client/tcp.js
112
115
97.39%

lib/transports/server/middleware.js
16
20
80.0%

lib/transports/shared/tcp.js
54
59
91.53%

lib/transports/client/childProcess.js
58
64
90.63%

lib/server.js
62
86
72.09%

Totals

Change from base Build 28:
3.8%

Covered Lines:
518

Relevant Lines:
565

💛  - Coveralls


Unify Field and ColumnSchema in Storage

Currently, we have Field and ColumnSchema to access column data in a
row. These two classes are mostly the same. So we should unify these to
one class. Now, Field has offset information, which is an row attribute,
so we remove offset in Field.
RowCursor now has some logic which belong to Schema, so in this patch I
add Schema attribute to RowCursor to make RowCursor simple. After this
change, only Schema will handle Field/ColumnSchema.
I extract some logic from RowCursor to be/src/olap/row.h, then we can
use same logic to handle different types of row. Each type of row has
same function that to get Cell of this row. A cell represent a column
content with a null indicator.

@imay Hi. Why introduce the new concept ContiguousRow and RowCursorCell? Are they necessary?  I think we should keep core concepts as little as possible and ensure every core concept is clear and easy to understand.

@imay Hi. Why introduce the new concept ContiguousRow and RowCursorCell? Are they necessary? I think we should keep core concepts as little as possible and ensure every core concept is clear and easy to understand.

@kangkaisen
In origin code, for example in Memtable, we use char* to represent a row. I introduce ContiguousRow to represent char*  with a Schema. And I think this struct will replace RowCursor in some day. And we have many types of row, like RowCursor, char*, RowBlockRow which is used in storage V2.
And there are some operations on row like copy, compare with row. In origin code, there are many copies code for same operation. So I introduce Row and Cell concept to let us finish this operation for all types of row with one copy template row.
And what's more, in our origin code, many code should handle row format, like ptr + 1 to get column pointer, *ptr to get if it is null. With Cell concept, we can encapsulate this logic in it. So If we want to change RowCursor format, we need to modify only a couple of files.

@imay Hi. Why introduce the new concept ContiguousRow and RowCursorCell? Are they necessary? I think we should keep core concepts as little as possible and ensure every core concept is clear and easy to understand.

@kangkaisen
In origin code, for example in Memtable, we use char* to represent a row. I introduce ContiguousRow to represent char*  with a Schema. And I think this struct will replace RowCursor in some day. And we have many types of row, like RowCursor, char*, RowBlockRow which is used in storage V2.
And there are some operations on row like copy, compare with row. In origin code, there are many copies code for same operation. So I introduce Row and Cell concept to let us finish this operation for all types of row with one copy template row.
And what's more, in our origin code, many code should handle row format, like ptr + 1 to get column pointer, *ptr to get if it is null. With Cell concept, we can encapsulate this logic in it. So If we want to change RowCursor format, we need to modify only a couple of files.

@imay  OK, Thank you.


Added patch for missing sys/ustat.h header file

in llvm-5.0.1 build. Fix for #59

This was merged as part of the other PR


Feature/profile refactor onchange

This is a refactor on the profile, now when a user updates fields do not will run map for each letter the user writes. This will create an object and we will mapping on submit.

lgtm


Implement type hints in ninja_syntax.py

Deliberately left all functionality untouched, instead focusing on hinting the system that currently exists.

Thank you, this looks fine to me. I can run mypy succesfully on that file with this PR applied locally. @jhasse, do you think we could add a mypy pass to the Github action script (or even to the CMake-based test suite?)

This doesn't change the code in any way, it just allows it to be checked with mypy, the Python type checker (running mypy misc/ninja_syntax.py, which reports no problems). So I would say go for it :-)


Subledgerid swagger update

Details
Service name: Confidential Ledger
Key contact for the review: Emily Louden
Whether this is a new or existing API: existing API
Whether or not your service already been deployed: Confidential Ledger is in private preview
A brief description of the material to be reviewed/changed: adding the get subledger ids endpoint, updating receipt spec
Everything Else
MSFT employees can try out our new experience at OpenAPI Hub  - one location for using our validation tools and finding your workflow.

Changelog
Add a changelog entry for this PR by answering the following questions:

What's the purpose of the update?

[ ] new service onboarding
[x] new API version
[x] update existing version for new feature
[ ] update existing version to fix swagger quality issue in s360
[ ] Other, please clarify

When are you targeting to deploy the new service/feature to public regions? Please provide the date or, if the date is not yet available, the month.
When do you expect to publish the swagger? Please provide date or, the the date is not yet available, the month.
If updating an existing version, please select the specific language SDKs and CLIs that must be refreshed after the swagger is published.

[x] SDK of .NET (need service team to ensure code readiness)
[x] SDK of Python
[x] SDK of Java
[x] SDK of Js
[x] SDK of Go
[x] PowerShell
[x] CLI
[x] Terraform
[ ] No refresh required for updates in this PR

Contribution checklist:

[x] I commit to follow the Breaking Change Policy of "no breaking changes"
[x] I have reviewed the documentation for the workflow.
[x] Validation tools were run on swagger spec(s) and errors have all been fixed in this PR. How to fix?

If any further question about AME onboarding or validation tools, please view the FAQ.
ARM API Review Checklist

Applicability: :warning:
If your changes encompass only the following scenarios, you should SKIP this section, as these scenarios do not require ARM review.

Change to data plane APIs
Adding new properties
All removals

Otherwise your PR may be subject to ARM review requirements. Complete the following:

[x] Check this box if any of the following apply to the PR so that label "WaitForARMFeedback" will be added automatically to begin ARM API Review. Failure to comply may result in delays to the manifest.

Adding a new service
Adding new API(s)
Adding a new API version
-[ ] To review changes efficiently, ensure you are using OpenAPIHub to initialize the PR for adding a new version. More details, refer to the wiki.

[x] Ensure you've reviewed following guidelines including ARM resource provider contract and REST guidelines. Estimated time (4 hours). This is required before you can request review from ARM API Review board.

[ ] If you are blocked on ARM review and want to get the PR merged with urgency, please get the ARM oncall for reviews (RP Manifest Approvers team under Azure Resource Manager service) from IcM and reach out to them.

Breaking Change Review Checklist
If any of the following scenarios apply to the PR, request approval from the Breaking Change Review Board as defined in the Breaking Change Policy.

[ ] Removing API(s) in a stable version
[ ] Removing properties in a stable version
[ ] Removing API version(s) in a stable version
[x] Updating API in a stable or public preview version with Breaking Change Validation errors
[ ] Updating API(s) in public preview over 1 year (refer to Retirement of Previews)

Action: to initiate an evaluation of the breaking change, create a new intake using the template for breaking changes. Addition details on the process and office hours are on the Breaking change Wiki.
Please follow the link to find more details on PR review process.

It's data-plane, ARM review is not required.


Update reform validation page

Update dry-v syntax, fix a couple of grammar issues, move some bits
around & demote unique validation and confirm validation to be part of
ActiveModel.

@apotonick can we merge this for now as there isn't currently an equivalent to Reform's groups in dry-v.
We can update it if/when this changes.

Damn, this would have been helpful for my work over the last few days. I'll have to check docs PRs earlier in future!

@fran-worley my dearest, can you please PR this against the fou6 branch?  Merged via cherry-pick! :kissing:


Issue 14745 - Qualifiers rejected for delegate literals

https://issues.dlang.org/show_bug.cgi?id=14745
That's unnecessary parser limitation.

Rebased on master, and ready for ddmd.

Auto-merge toggled on

And thanks!

Does this need a grammar update?

@MartinNowak You're right, I opened https://github.com/D-Programming-Language/dlang.org/pull/1086 for that.


Add Lyman alpha focused version of minitest

We would like to be able to run our own runs of minitests, as a first step towards having full survey simulations for Lyman alpha.
We will start by running minitest with empty LRG and ELG fibers, and making sure that the Lya quasars are doing something equivalent to quickquasars (something that @moustakas has asked us to do for a while).
Julian Bautista (I can't find his github username) will be working on this, but we'll need help at some point from the usual suspects: @julienguy @kdawson1000 @sbailey @forero

I found it: @julianbautista

+1 for this idea.  Please implement it as a separate notebook that includes just the pieces you need (and not as another thing to do within the primary minitest notebook).


Add support to gfauto for finding wrong image bugs and generating associated CTS patches

The gfauto tool, which is currently in this branch (due to be merged soon) supports continuous fuzzing using GraphicsFuzz to find crash bugs, de-duplicate them, and transform unique crash bugs into patches that are nearly ready to be added to CTS (requiring a small amount of manual triage).
We would like an analogous flow for wrong image bugs, where GraphicsFuzz identifies a pair of equivalent shaders that lead to radically different images being rendered (due to a shader compiler bug).  We would like to be able to de-duplicate such issues and, for a unique wrong image bug generate a CTS patch.
The focus of this issue is on the second thing: generating a CTS patch.
Specifically, having found a pair of shaders, shader1 and shader2, that are equivalent but are found to expose a wrong image bug, we want to be able to obtain an Amber file that:

Creates to graphics pipelines, pipeline1 and pipeline2 that use shader1 and shader 2, respectively
Runs both pipelines
Asserts that the resulting framebuffers are similar according to a fuzzy diff metric

Amber provides support for running multiple pipelines, and has a root mean square error diff facility thanks to this PR.

Parts to this issue:

[x] Code for generating AmberScript with multiple pipelines. Done in #705
[ ] Code for easily converting a gfauto-style "source directory" to an AmberScript file.

See private repo: examples/swiftshader_wrong_image
Some notes:
We just want to pass the "source directory", instead of having to pass the test.json and shader paths. See the comments in fuzz.py for an attempt to "name" certain files and directories. E.g. the "source directory" contains the test.json file and directories for the variant and reference. test_util.py is attempt to add functions to find these files/directories, but could be improved. We could even consider adding some light-weight classes instead. E.g. TestDir, SourceDir, etc.
But also, feel free to just hard-code source_dir / test_util.TEST_METADATA and
source_dir / test_util.VARIANT_DIR / test_util.SHADER_JOB, etc., as we can refactor these later, if we really want to.
You probably want to extract all code from tool.glsl_shader_job_to_amber_script into a new function, except for the final amberfy( call. The new function just takes a GLSL shader job or a SPIR-V shader job and produces a SPIR-V ASM shader job into a hard-coded location in some work directory (and returns it). Then you can write a new function that takes several shader jobs and produces one AmberScript test. The existing tool.glsl_shader_job_to_amber_script function can keep its current behavior for now, so we can continue fuzzing for crashes.

@paulthomson You mentioned three pipelines. What is the third one besides the reference and the variant?

The third pipeline is another variant: examples/swiftshader_wrong_image/reduced_glsl_with_variant_2/variant_2/
You can assume it will be in variant_2/, next to the test.json.
In terms of where it comes from, it is, in fact, the last, failed reduction step. Thus, it is very similar to the reduced variant, but has one additional transformation removed, and this was not sufficient to reproduce the bug. In some cases, the size of the diff between variant_2 and the variant may be smaller than the difference between the reference and variant. Thus, somebody debugging the issue may prefer to compare the variant and variant_2.

We now want to add support for compute shaders. As with fragment shaders, the Amber test should run each compute shader and store each output to a separate buffer, and then compare the buffers. Note that the compute shaders all use an input/output buffer (the output will clobber the input buffer), but I don't think this will be an issue.

Is there anything else to add to this task?

Fixed by PR #735
Thanks!


Round out the Fund model with UI

Thanks for creating an issue! Please fill out this form so we can be sure to have all the information we need, and to minimize back and forth.

What are we trying to do?

Create a Fund data edit page, restricted to admin editing

What feature or behavior is this required for?
Create a fully fleshed out Fund model - work initially started in #2403

How could we solve this issue? (Not knowing is okay!)
Pretty standard rails, methinks?

Anything else?
@colinxfleming to add any more details or split this up!

yep, let's do this! Some fields on this model are sacred but some are safe to change. I think roughly:

in its own controller/view, permissioned to admin only (Configs is a safe approach to copy)
accessible thru the admin dropdown in the toolbar

let's have the URLs be GET /funds/edit for the form view, and PUT/PATCH /funds for the update action (similar to how users actions are set up). This is because a user session should be scoped to a particular fund as is and there's never a reason to have multiple-fund access like that.
fields that should be editable: full_name, site_domain, phone

Starting on this! Pairing welcome.


docs: README rebrand npm package zeit/ms to ms

Issue
The README document refers in several places to the npm package zeit/ms.
ZEIT is now Vercel describes that a rebranding took place in April 2020.
The GitHub repo link https://github.com/zeit/ms redirects to https://github.com/vercel/ms
The npm repo reports not found for https://www.npmjs.com/package/zeit/ms, whereas https://www.npmjs.com/package/ms links to the current Vercel repo https://github.com/vercel/ms.
Change
Change reference to the npm package zeit/ms to ms.
This is a documentation-only change. The hyperlink targets were already using the up-to-date location https://www.npmjs.com/package/ms.

This fix should also be applied to https://github.com/tcort/link-check


Not enough operators in pool - Make users dislike Keep

I got this error when I tried to mint.
In my opinion this situation should be explained so that the user understands why the transaction fails.
Also, and very important, when you try to do the transaction, you get a warning message in Metamask but you are still able to proceed with the transaction when I think that a mechanism to avoid proceeding should be implemented. The main reason behind my proposal is because the transaction goes through and the user gets UPSET when he/she sees that the BTC address was not created and he/she paid worthless fees. In mainnet fees are high and this situation will discourage users, causing them to go to other BTC briges.
Please see screenshots:

SOLUTION: inform the user that the transaction is not possible and avoid by some mechanism that he/she can start the transaction.

I experienced the same error and feel the same way.
SOLUTION:
If a transaction is not possible, there should be a notice on the initiate deposit page e.g. Not enough Bonded ETH to make a deposit. You can try again in approx...

Hey guys, this is on our radar!

Going to track this in #260, as it's a variation on the same set of errors.


Having trouble getting this plugin up and running

This is the error I'm getting. I've read through this and have tried everything. What am I missing?
3/11/2022, 10:44:18 AMNode Alarm Dot Com BridgeSecurity SystemERRORrefreshDevices Error: GET https://www.alarm.com/web/api/systems/systems/4912840 failed: Two factor is enabled on this account but not setup in the plugin. See the wiki for details
I've gone through and setup two step factor and everything?

Hi Larry,
First, verify you've actually followed the instructions to use MFA from the Wiki so your plugin is properly setup. If you've verified that, please post a censored version of your config.json.

Closing due to inactivity.


conda install spyder=3.3.6 fails in Python 3.5 Environment

conda install spyder=3.3.6
Collecting package metadata (current_repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Collecting package metadata (repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Solving environment: -
Found conflicts! Looking for incompatible packages.
This can take several minutes.  Press CTRL-C to abort.
failed
UnsatisfiableError: The following specifications were found
to be incompatible with the existing python installation in your environment:
Specifications:

spyder=3.3.6 -> python[version='>=2.7,<2.8.0a0|>=3.6,<3.7.0a0|>=3.7,<3.8.0a0']

Your python: python=3.5
If python is on the left-most side of the chain, that's the version you've asked for.
When python appears to the right, that indicates that the thing on the left is somehow
not available for the python version you are constrained to. Note that conda will not
change your python version to a different minor version unless you explicitly specify
that.
I can't fix it because it fails at this step.
Originally posted by @Acetyl-CodeA in https://github.com/spyder-ide/spyder/issues/15670#issuecomment-846257000

Hey @Acetyl-CodeA, thanks for reporting. Unfortunately, there's nothing we can do about this because there are no conda packages available for our 3.3.6 and Python 3.5.
I'm afraid you'll have to create an environment with Python 3.6 for, with the following command
conda create -n py36 python=3.6 spyder=3.3.6

After that, you need to activate your environment and run Spyder after that
conda activate py36
spyder

Please try that and let us know if it works for you.

Thank you so much for your help @ccordoba12 ! (Sorry for the delay in followup)
Unfortunately, I'm using a Python library that is not supported past 3.5 so I can't use 3.6.  Luckily I have Spyder working for my other environment with the latest version of Python, but this won't work for me. Thank you for letting me know that there's not conda packages available! I'll try a different workaround then.
Appreciated,
Acetyl-CodeA

In that case, you can connect a more recent Spyder, installed in another environment, to your Python 3.5 environment by following these instructions:
http://docs.spyder-ide.org/current/faq.html#using-existing-environment

So the issue isn't getting Spyder (as a whole) working it's the kernel that's not working. I can get Spyder's kernels (and everything else) working regardless on the 3.6.8 version but I cannot get the kernels working on the 3.5 version.


Worker instance keep restarting after upgrade to 4.0.0-dev

Bug description
After upgrade to 4.0.0, the workers keeps restarting
How to reproduce the bug
Install helm with this value.yaml
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# Default values for superset.
# This is a YAML-formatted file.
# Declare variables to be passed into your templates.

# A README is automatically generated from this file to document it, using helm-docs (see https://github.com/norwoodj/helm-docs)
# To update it, install helm-docs and run helm-docs from the root of this chart

# -- Provide a name to override the name of the chart
nameOverride: ~
# -- Provide a name to override the full names of resources
fullnameOverride: ~

# -- 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
runAsUser: 0

# -- Specify service account name to be used
serviceAccountName: ~
serviceAccount:
  # -- Create custom service account for Superset. If create: true and serviceAccountName is not provided, `superset.fullname` will be used.
  create: false
  annotations: {}

# -- 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
# @default -- see `values.yaml`
bootstrapScript: |
  #!/bin/bash

  pip install --upgrade pip &&\
  pip install sqlalchemy-bigquery redis \
    pymssql pyodbc pymysql mysql-connector-python holidays==0.32 prophet==1.1.4 authlib

  apt-get update
  apt-get install -y wget zip libodbc2
  wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
  apt-get install -y --no-install-recommends ./google-chrome-stable_current_amd64.deb
  CHROMEVER=$(google-chrome --product-version | grep -o "[^\.]*\.[^\.]*\.[^\.]*")
  DRIVERVER=$(curl -s "https://chromedriver.storage.googleapis.com/LATEST_RELEASE_$CHROMEVER")
  wget "https://storage.googleapis.com/chrome-for-testing-public/124.0.6367.60/linux64/chromedriver-linux64.zip"
  unzip chromedriver-linux64.zip
  ls -la
  chmod +x chromedriver-linux64/chromedriver
  mv chromedriver-linux64/chromedriver /usr/local/bin
  apt-get autoremove -yqq --purge
  apt-get clean
  rm -f google-chrome-stable_current_amd64.deb chromedriver_linux64.zip

  if [ ! -f ~/bootstrap ]; then echo "Running Superset with uid {{ .Values.runAsUser }}" > ~/bootstrap; fi

# -- 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
configFromSecret: '{{ template "superset.fullname" . }}-config'

# -- The name of the secret which we will use to populate env vars in deployed pods
# This can be useful for secret keys, etc.
envFromSecret: '{{ template "superset.fullname" . }}-env'
# -- This can be a list of templated strings
envFromSecrets: []

# -- Extra environment variables that will be passed into pods
extraEnv:
  # Different gunicorn settings, refer to the gunicorn documentation
  # https://docs.gunicorn.org/en/stable/settings.html#
  # These variables are used as Flags at the gunicorn startup
  # https://github.com/apache/superset/blob/master/docker/run-server.sh#L22
  # Extend timeout to allow long running queries.
  GUNICORN_TIMEOUT: 300
  # Increase the gunicorn worker amount, can improve performance drastically
  # See: https://docs.gunicorn.org/en/stable/design.html#how-many-workers
  SERVER_WORKER_AMOUNT: 4
  WORKER_MAX_REQUESTS: 0
  WORKER_MAX_REQUESTS_JITTER: 0
  SERVER_THREADS_AMOUNT: 20
  GUNICORN_KEEPALIVE: 2
  SERVER_LIMIT_REQUEST_LINE: 0
  SERVER_LIMIT_REQUEST_FIELD_SIZE: 0
  SUPERSET_WEBSERVER_PROTOCOL: "http"
  WEBDRIVER_BASEURL_USER_FRIENDLY: "https://company-domain.***.com/"
  SMTP_HOST: "mail.***.com"
  SMTP_PORT: 2525
  SMTP_STARTTLS: 'True'
  SMTP_SSL_SERVER_AUTH: 'True'
  SMTP_SSL: 'False'
  SMTP_USER<EMAIL_ADDRESS>  SMTP_MAIL_FROM<EMAIL_ADDRESS>  EMAIL_REPORTS_SUBJECT_PREFIX: "[*** BI] "

  # OAUTH_HOME_DOMAIN: ..
  # # If a whitelist is not set, any address that can use your OAuth2 endpoint will be able to login.
  # #   this includes any random Gmail address if your OAuth2 Web App is set to External.
  # OAUTH_WHITELIST_REGEX: ...

# -- Extra environment variables in RAW format that will be passed into pods
extraEnvRaw:
  # Load DB password from other secret (e.g. for zalando operator)
  - name: REDIS_PASS
    valueFrom:
      secretKeyRef:
        name: redis
        key: redis-password

# -- Extra environment variables to pass as secrets
extraSecretEnv:
  SMTP_PASSWORD: "***"
  MAPBOX_API_KEY: '***'
  SUPERSET_SECRET_KEY: '***'
  # MAPBOX_API_KEY: ...
  # # Google API Keys: https://console.cloud.google.com/apis/credentials
  # GOOGLE_KEY: ...
  # GOOGLE_SECRET: ...
  #   # Generate your own secret key for encryption. Use openssl rand -base64 42 to generate a good key
  #  SUPERSET_SECRET_KEY: 'CHANGE_ME_TO_A_COMPLEX_RANDOM_SECRET'

# -- Extra files to mount on `/app/pythonpath`
extraConfigs:
  custom_sso_security_manager.py: |
      import logging
      from superset.security import SupersetSecurityManager

      logger = logging.getLogger("azure_ad")

      class CustomSsoSecurityManager(SupersetSecurityManager):
        from flask_appbuilder.security.manager import (AUTH_DB, AUTH_OAUTH)
        def oauth_user_info(self, provider, response=None):
          #In case if userDetail url is nor working case use response attribute to get the user details like name,mail etc
          logger.debug("Oauth2 provider: {0}.".format(provider))
          if provider == 'azure':
              # As example, this line request a GET to base_url + '/' + userDetails with Bearer  Authentication,
              # and expects that authorization server checks the token, and response with user details
              #me = self.appbuilder.sm.oauth_remotes[provider].get('userDetails').data
              #logging.debug("user_data: {0}".format(me))
              #check the values of user_name, mail and others values in me variable
              #return { 'name' : me['User_name'], 'email' : me['mail'], 'id' : me['user_name'], 'username' : me['user_name'], 'first_name':'', 'last_name':''}

              logger.debug("Azure response received : {0}".format(response))
              id_token = response["id_token"]
              logger.debug(str(id_token))
              #logging.debug(" -- oauth user detail -- : {0}".format(self.appbuilder.sm.oauth_remotes[provider].get('userDetails')))
              me = self._decode_and_validate_azure_jwt(id_token)
              logger.debug("Parse JWT token : {0}".format(me))
              return {
                  "name": me.get("name", ""),
                  "email": me["upn"],
                  "first_name": me.get("given_name", ""),
                  "last_name": me.get("family_name", ""),
                  "id": me["unique_name"],
                  "username": me["upn"],
                  "role_keys": me.get("roles", []),
              }
  # import_datasources.yaml: |
  #     databases:
  #     - allow_file_upload: true
  #       allow_ctas: true
  #       allow_cvas: true
  #       database_name: example-db
  #       extra: "{\r\n    \"metadata_params\": {},\r\n    \"engine_params\": {},\r\n    \"\
  #         metadata_cache_timeout\": {},\r\n    \"schemas_allowed_for_file_upload\": []\r\n\
  #         }"
  #       sqlalchemy_uri: example://example-db.local
  #       tables: []

# -- Extra files to mount on `/app/pythonpath` as secrets
extraSecrets: {}

extraVolumes:
  - name: v
    configMap:
      name: v
      items:
      - key: k
        path: v
  # - name: customConfig
  #   configMap:
  #     name: '{{ template "superset.fullname" . }}-custom-config'
  # - name: additionalSecret
  #   secret:
  #     secretName: my-secret
  #     defaultMode: 0600

extraVolumeMounts:
  - name: v
    mountPath: /tmp
    subPath: v
    readOnly: true
  # - name: customConfig
  #   mountPath: /mnt/config
  #   readOnly: true
  # - name: additionalSecret:
  #   mountPath: /mnt/secret

# -- 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
configOverrides:
  feature_flags: |
    import ast

    FEATURE_FLAGS = {
        "ALERT_REPORTS": True
    }

    SMTP_HOST = os.getenv("SMTP_HOST","localhost")
    SMTP_STARTTLS = ast.literal_eval(os.getenv("SMTP_STARTTLS", "True"))
    SMTP_SSL = ast.literal_eval(os.getenv("SMTP_SSL", "False"))
    SMTP_USER = os.getenv("SMTP_USER","superset")
    SMTP_PORT = os.getenv("SMTP_PORT",25)
    SMTP_PASSWORD = os.getenv("SMTP_PASSWORD","superset")
    SMTP_MAIL_FROM =<EMAIL_ADDRESS>    ALERT_REPORTS_NOTIFICATION_DRY_RUN = ast.literal_eval(os.getenv("ALERT_REPORTS_NOTIFICATION_DRY_RUN","False"))

    SLACK_API_TOKEN = os.getenv("SLACK_API_TOKEN",None)
  celery_conf: |
    from celery.schedules import crontab

    class CeleryConfig:
      broker_url = f"redis://:{env('REDIS_PASS')}@{env('REDIS_HOST')}:{env('REDIS_PORT')}/0"
      imports = (
          "superset.sql_lab",
          "superset.tasks.cache",
          "superset.tasks.scheduler",
      )
      result_backend = f"redis://:{env('REDIS_PASS')}@{env('REDIS_HOST')}:{env('REDIS_PORT')}/0"
      worker_prefetch_multiplier = 10
      task_acks_late = True
      task_annotations = {
          "sql_lab.get_sql_results": {
              "rate_limit": "100/s",
          },
      }
      beat_schedule = {
          "reports.scheduler": {
              "task": "reports.scheduler",
              "schedule": crontab(minute="*", hour="*"),
          },
          "reports.prune_log": {
              "task": "reports.prune_log",
              'schedule': crontab(minute=0, hour=0),
          },
          'cache-warmup-hourly': {
              "task": "cache-warmup",
              "schedule": crontab(minute="*/30", hour="*"),
              "kwargs": {
                  "strategy_name": "top_n_dashboards",
                  "top_n": 10,
                  "since": "7 days ago",
              },
          }
      }

    CELERY_CONFIG = CeleryConfig

  cache_config: |
    from superset.tasks.types import ExecutorType

    FILTER_CACHE_REDIS_URL = f"{REDIS_BASE_URL}/{env('REDIS_DB', 2)}{REDIS_URL_PARAMS}"

    FILTER_STATE_CACHE_CONFIG = {
          'CACHE_TYPE': 'RedisCache',
          'CACHE_DEFAULT_TIMEOUT': 24*60*60,
          'CACHE_KEY_PREFIX': 'superset_filter_state',
          'CACHE_REDIS_URL': FILTER_CACHE_REDIS_URL,
    }

    THUMBNAIL_CACHE_REDIS_URL = f"{REDIS_BASE_URL}/{env('REDIS_DB', 3)}{REDIS_URL_PARAMS}"

    THUMBNAIL_CACHE_CONFIG = {
          'CACHE_TYPE': 'RedisCache',
          'CACHE_DEFAULT_TIMEOUT': 24*60*60*7,
          'CACHE_KEY_PREFIX': 'thumbnail_',
          'CACHE_REDIS_URL': THUMBNAIL_CACHE_REDIS_URL,
    }

    THUMBNAIL_SELENIUM_USER = "admin"
    THUMBNAIL_EXECUTE_AS = [ExecutorType.SELENIUM]

  reports: |
    EMAIL_PAGE_RENDER_WAIT = 60
    WEBDRIVER_BASEURL = "http://{{ template "superset.fullname" . }}:{{ .Values.service.port }}/"
    WEBDRIVER_BASEURL_USER_FRIENDLY = os.getenv("WEBDRIVER_BASEURL_USER_FRIENDLY", "https://www.example.com/")
    WEBDRIVER_TYPE= "chrome"
    WEBDRIVER_OPTION_ARGS = [
        "--force-device-scale-factor=2.0",
        "--high-dpi-support=2.0",
        "--headless",
        "--disable-gpu",
        "--disable-dev-shm-usage",
        # This is required because our process runs as root (in order to install pip packages)
        "--no-sandbox",
        "--disable-setuid-sandbox",
        "--disable-extensions",
    ]

    SCREENSHOT_LOCATE_WAIT = 100
    SCREENSHOT_LOAD_WAIT = 1200

    from superset.utils.urls import headless_url
    from superset.utils.machine_auth import MachineAuthProvider

    def auth_driver(driver, user):
        # Setting cookies requires doing a request first, but /login is redirected to oauth provider, and stuck there.
        driver.get(headless_url("/doesnotexist"))

        cookies = MachineAuthProvider.get_auth_cookies(user)

        for cookie_name, cookie_val in cookies.items():
            driver.add_cookie(dict(name=cookie_name, value=cookie_val))

        return driver

    WEBDRIVER_AUTH_FUNC = auth_driver
  extend_timeout: |
     # Extend timeout to allow long running queries.
     SUPERSET_WEBSERVER_TIMEOUT = 300
  enable_oauth: |
    import sys
    sys.path.append('/app/configs/')
    print (sys.path)
    from flask_appbuilder.security.manager import AUTH_OAUTH
    from custom_sso_security_manager import CustomSsoSecurityManager

    CUSTOM_SECURITY_MANAGER = CustomSsoSecurityManager # For managing User data after fetching from SSO app

    AUTH_TYPE = AUTH_OAUTH
    OAUTH_PROVIDERS = [
      {
        'name':'azure',
          'token_key':'access_token', # Name of the token in the response of access_token_url
          'icon':'fa-address-card',   # Icon for the provider
          'remote_app': {
              'client_id':'***',  # Client Id (Identify Superset application)
              'client_secret':'***', # Secret for this Client Id (Identify Superset application)
              'client_kwargs':{
                  'scope': 'User.read name preferred_username email profile upn groups'               # Scope for the Authorization
              },
              'access_token_method':'POST',    # HTTP Method to call access_token_url
              #'access_token_params':{        # Additional parameters for calls to access_token_url
              #    'client_id':'myClientId'
              #},
              #'jwks_uri':'https://myAuthorizationServe/adfs/discovery/keys', # may be required to generate token
              #'access_token_headers':{    # Additional headers for calls to access_token_url
              #    'Authorization': 'Basic Base64EncodedClientIdAndSecret'
              #},
              'api_base_url':'https://login.microsoftonline.com/***/oauth2',
              'access_token_url':'https://login.microsoftonline.com/***/oauth2/token',
              'authorize_url':'https://login.microsoftonline.com/***/oauth2/authorize'
          }
      }
    ]
    AUTH_ROLE_PUBLIC = 'Public'
    AUTH_USER_REGISTRATION = True

  additional_config: |
    APP_NAME = '*** BI'
    APP_ICON = "/static/assets/images/logo.png"
    APP_ICON_WIDTH = 200
    LOGO_TARGET_PATH = '/'
    LOGO_TOOLTIP = '*** BI'

    SUPERSET_WEBSERVER_PROTOCOL = os.getenv("SUPERSET_WEBSERVER_PROTOCOL","https")
    EMAIL_REPORTS_SUBJECT_PREFIX = os.getenv("EMAIL_REPORTS_SUBJECT_PREFIX","*** BI] ")
    ENABLE_PROXY_FIX = True
    RATELIMIT_ENABLED = False
    AUTH_RATE_LIMITED = False
    DEFAULT_FEATURE_FLAGS: dict[str, bool] = {
        "CLIENT_CACHE": False,  # deprecated
        "DISABLE_DATASET_SOURCE_EDIT": False,  # deprecated
        "DRUID_JOINS": False,
        "DYNAMIC_PLUGINS": False,
        "DISABLE_LEGACY_DATASOURCE_EDITOR": True,
        "ENABLE_EXPLORE_JSON_CSRF_PROTECTION": False,  # deprecated
        "ENABLE_TEMPLATE_PROCESSING": False,
        "ENABLE_TEMPLATE_REMOVE_FILTERS": True,  # deprecated
        "ENABLE_JAVASCRIPT_CONTROLS": False,
        "KV_STORE": True,
        "PRESTO_EXPAND_DATA": False,
        "THUMBNAILS": True,
        "THUMBNAILS_SQLA_LISTENERS": True,
        "DASHBOARD_CACHE": False,  # deprecated
        "REMOVE_SLICE_LEVEL_LABEL_COLORS": False,  # deprecated
        "SHARE_QUERIES_VIA_KV_STORE": True,
        "TAGGING_SYSTEM": True,
        "SQLLAB_BACKEND_PERSISTENCE": True,
        "LISTVIEWS_DEFAULT_CARD_VIEW": False,
        "ESCAPE_MARKDOWN_HTML": False,
        "DASHBOARD_NATIVE_FILTERS": True,  # deprecated
        "DASHBOARD_CROSS_FILTERS": True,
        "DASHBOARD_NATIVE_FILTERS_SET": False,  # deprecated
        "DASHBOARD_FILTERS_EXPERIMENTAL": False,  # deprecated
        "DASHBOARD_VIRTUALIZATION": False,
        "GLOBAL_ASYNC_QUERIES": False,
        "VERSIONED_EXPORT": True,  # deprecated
        "EMBEDDED_SUPERSET": False,
        "ALERT_REPORTS": True,
        "DASHBOARD_RBAC": True,
        "ENABLE_EXPLORE_DRAG_AND_DROP": True,  # deprecated
        "ENABLE_ADVANCED_DATA_TYPES": True,
        "ALERTS_ATTACH_REPORTS": True,
        "ALLOW_FULL_CSV_EXPORT": True,
        "GENERIC_CHART_AXES": True,  # deprecated
        "ALLOW_ADHOC_SUBQUERY": True,
        "USE_ANALAGOUS_COLORS": False,
        "RLS_IN_SQLLAB": False,
        "CACHE_IMPERSONATION": False,
        "CACHE_QUERY_BY_USER": True,
        "EMBEDDABLE_CHARTS": True,
        "DRILL_TO_DETAIL": True,
        "DRILL_BY": True,
        "DATAPANEL_CLOSED_BY_DEFAULT": False,
        "HORIZONTAL_FILTER_BAR": True,
        "ESTIMATE_QUERY_COST": False,
        "SSH_TUNNELING": False,
        "AVOID_COLORS_COLLISION": True,
        "MENU_HIDE_USER_INFO": False,
        "ENABLE_SUPERSET_META_DB": True,
        "PLAYWRIGHT_REPORTS_AND_THUMBNAILS": False,
    }
  # extend_timeout: |
  #    # Extend timeout to allow long running queries.
  #    SUPERSET_WEBSERVER_TIMEOUT = ...
  # enable_oauth: |
  #   from flask_appbuilder.security.manager import (AUTH_DB, AUTH_OAUTH)
  #   AUTH_TYPE = AUTH_OAUTH
  #   OAUTH_PROVIDERS = [
  #       {
  #           "name": "google",
  #           "whitelist": [ os.getenv("OAUTH_WHITELIST_REGEX", "") ],
  #           "icon": "fa-google",
  #           "token_key": "access_token",
  #           "remote_app": {
  #               "client_id": os.environ.get("GOOGLE_KEY"),
  #               "client_secret": os.environ.get("GOOGLE_SECRET"),
  #               "api_base_url": "https://www.googleapis.com/oauth2/v2/",
  #               "client_kwargs": {"scope": "email profile"},
  #               "request_token_url": None,
  #               "access_token_url": "https://accounts.google.com/o/oauth2/token",
  #               "authorize_url": "https://accounts.google.com/o/oauth2/auth",
  #               "authorize_params": {"hd": os.getenv("OAUTH_HOME_DOMAIN", "")}
  #           }
  #       }
  #   ]
  #   # Map Authlib roles to superset roles
  #   AUTH_ROLE_ADMIN = 'Admin'
  #   AUTH_ROLE_PUBLIC = 'Public'
  #   # Will allow user self registration, allowing to create Flask users from Authorized User
  #   AUTH_USER_REGISTRATION = True
  #   # The default user self registration role
  #   AUTH_USER_REGISTRATION_ROLE = "Admin"
  # secret: |
  #   # Generate your own secret key for encryption. Use `openssl rand -base64 42` to generate a good key
  #   SECRET_KEY = 'CHANGE_ME_TO_A_COMPLEX_RANDOM_SECRET'

# -- Same as above but the values are files
configOverridesFiles: {}
  # extend_timeout: extend_timeout.py
  # enable_oauth: enable_oauth.py

configMountPath: "/app/pythonpath"

extraConfigMountPath: "/app/configs"

image:
  repository: apachesuperset.docker.scarf.sh/apache/superset
  tag: 4.0.0-dev
  pullPolicy: Always

imagePullSecrets: []

initImage:
  repository: apache/superset
  tag: dockerize
  pullPolicy: Always

service:
  type: ClusterIP
  port: 8088
  annotations: {}
    # cloud.google.com/load-balancer-type: "Internal"
  loadBalancerIP: ~
  nodePort:
    # -- (int)
    http: nil

ingress:
  enabled: true
  ingressClassName: "public"
  annotations:
    kubernetes.io/tls-acme: "true"
    ## Extend timeout to allow long running queries.
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "300"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "300"
    nginx.ingress.kubernetes.io/client_max_body_size : "50m"
    nginx.ingress.kubernetes.io/client-body-buffer-size: "50m"
    nginx.ingress.kubernetes.io/proxy-body-size: "50m"
    # kubernetes.io/tls-acme: "true"
    ## Extend timeout to allow long running queries.
    # nginx.ingress.kubernetes.io/proxy-connect-timeout: "300"
    # nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
    # nginx.ingress.kubernetes.io/proxy-send-timeout: "300"
  path: /
  pathType: ImplementationSpecific
  hosts:
    - ***.com
  tls:
    - hosts:
        - ***.com
      secretName: ***.com-tls
  extraHostsRaw: []
  #  - secretName: chart-example-tls
  #    hosts:
  #      - chart-example.local

resources: {}
  # We usually recommend not to specify default resources and to leave this as a conscious
  # choice for the user. This also increases chances charts run on environments with little
  # resources, such as Minikube. If you do want to specify resources, uncomment the following
  # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
  # The limits below will apply to all Superset components. To set individual resource limitations refer to the pod specific values below.
  # The pod specific values will overwrite anything that is set here.
  # limits:
  #   cpu: 100m
  #   memory: 128Mi
  # requests:
  #   cpu: 100m
  #   memory: 128Mi

# -- Custom hostAliases for all superset pods
## https://kubernetes.io/docs/tasks/network/customize-hosts-file-for-pods/
hostAliases: []
# - hostnames:
#   - nodns.my.lan
#   ip: <IP_ADDRESS>

# Superset node configuration
supersetNode:
  replicaCount: 1
  autoscaling:
    enabled: false
    minReplicas: 1
    maxReplicas: 100
    targetCPUUtilizationPercentage: 80
    # targetMemoryUtilizationPercentage: 80
  # -- Sets the [pod disruption budget](https://kubernetes.io/docs/tasks/run-application/configure-pdb/) for supersetNode pods
  podDisruptionBudget:
    # -- Whether the pod disruption budget should be created
    enabled: false
    # -- If set, maxUnavailable must not be set - see https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget
    minAvailable: 1
    # -- If set, minAvailable must not be set - see https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget
    maxUnavailable: 1

  # -- Startup command
  # @default -- See `values.yaml`
  command:
    - "/bin/sh"
    - "-c"
    - ". {{ .Values.configMountPath }}/superset_bootstrap.sh; /usr/bin/run-server.sh"
  connections:
    # -- Change in case of bringing your own redis and then also set redis.enabled:false
    redis_host: 'redis-***'
    redis_port: "6379"
    redis_user: ""
    redis_password: ***
    redis_cache_db: "1"
    redis_celery_db: "0"
    # Or SSL port is usually 6380
    # Update following for using Redis with SSL
    redis_ssl:
      enabled: false
      ssl_cert_reqs: CERT_NONE
    # You need to change below configuration incase bringing own PostgresSQL instance and also set postgresql.enabled:false
    db_host: 'postgresql-***'
    db_port: "5432"
    db_user: ***
    db_pass: "***"
    db_name: ***
  env: {}
  # -- If true, forces deployment to reload on each upgrade
  forceReload: true
  # -- Init containers
  # @default -- a container waiting for postgres
  initContainers:
    - name: wait-for-postgres
      image: "{{ .Values.initImage.repository }}:{{ .Values.initImage.tag }}"
      imagePullPolicy: "{{ .Values.initImage.pullPolicy }}"
      envFrom:
        - secretRef:
            name: "{{ tpl .Values.envFromSecret . }}"
      command:
        - /bin/sh
        - -c
        - dockerize -wait "tcp://$DB_HOST:$DB_PORT" -timeout 120s

  # -- Launch additional containers into supersetNode pod
  extraContainers: []
  # -- Annotations to be added to supersetNode deployment
  deploymentAnnotations: {}
  # -- Labels to be added to supersetNode deployment
  deploymentLabels: {}
  # -- Affinity to be added to supersetNode deployment
  affinity: {}
  # -- TopologySpreadConstrains to be added to supersetNode deployments
  topologySpreadConstraints: []
  # -- Annotations to be added to supersetNode pods
  podAnnotations: {}
  # -- Labels to be added to supersetNode pods
  podLabels: {}
  startupProbe:
    httpGet:
      path: /health
      port: http
    initialDelaySeconds: 15
    timeoutSeconds: 1
    failureThreshold: 60
    periodSeconds: 5
    successThreshold: 1
  livenessProbe:
    httpGet:
      path: /health
      port: http
    initialDelaySeconds: 15
    timeoutSeconds: 1
    failureThreshold: 3
    periodSeconds: 15
    successThreshold: 1
  readinessProbe:
    httpGet:
      path: /health
      port: http
    initialDelaySeconds: 15
    timeoutSeconds: 1
    failureThreshold: 3
    periodSeconds: 15
    successThreshold: 1
  # -- Resource settings for the supersetNode pods - these settings overwrite might existing values from the global resources object defined above.
  resources: {}
    # limits:
    #  cpu: 100m
    #  memory: 128Mi
    # requests:
    #  cpu: 100m
    #  memory: 128Mi
  podSecurityContext: {}
  containerSecurityContext: {}
  strategy: {}
    # type: RollingUpdate
    # rollingUpdate:
    #   maxSurge: 25%
    #   maxUnavailable: 25%

# Superset Celery worker configuration
supersetWorker:
  replicaCount: 5
  autoscaling:
    enabled: false
    minReplicas: 1
    maxReplicas: 100
    targetCPUUtilizationPercentage: 80
    # targetMemoryUtilizationPercentage: 80
  # -- Sets the [pod disruption budget](https://kubernetes.io/docs/tasks/run-application/configure-pdb/) for supersetWorker pods
  podDisruptionBudget:
    # -- Whether the pod disruption budget should be created
    enabled: false
    # -- If set, maxUnavailable must not be set - see https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget
    minAvailable: 1
    # -- If set, minAvailable must not be set - see https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget
    maxUnavailable: 1
  # -- Worker startup command
  # @default -- a `celery worker` command
  command:
    - "/bin/sh"
    - "-c"
    - ". {{ .Values.configMountPath }}/superset_bootstrap.sh; celery --app=superset.tasks.celery_app:app worker"
  # -- If true, forces deployment to reload on each upgrade
  forceReload: true
  # -- Init container
  # @default -- a container waiting for postgres and redis
  initContainers:
    - name: wait-for-postgres-redis
      image: "{{ .Values.initImage.repository }}:{{ .Values.initImage.tag }}"
      imagePullPolicy: "{{ .Values.initImage.pullPolicy }}"
      envFrom:
        - secretRef:
            name: "{{ tpl .Values.envFromSecret . }}"
      command:
        - /bin/sh
        - -c
        - dockerize -wait "tcp://$DB_HOST:$DB_PORT" -wait "tcp://$REDIS_HOST:$REDIS_PORT" -timeout 120s
  # -- Launch additional containers into supersetWorker pod
  extraContainers: []
  # -- Annotations to be added to supersetWorker deployment
  deploymentAnnotations: {}
  # -- Labels to be added to supersetWorker deployment
  deploymentLabels: {}
  # -- Affinity to be added to supersetWorker deployment
  affinity: {}
  # -- TopologySpreadConstrains to be added to supersetWorker deployments
  topologySpreadConstraints: []
  # -- Annotations to be added to supersetWorker pods
  podAnnotations: {}
  # -- Labels to be added to supersetWorker pods
  podLabels: {}
  # -- Resource settings for the supersetWorker pods - these settings overwrite might existing values from the global resources object defined above.
  resources: {}
    # limits:
    #  cpu: 100m
    #  memory: 128Mi
    # requests:
    #  cpu: 100m
    #  memory: 128Mi
  podSecurityContext: {}
  containerSecurityContext: {}
  strategy: {}
    # type: RollingUpdate
    # rollingUpdate:
    #   maxSurge: 25%
    #   maxUnavailable: 25%
  livenessProbe:
    exec:
      # -- Liveness probe command
      # @default -- a `celery inspect ping` command
      command:
        - sh
        - -c
        - celery -A superset.tasks.celery_app:app inspect ping -d celery@$HOSTNAME
    initialDelaySeconds: 120
    timeoutSeconds: 60
    failureThreshold: 3
    periodSeconds: 60
    successThreshold: 1
  # -- No startup/readiness probes by default since we don't really care about its startup time (it doesn't serve traffic)
  startupProbe: {}
  # -- No startup/readiness probes by default since we don't really care about its startup time (it doesn't serve traffic)
  readinessProbe: {}

# Superset beat configuration (to trigger scheduled jobs like reports)
supersetCeleryBeat:
  # -- This is only required if you intend to use alerts and reports
  enabled: true
  # -- Sets the [pod disruption budget](https://kubernetes.io/docs/tasks/run-application/configure-pdb/) for supersetCeleryBeat pods
  podDisruptionBudget:
    # -- Whether the pod disruption budget should be created
    enabled: false
    # -- If set, maxUnavailable must not be set - see https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget
    minAvailable: 1
    # -- If set, minAvailable must not be set - see https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget
    maxUnavailable: 1
  # -- Command
  # @default -- a `celery beat` command
  command:
    - "/bin/sh"
    - "-c"
    - ". {{ .Values.configMountPath }}/superset_bootstrap.sh; celery --app=superset.tasks.celery_app:app beat --pidfile /tmp/celerybeat.pid --schedule /tmp/celerybeat-schedule"
  # -- If true, forces deployment to reload on each upgrade
  forceReload: false
  # -- List of init containers
  # @default -- a container waiting for postgres
  initContainers:
    - name: wait-for-postgres-redis
      image: "{{ .Values.initImage.repository }}:{{ .Values.initImage.tag }}"
      imagePullPolicy: "{{ .Values.initImage.pullPolicy }}"
      envFrom:
        - secretRef:
            name: "{{ tpl .Values.envFromSecret . }}"
      command:
        - /bin/sh
        - -c
        - dockerize -wait "tcp://$DB_HOST:$DB_PORT" -wait "tcp://$REDIS_HOST:$REDIS_PORT" -timeout 120s
  # -- Launch additional containers into supersetCeleryBeat pods
  extraContainers: []
  # -- Annotations to be added to supersetCeleryBeat deployment
  deploymentAnnotations: {}
  # -- Affinity to be added to supersetCeleryBeat deployment
  affinity: {}
  # -- TopologySpreadConstrains to be added to supersetCeleryBeat deployments
  topologySpreadConstraints: []
  # -- Annotations to be added to supersetCeleryBeat pods
  podAnnotations: {}
  # -- Labels to be added to supersetCeleryBeat pods
  podLabels: {}
  # -- Resource settings for the CeleryBeat pods - these settings overwrite might existing values from the global resources object defined above.
  resources: {}
    # limits:
    #  cpu: 100m
    #  memory: 128Mi
    # requests:
    #  cpu: 100m
    #  memory: 128Mi
  podSecurityContext: {}
  containerSecurityContext: {}

supersetCeleryFlower:
  # -- 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
  enabled: false
  replicaCount: 1
  # -- Sets the [pod disruption budget](https://kubernetes.io/docs/tasks/run-application/configure-pdb/) for supersetCeleryFlower pods
  podDisruptionBudget:
    # -- Whether the pod disruption budget should be created
    enabled: false
    # -- If set, maxUnavailable must not be set - see https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget
    minAvailable: 1
    # -- If set, minAvailable must not be set - see https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget
    maxUnavailable: 1
  # -- Command
  # @default -- a `celery flower` command
  command:
    - "/bin/sh"
    - "-c"
    - "pip install redis authlib flower && celery --app=superset.tasks.celery_app:app flower"
  service:
    type: ClusterIP
    annotations: {}
    loadBalancerIP: ~
    port: 5555
    nodePort:
      # -- (int)
      http: nil
  startupProbe:
    httpGet:
      path: /api/workers
      port: flower
    initialDelaySeconds: 5
    timeoutSeconds: 1
    failureThreshold: 60
    periodSeconds: 5
    successThreshold: 1
  livenessProbe:
    httpGet:
      path: /api/workers
      port: flower
    initialDelaySeconds: 5
    timeoutSeconds: 1
    failureThreshold: 3
    periodSeconds: 5
    successThreshold: 1
  readinessProbe:
    httpGet:
      path: /api/workers
      port: flower
    initialDelaySeconds: 5
    timeoutSeconds: 1
    failureThreshold: 3
    periodSeconds: 5
    successThreshold: 1
  # -- List of init containers
  # @default -- a container waiting for postgres and redis
  initContainers:
    - name: wait-for-postgres-redis
      image: "{{ .Values.initImage.repository }}:{{ .Values.initImage.tag }}"
      imagePullPolicy: "{{ .Values.initImage.pullPolicy }}"
      envFrom:
        - secretRef:
            name: "{{ tpl .Values.envFromSecret . }}"
      command:
        - /bin/sh
        - -c
        - dockerize -wait "tcp://$DB_HOST:$DB_PORT" -wait "tcp://$REDIS_HOST:$REDIS_PORT" -timeout 120s
  # -- Launch additional containers into supersetCeleryFlower pods
  extraContainers: []
  # -- Annotations to be added to supersetCeleryFlower deployment
  deploymentAnnotations: {}
  # -- Affinity to be added to supersetCeleryFlower deployment
  affinity: {}
  # -- TopologySpreadConstrains to be added to supersetCeleryFlower deployments
  topologySpreadConstraints: []
  # -- Annotations to be added to supersetCeleryFlower pods
  podAnnotations: {}
  # -- Labels to be added to supersetCeleryFlower pods
  podLabels: {}
  # -- Resource settings for the CeleryBeat pods - these settings overwrite might existing values from the global resources object defined above.
  resources: {}
    # limits:
    #  cpu: 100m
    #  memory: 128Mi
    # requests:
    #  cpu: 100m
    #  memory: 128Mi
  podSecurityContext: {}
  containerSecurityContext: {}

supersetWebsockets:
  # -- 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
  enabled: false
  replicaCount: 1
  # -- Sets the [pod disruption budget](https://kubernetes.io/docs/tasks/run-application/configure-pdb/) for supersetWebsockets pods
  podDisruptionBudget:
    # -- Whether the pod disruption budget should be created
    enabled: false
    # -- If set, maxUnavailable must not be set - see https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget
    minAvailable: 1
    # -- If set, minAvailable must not be set - see https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget
    maxUnavailable: 1
  ingress:
    path: /ws
    pathType: Prefix
  image:
    # -- There is no official image (yet), this one is community-supported
    repository: oneacrefund/superset-websocket
    tag: latest
    pullPolicy: IfNotPresent
  # -- 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
  # @default -- see `values.yaml`
  config:
    {
      "port": 8080,
      "logLevel": "debug",
      "logToFile": false,
      "logFilename": "app.log",
      "statsd": { "host": "<IP_ADDRESS>", "port": 8125, "globalTags": [] },
      "redis":
        {
          "port": 6379,
          "host": "<IP_ADDRESS>",
          "password": "",
          "db": 0,
          "ssl": false,
        },
      "redisStreamPrefix": "async-events-",
      "jwtSecret": "CHANGE-ME",
      "jwtCookieName": "async-token",
    }
  service:
    type: ClusterIP
    annotations: {}
    loadBalancerIP: ~
    port: 8080
    nodePort:
      # -- (int)
      http: nil
  command: []
  resources: {}
  # -- Launch additional containers into supersetWebsockets pods
  extraContainers: []
  deploymentAnnotations: {}
  # -- Affinity to be added to supersetWebsockets deployment
  affinity: {}
  # -- TopologySpreadConstrains to be added to supersetWebsockets deployments
  topologySpreadConstraints: []
  podAnnotations: {}
  podLabels: {}
  strategy: {}
  podSecurityContext: {}
  containerSecurityContext: {}
  startupProbe:
    httpGet:
      path: /health
      port: ws
    initialDelaySeconds: 5
    timeoutSeconds: 1
    failureThreshold: 60
    periodSeconds: 5
    successThreshold: 1
  livenessProbe:
    httpGet:
      path: /health
      port: ws
    initialDelaySeconds: 5
    timeoutSeconds: 1
    failureThreshold: 3
    periodSeconds: 5
    successThreshold: 1
  readinessProbe:
    httpGet:
      path: /health
      port: ws
    initialDelaySeconds: 5
    timeoutSeconds: 1
    failureThreshold: 3
    periodSeconds: 5
    successThreshold: 1

init:
  # Configure resources
  # Warning: fab command consumes a lot of ram and can
  # cause the process to be killed due to OOM if it exceeds limit
  # Make sure you are giving a strong password for the admin user creation( else make sure you are changing after setup)
  # Also change the admin email to your own custom email.
  resources: {}
    # limits:
    #   cpu:
    #   memory:
    # requests:
    #   cpu:
    #   memory:
  # -- Command
  # @default -- a `superset_init.sh` command
  command:
    - "/bin/sh"
    - "-c"
    - ". {{ .Values.configMountPath }}/superset_bootstrap.sh; . {{ .Values.configMountPath }}/superset_init.sh"
  enabled: false
  jobAnnotations:
    "helm.sh/hook": post-install,post-upgrade
    "helm.sh/hook-delete-policy": "before-hook-creation"
  loadExamples: false
  createAdmin: false
  adminUser:
    username: ***
    firstname: ***
    lastname: ***
    email: ***
    password: ***
  # -- List of initContainers
  # @default -- a container waiting for postgres
  initContainers:
    - name: wait-for-postgres
      image: "{{ .Values.initImage.repository }}:{{ .Values.initImage.tag }}"
      imagePullPolicy: "{{ .Values.initImage.pullPolicy }}"
      envFrom:
        - secretRef:
            name: "{{ tpl .Values.envFromSecret . }}"
      command:
        - /bin/sh
        - -c
        - dockerize -wait "tcp://$DB_HOST:$DB_PORT" -timeout 120s
  # -- A Superset init script
  # @default -- a script to create admin user and initialize roles
  initscript: |-
    #!/bin/sh
    pip install holidays==0.23
    set -eu
    echo "Upgrading DB schema..."
    superset db upgrade
    echo "Initializing roles..."
    superset init
    {{ if .Values.init.createAdmin }}
    echo "Creating admin user..."
    superset fab create-admin \
                    --username {{ .Values.init.adminUser.username }} \
                    --firstname {{ .Values.init.adminUser.firstname }} \
                    --lastname {{ .Values.init.adminUser.lastname }} \
                    --email {{ .Values.init.adminUser.email }} \
                    --password {{ .Values.init.adminUser.password }} \
                    || true
    {{- end }}
    {{ if .Values.init.loadExamples }}
    echo "Loading examples..."
    superset load_examples
    {{- end }}
    if [ -f "{{ .Values.extraConfigMountPath }}/import_datasources.yaml" ]; then
      echo "Importing database connections.... "
      superset import_datasources -p {{ .Values.extraConfigMountPath }}/import_datasources.yaml
    fi
  # -- Launch additional containers into init job pod
  extraContainers: []
  ## Annotations to be added to init job pods
  podAnnotations: {}
  podSecurityContext: {}
  containerSecurityContext: {}
  ## Tolerations to be added to init job pods
  tolerations: []
  ## Affinity to be added to init job pods
  affinity: {}
  # -- TopologySpreadConstrains to be added to init job
  topologySpreadConstraints: []

# -- Configuration values for the postgresql dependency.
# ref: https://github.com/bitnami/charts/tree/main/bitnami/postgresql
# @default -- see `values.yaml`
postgresql:
  ##
  ## Use the PostgreSQL chart dependency.
  ## Set to false if bringing your own PostgreSQL.
  enabled: false

  ## Authentication parameters
  auth:
    ## The name of an existing secret that contains the postgres password.
    existingSecret:
    ## PostgreSQL name for a custom user to create
    username: ***
    ## PostgreSQL password for the custom user to create. Ignored if `auth.existingSecret` with key `password` is provided
    password: ***
    ## PostgreSQL name for a custom database to create
    database: ***

  image:
    tag: "14.6.0-debian-11-r13"

  ## PostgreSQL Primary parameters
  primary:
    ##
    ## Persistent Volume Storage configuration.
    ## ref: https://kubernetes.io/docs/user-guide/persistent-volumes
    persistence:
      ##
      ## Enable PostgreSQL persistence using Persistent Volume Claims.
      enabled: true
      ##
      ## Persistent class
      # storageClass: classname
      ##
      ## Access modes:
      accessModes:
        - ReadWriteOnce
    ## PostgreSQL port
    service:
      ports:
        postgresql: "5432"

# -- 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
# @default -- see `values.yaml`
redis:
  ##
  ## Use the redis chart dependency.
  ##
  ## If you are bringing your own redis, you can set the host in supersetNode.connections.redis_host
  ##
  ## Set to false if bringing your own redis.
  enabled: false
  ##
  ## Set architecture to standalone/replication
  architecture: standalone
  ##
  ## Auth configuration:
  ##
  auth:
    ## Enable password authentication
    enabled: false
    ## The name of an existing secret that contains the redis password.
    existingSecret: ""
    ## Name of the key containing the secret.
    existingSecretKey: ""
    ## Redis password
    password: ***
  ##
  ## Master configuration
  ##
  master:
    ##
    ## Image configuration
    # image:
    ##
    ## docker registry secret names (list)
    # pullSecrets: nil
    ##
    ## Configure persistance
    persistence:
      ##
      ## Use a PVC to persist data.
      enabled: false
      ##
      ## Persistent class
      # storageClass: classname
      ##
      ## Access mode:
      accessModes:
        - ReadWriteOnce

nodeSelector: {}

tolerations: []

affinity: {}

# -- TopologySpreadConstrains to be added to all deployments
topologySpreadConstraints: []

Screenshots/recordings
Logs from the worker pod
logging was configured successfully
2024-05-13 02:26:25,220:INFO:superset.utils.logging_configurator:logging was configured successfully
2024-05-13 02:26:25,222:INFO:root:Configured event logger of type <class 'superset.utils.log.DBEventLogger'>
2024-05-13 02:26:26,655:DEBUG:celery.utils.functional:
def chord(self, header, body, partial_args=0, interval=1, countdown=2, max_retries=3, eager=4, **kwargs):
    return 1
                                                                                2024-05-13 02:26:26,655:DEBUG:celery.utils.functional:
def accumulate(self, *args, **kwargs):
    return 1

2024-05-13 02:26:26,656:DEBUG:celery.utils.functional:
def cache_chart_thumbnail(current_user, chart_id, force=0, window_size=1, thumb_size=2):
    return 1

2024-05-13 02:26:26,656:DEBUG:celery.utils.functional:
def execute(self, report_schedule_id):
    return 1
                                                                                2024-05-13 02:26:26,656:DEBUG:celery.utils.functional:
def unlock_chord(self, group_id, callback, interval=0, max_retries=1, result=2, Result=3, GroupResult=4, result_from_tuple=5, **kwargs):
    return 1

2024-05-13 02:26:26,656:DEBUG:celery.utils.functional:
def backend_cleanup():
    return 1

2024-05-13 02:26:26,657:DEBUG:celery.utils.functional:
def cache_dashboard_thumbnail(current_user, dashboard_id, force=0, thumb_size=1):
    return 1

2024-05-13 02:26:26,657:DEBUG:celery.utils.functional:
def xmap(task, it):
    return 1
                                                                                2024-05-13 02:26:26,657:DEBUG:celery.utils.functional:
def prune_log():
    return 1

2024-05-13 02:26:26,657:DEBUG:celery.utils.functional:
def xstarmap(task, it):
    return 1

2024-05-13 02:26:26,657:DEBUG:celery.utils.functional:
def cache_warmup(strategy_name, *args, **kwargs):
    return 1

2024-05-13 02:26:26,658:DEBUG:celery.utils.functional:                                                                                def get_sql_results(query_id, rendered_query, return_results=0, store_results=1, username=2, start_time=3, expand_data=4, log_params=5):
    return 1

2024-05-13 02:26:26,658:DEBUG:celery.utils.functional:
def fetch_url(data, headers):
    return 1
                                                                                2024-05-13 02:26:26,658:DEBUG:celery.utils.functional:
def chunks(task, it, n):
    return 1

2024-05-13 02:26:26,658:DEBUG:celery.utils.functional:
def group(self, tasks, result, group_id, partial_args, add_to_parent=0):
    return 1

2024-05-13 02:26:26,659:DEBUG:celery.utils.functional:
def scheduler():
    return 1
                                                                                2024-05-13 02:26:26,659:DEBUG:celery.utils.functional:
def chain(*args, **kwargs):
    return 1

/usr/local/lib/python3.10/site-packages/celery/platforms.py:829: SecurityWarning: You're running the worker with superuser privileges: this is
absolutely not recommended!

Please specify a different user using the --uid option.

User information: uid=0 euid=0 gid=0 egid=0

  warnings.warn(SecurityWarning(ROOT_DISCOURAGED.format(
['/usr/local/bin', '/app/pythonpath', '/usr/local/lib/python310.zip', '/usr/local/lib/python3.10', '/usr/local/lib/python3.10/lib-dynload', '/usr/local/lib/python3.10/site-packages', '/app', '/app/configs/']
Loaded your LOCAL configuration at [/app/pythonpath/superset_config.py]

 -------------- celery@superset-worker-54bc9dffd4-skkk8 v5.3.6 (emerald-rush)
--- ***** -----
-- ******* ---- Linux-5.15.0-102-generic-x86_64-with-glibc2.36 2024-05-13 02:26:26
- *** --- * ---
- ** ---------- [config]
- ** ---------- .> app:         __main__:0x7f934c950a90
- ** ---------- .> transport:   redis://:**@redis-master:6379/0
- ** ---------- .> results:     redis://:**@redis-master:6379/0
- *** --- * --- .> concurrency: 24 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
 -------------- [queues]
                .> celery           exchange=celery(direct) key=celery

                                                                                [2024-05-13 02:26:29,760: WARNING/MainProcess] /usr/local/lib/python3.10/site-packages/celery/worker/consumer/consumer.py:507: CPendingDeprecationWarning: The broker_connection_retry configuration setting will no longer determine
whether broker connection retries are made during startup in Celery 6.0 and above.
If you wish to retain the existing behavior for retrying connections on startup,
you should set broker_connection_retry_on_startup to True.
  warnings.warn(

[2024-05-13 02:26:29,768: WARNING/MainProcess] /usr/local/lib/python3.10/site-packages/celery/worker/consumer/consumer.py:507: CPendingDeprecationWarning: The broker_connection_retry configuration setting will no longer determine
whether broker connection retries are made during startup in Celery 6.0 and above.
If you wish to retain the existing behavior for retrying connections on startup,
you should set broker_connection_retry_on_startup to True.
  warnings.warn(

Superset version
4.0.0
Python version
3.10
Node version
16
Browser
Chrome
Additional context
No response
Checklist

[X] I have searched Superset docs and Slack and didn't find a solution to my problem.
[X] I have searched the GitHub issue tracker and didn't find a similar bug report.
[X] I have checked Superset's logs for errors and if I found a relevant Python stacktrace, I included it here as text in the "additional context" section.

It's an issue with Liveness probe :
Liveness probe failed: ['/usr/local/bin', '/app/pythonpath', '/usr/local/lib/python310.zip', '/usr/local/lib/python3.10', '/usr/local/lib/python3.10/lib-dynload', '/usr/local/lib/python3.10/site-packages', '/app', '/app/configs/'] Loaded your LOCAL configuration at [/app/pythonpath/superset_config.py] logging was configured successfully 2024-05-13 02:49:48,445:INFO:superset.utils.logging_configurator:logging was configured successfully 2024-05-13 02:49:48,447:INFO:root:Configured event logger of type <class 'superset.utils.log.DBEventLogger'> Error: No nodes replied within time constraint

After running 'celery -A superset.tasks.celery_app:app inspect ping -d celery@$HOSTNAME' manually in worker pod, response was Error:
root@superset-worker-54fcfd4b-bzpzd:/app# celery -A superset.tasks.celery_app:app inspect ping -d celery@$HOSTNAME
['/usr/local/bin', '/app/pythonpath', '/usr/local/lib/python310.zip', '/usr/local/lib/python3.10', '/usr/local/lib/python3.10/lib-dynload', '/usr/local/lib/python3.10/site-packages', '/app', '/app/configs/']
Loaded your LOCAL configuration at [/app/pythonpath/superset_config.py]
logging was configured successfully
2024-05-13 02:58:06,359:INFO:superset.utils.logging_configurator:logging was configured successfully
2024-05-13 02:58:06,361:INFO:root:Configured event logger of type <class 'superset.utils.log.DBEventLogger'>
Error: No nodes replied within time constraint

After done some digging, it appears to be related to the Celery version issue with Redis. https://github.com/apache/superset/pull/28471

After upgrade to celery 5.4, flower can see workers listed, but the ping for liveness within worker still fails with no nodes replied.

LivenessProbe still fails with 'Error: No nodes replied within time constraint' as result from "celery -A superset.tasks.celery_app:app inspect ping -d celery@$HOSTNAME"

@dosu-bot

Was this problem resolved? I'm also getting the LivenessProbe still fails with 'Error: No nodes replied within time constraint' as result from "celery -A superset.tasks.celery_app:app inspect ping -d celery@$HOSTNAME" error on the worker on startup

@dosu, in this case, what is your cache_config?
here's mine:
from superset.tasks.types import ExecutorType

    CACHE_REDIS_URL = f"redis://:{env('REDIS_PASSWORD')}@{env('REDIS_HOST')}:{env('REDIS_PORT')}/1"

    CACHE_CONFIG = {
        'CACHE_TYPE': 'redis',
        'CACHE_DEFAULT_TIMEOUT': 60 * 60 * 24,
        'CACHE_KEY_PREFIX': 'superset_',
        'CACHE_REDIS_URL': CACHE_REDIS_URL
    }

    DATA_CACHE_REDIS_URL = f"redis://:{env('REDIS_PASSWORD')}@{env('REDIS_HOST')}:{env('REDIS_PORT')}/2"

    DATA_CACHE_CONFIG = {
        'CACHE_TYPE': 'redis',
        'CACHE_DEFAULT_TIMEOUT': 60 * 60 * 24, # 1 day default (in secs)
        'CACHE_KEY_PREFIX': 'superset_results',
        'CACHE_REDIS_URL': DATA_CACHE_REDIS_URL
    }

    FILTER_CACHE_REDIS_URL = f"redis://:{env('REDIS_PASSWORD')}@{env('REDIS_HOST')}:{env('REDIS_PORT')}/3"

    FILTER_STATE_CACHE_CONFIG = {
          'CACHE_TYPE': 'RedisCache',
          'CACHE_DEFAULT_TIMEOUT': 24*60*60,
          'CACHE_KEY_PREFIX': 'superset_filter_state',
          'CACHE_REDIS_URL': FILTER_CACHE_REDIS_URL,
    }

    THUMBNAIL_CACHE_REDIS_URL = f"redis://:{env('REDIS_PASSWORD')}@{env('REDIS_HOST')}:{env('REDIS_PORT')}/4"

    THUMBNAIL_CACHE_CONFIG = {
          'CACHE_TYPE': 'RedisCache',
          'CACHE_DEFAULT_TIMEOUT': 24*60*60*7,
          'CACHE_KEY_PREFIX': 'thumbnail_',
          'CACHE_REDIS_URL': THUMBNAIL_CACHE_REDIS_URL,
    }

    THUMBNAIL_SELENIUM_USER = "user@company"
    THUMBNAIL_EXECUTE_AS = [ExecutorType.SELENIUM]

Was this problem resolved? I'm also getting the LivenessProbe still fails with 'Error: No nodes replied within time constraint' as result from "celery -A superset.tasks.celery_app:app inspect ping -d celery@$HOSTNAME" error on the worker on startup

Nope, I have tried "celery==5.5.0b2" still doesn't work

superset-worker continuous OOM at 4.1.0rc2-py310 with 4Gi memory.


Support the _active_tasks endpoint

Support the /_active_tasks endpoint, see CouchDB docs, for information on the endpoint.

This library is now end-of-life and this issue won't be fixed.
This issue has been tagged EOL in case any forks want to import it.


Blur filter samples colors from outside its area

The blur filter is sampling pixels from outside the area that it is clipped to. Is there any way to limit a blur strictly to the contents of an image, as if applying a gaussian blur in an image editor? See images below.
I also posted a question on StackOverflow.
Steps to Reproduce
Take a look at the example below:
class BlurDemo extends StatelessWidget {
  BlurDemo({Key key}) : super(key: key);

  final String imageUrl =
      'https://dogtime.com/assets/uploads/2018/10/puppies-cover-1280x720.jpg';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Blur Demo'),
      ),
      backgroundColor: Colors.black,
      body: Center(
        child: SizedBox(
          width: 250,
          height: 250,
          child: FittedBox(
            fit: BoxFit.cover,
            child: Stack(children: [
              Image.network(imageUrl),
              Positioned.fill(
                child: ClipRRect(
                    child: BackdropFilter(
                        filter: ImageFilter.blur(sigmaX: 20.0, sigmaY: 20.0),
                        child: Container(color: Colors.black.withAlpha(0))),
    ))])))));}}

Expected results:
Expecting the blur to only sample from pixels directly behind the filter (in this case, the image).
Mockup
Actual results:
The blur filter is sampling from pixels outside the area that the blur is clipped to (in this case, the black background). The result is a subtle black edge bleeding into the blurred image.
Image example
The effect is very subtle, but it does have a significant visual impact in my use case.

Try using ImageFiltered instead of BackdropFilter.

That's exactly what I needed. Thank you!


transmission-rss: init at 0.3.1

Description of changes
Add transmission-rss 0.3.1

Things done

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[x] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[x] Tested basic functionality of all binary files (usually in ./result/bin/)
22.11 Release Notes (or backporting 22.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module
[ ] (Release notes changes) Ran nixos/doc/manual/md-to-db.sh to update generated release notes

[x] Fits CONTRIBUTING.md.

Besides the merge conflict, this looks very good. You can rebase and I'll merge this.

rebased

Result of nixpkgs-review pr 197596 run on x86_64-linux 1

1 package built:

transmission-rss


[Potential contribution] 'AdaFamily' optimizer

I would like to contribute the new 'AdaFamily' optimizer to DeepSpeed.
AdaFamily is a novel method for training deep neural networks. It is a family of adaptive gradient methods and can be interpreted as sort of a blend of the state-of-the-art optimization algorithms Adam, AdaBelief and AdaMomentum. We perform experiments on standard datasets for image classification, demonstrating that our proposed method outperforms these algorithms.
The AdaFamily algorithm  and the experiments with computer vision (image classification) tasks are described in the preprint at  https://arxiv.org/abs/2203.01603 (paper has been submitted to ISPR 2022).
Code for the AdaFamily algorithm and other SoA optimizers (AdaBelief, AdaMomentum, Adam etc.) can be found at https://github.com/hfassold/omni_optimizer .
After submitting the paper, according to the DeepSpeed contribution guidelines which demand also experiments with NLP tasks, I did additionally an experiment with a NLP finetuning task. Code for the experiments is at https://github.com/hfassold/nlp_finetuning_adafamily . We do a NLP finetuning of a pretrained 'DistillBert' model on the task of 'text classification' (prediction of google app rating von 1-5). We train for 10 epochs, and eps is set to 1e-16. We compare with the baseline optimizer 'AdamW'. As performance measures, we take the average accuracy (over 10 runs with different seeds). AdaFamily is used with myu set to 0.25 . AdamW achieves an average accuracy of 79.94 percent, whereas AdaFamily achieves an average accuracy of 80.47 percent. So AdaFamily is ~ 0.5 percent better here.

Hi @hfassold , we read your proposal and paper, and we feel that there are a few concerns that make it difficult for us to accept the contribution:
(1) The most concern we have is that based on the current experiment results it's hard to conclude whether AdaFamily really provides nontrivial convergence gain. In your paper (https://arxiv.org/pdf/2203.01603.pdf) section 3, for AdaFamily you tuned its hyperparameter µ, while other algorithms have no tuning. And only one combination of LR/beta1/beta2/weight decay/etc. is applied to all algorithms. So it's natural to question whether additional tuning of existing algorithms will lead to the same or better accuracy than AdaFamily, especially given that AdaFamily doesn't provide a huge accuracy increase in Table 1-3. I personally think at least we need to try different LR for all algorithms since AdaFamily's additional hyperparameter µ affects the effective LR.
(2) AdaFamily has no runtime/system performance benefit compared to baseline algorithms. This makes it less attractive to DeepSpeed users considering the concern in (1).
(3) There is no theoretical convergence analysis.
Finally, I noticed that at the end of your paper it says "In the future, we will port the AdaFamily algorithm to a distributed training framework like DeepSpeed.". We would appreciate if you could refrain from including description like this before a confirmed code release in DeepSpeed, to avoid potential confusion to paper readers and DeepSpeed users. Thank you. And in fact in the paper I didn't find any reference to your own code release (https://github.com/hfassold/omni_optimizer), which I feel is much more important to include.

Hi, thanks for your investigation ! You are right, the optimization of the hyperparameters was limited. Actually, I optimized the hyperparameters (LR schedule etc.) for the 'Adam' algorithm, and kept it then the same for all other algorithms.

Actually, I optimized the hyperparameters (LR schedule etc.) for the 'Adam' algorithm, and kept it then the same for all other algorithms.

I think the issue here is that due to each algorithm's different variance calculation, even if you set the LR hyperparameter the same, the effective LR (where variance is part of it) is different. Thus different algorithms may have different "optimal LR hyperparameter". So a better comparison would be: try a wide set of different LR for all algorithms, and each algorithm chooses its own LR that produces the best result, and finally compare the best results between algorithms.

Closing this as we decided to not take this contribution as discussed above, but users can always plugin any customized optimizer when using DeepSpeed.


Update configuration-reference.md

Fixing broken table formatting and preserve-view on link.

All these checks aren't necessary for a doc update in my opinion. Please merge as-is. Thanks, Jason


Coveralls connected, added badge.

Coverage remained the same at 31.206% when pulling a9e4f82dde95bcafe07412db7df43703e0076a01 on minor-changes into 4608ea421c1ff0b6deae79f841d8dedc28250b79 on master.


saml: Fix incorrect settings object being passed in get_issuing_idp.

Fixes #15904.
settings is supposed to be a proper OneLogin_Saml2_Settings object,
rather than an empty dictionary. This bug wasn't easy to spot because
the codepath that causes this to demonstrate runs only if the
SAMLResponse contains encrypted assertions.
Tested manually, since this was a simple "object of completely wrong type" bug, plus we don't have any good utilities for manipulating/generating SAMLResponses so triggering the codepath would be hard, as that requires a SAMLResponse with encrypted assertions.

This is great, merged, thanks @mateuszmandera!  Is this worth backporting to 3.1?

@timabbott This was a regression, so I'd say so. Though I'm seeing this has already been merged to 3.x anyway.

Yeah, I thought about this more and decided it was pretty clear it should be (though it's good to have you double-check my reasoning after the fact).


Golang kernel support?

There is full working jupyter notebook golang kernel.
https://github.com/yunabe/lgo
And I want to use it with beakerX's features like display table.
How can I put or combine these two programs?

Hi Jihoon, thank you for your question.
It doesn't look like Igo supports widgets like our table display.
This would not be that hard to add to the kernel however.
If you did, then you could connect the Go kernel side of the widget to the unmodified client side from BeakerX.
Fyi, we are in progress rewriting our table to have much higher performance https://github.com/twosigma/beakerx/issues/6674
ETA is 1-2 months.  I don't think this will effect the API.


Patient row not saved for new patient who registered using cellphone app

I registered using the cellphone app. When I checked in the database, there was a row in the User table with user id 118. But there is no patient row in the Patient table that corresponds to this user.

This has been fixed with the below commit
c04debc560c69dacf42e969d4bd6eaad98aa94d1


Login fixing

Resolves #266 #1501

Can now save login+password pairs in Firefox, Chrome and probably Safari.
The autofill works in Firefox and Chrome when using mouse and/or keyboard to select stored login
Can now submit form from both input-fields, not just the password field.

This PR has extra files. I'm assuming they come from #1563.

Oh I messed up my master. Yes they would come from the embeds thing

Do you want me to fix or will you merge that PR and then it won't matter (hopefully)

I'm just gonna close these PR since they've grown very old and it's annoying to see them in my open PR listing. If there's another bout of dev on the site and you want more help, let me know.

@mikekasprzak, I closed this a long time ago because having open PRs annoyed me but it is possible it still is useful. If not, please close it again. Also great that there's going to be dev on the site again!
I'm not sure about this one, it might be duplicated, at least in part by the two other login-PRs


Should be a bit more smarter

Hi! As i read the email, i got to try it. So, now i just finished with few merges, so i seen that was handled by Greenkeeper, but seems it isn't here.
For example, if you have multiple PRs of same library, when you merge the newest one, other should be close, i believe?
See these PRs. When i merged the PR for nyc 11, i thought PRs for 9 and 10 would be closed, but Renovate didn't so i closed them manually.
It will be great if it can handle such cases :)
Good job any way! :tada: Looks and feels a lot better than GK.

@tunnckoCore yes, it should be doing that already. I'll take a look.

Here's one example:

It's showing your account closed the PR while the bot deleted the branch.  Was it less than 30 minutes before you closed the PR yourself manually? Renovate runs on a 30 minutes cycle so that should be the maximum bound it takes to clean up anything.
This approach is a tradeoff for simplicity - the only way to automatically close other PRs when a user merges another would be to be listening to webhooks and reacting, whereas renovate the CLI tools is designed to be installed/run from npm by anyone. It's likely I'll add webhooks to the app though to speed up cases like this though.

Was it less than 30 minutes before you closed the PR yourself manually?

mm probably, dont remember. i will see on monday


added base isSameMatch() and identicalTo() Object Matcher

added an isSameMatch() function to all Matchers, to allow checking for identical matching criteria (useful for Rokito integration).

Added an identicalTo() Object Matcher for checking objects are identical in structure and value without necessarily being the same instance.

Thanks, merging...


Compact Visual Density is wrongfully applied to Checkboxes with MaterialTapTargetSize.padded on desktop platforms according to Material 3 Guidelines

Steps to reproduce
Create a simple widget tree with a checkbox that has a materialTapTargetSize: MaterialTapTargetSize.padded.
Run it on web.
Inspect its size.
Expected results
According to M3 guidelines, even if visual density is compact:
It’s important to keep accessibility in mind when you’re applying density to your UI. No matter the density, all touch targets should be at least `48px` in size.

https://m3.material.io/blog/material-density-web
So a Checkbox should always have a 48x48 touch target. Which does not happen if we use the default VisualDensity for desktop platforms.
Actual results
Because for desktop platforms there's a compact Visual Density being applied by default, it's shrinking components' touch targets like the Checkbox to sizes that are not accessible according to M3 (from 48 to 40 for example)
Additionally, this compact visual density that is applied by default is assuming that all UI on a desktop app (or desktop web app) are going to be very visually dense, when it's not always the case.
Is this an implementation mistake by the Flutter team? Are the M3 docs outdated?
Code sample
Code sample
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Checkbox(
          materialTapTargetSize: MaterialTapTargetSize.padded,
          value: true,
          onChanged: (_) {},
        ),
      ),
    );
  }
}

Screenshots or Video
Checkbox size without overriding default Visual Density (which is VisualDensity.compact):

Checkbox size by overriding default Visual Density with VisualDensity.standard:

Logs
No response
Flutter Doctor output
Doctor output
~/repositories/checkbox_visual_density$ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[!] Flutter (Channel [user-branch], 3.22.0, on macOS 14.6.1 23G93 darwin-arm64, locale en-PT)
    ! Flutter version 3.22.0 on channel [user-branch] at /opt/homebrew/Caskroom/flutter/3.0.4/flutter
      Currently on an unknown channel. Run `flutter channel` to switch to an official channel.
      If that doesn't fix the issue, reinstall Flutter by following instructions at https://flutter.dev/docs/get-started/install.
    ! Upstream repository unknown source is not a standard remote.
      Set environment variable "FLUTTER_GIT_URL" to unknown source to dismiss this error.
[!] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
    ✗ Android license status unknown.
      Run `flutter doctor --android-licenses` to accept the SDK licenses.
      See https://flutter.dev/docs/get-started/install/macos#android-setup for more details.
[!] Xcode - develop for iOS and macOS (Xcode 16.0)
    ! iOS 18.0 Simulator not installed; this may be necessary for iOS and macOS development.
      To download and install the platform, open Xcode, select Xcode > Settings > Platforms,
      and click the GET button for the required platform.

      For more information, please visit:
        https://developer.apple.com/documentation/xcode/installing-additional-simulator-runtimes
[✓] Chrome - develop for the web
[✓] Android Studio (version 2021.2)
[✓] IntelliJ IDEA Ultimate Edition (version 2022.1.3)
[✓] VS Code (version 1.92.2)
[✓] Connected device (5 available)
[✓] Network resources

! Doctor found issues in 3 categories.

I checked this on macOS app target and see Checkbox's size is 40.0 from Devtools inspector as well. Reproduced this issue on the latest Flutter stable and master versions.

flutter doctor (stable and master)
[✓] Flutter (Channel stable, 3.24.3, on macOS 15.0 24A335 darwin-x64, locale en-VN)
    • Flutter version 3.24.3 on channel stable at /Users/huynq/Documents/GitHub/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 2663184aa7 (3 weeks ago), 2024-09-11 16:27:48 -0500
    • Engine revision 36335019a8
    • Dart version 3.5.3
    • DevTools version 2.37.3

[!] Flutter (Channel master, 3.26.0-1.0.pre.414, on macOS 15.0 24A335 darwin-x64, locale en-VN)
    • Flutter version 3.26.0-1.0.pre.414 on channel master at /Users/huynq/Documents/GitHub/flutter_master
    ! Warning: `flutter` on your path resolves to /Users/huynq/Documents/GitHub/flutter/bin/flutter, which is not inside your current Flutter SDK checkout at /Users/huynq/Documents/GitHub/flutter_master. Consider adding /Users/huynq/Documents/GitHub/flutter_master/bin to the front of your path.
    ! Warning: `dart` on your path resolves to /Users/huynq/Documents/GitHub/flutter/bin/dart, which is not inside your current Flutter SDK checkout at /Users/huynq/Documents/GitHub/flutter_master. Consider adding /Users/huynq/Documents/GitHub/flutter_master/bin to the front of your path.
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision c077b8c61a (3 hours ago), 2024-10-08 19:51:19 -0400
    • Engine revision 0e7344ae24
    • Dart version 3.6.0 (build 3.6.0-332.0.dev)
    • DevTools version 2.40.0
    • If those were intentional, you can disregard the above warnings; however it is recommended to use "git" directly to perform update checks and upgrades.

Looks like I found the cause of this:
Per MaterialTapTargetSize.padded, the minimum tap target size should be 48x48 px:
https://github.com/flutter/flutter/blob/c077b8c61acd0205f92caa6c05d832bfcb8e0a29/packages/flutter/lib/src/material/theme_data.dart#L167-L173
The passed value MaterialTapTargetSize.padded to Checkbox.materialTapTargetSize is correct here:
https://github.com/flutter/flutter/blob/c077b8c61acd0205f92caa6c05d832bfcb8e0a29/packages/flutter/lib/src/material/checkbox.dart#L516-L525
But the next line seems to cause the issue:
https://github.com/flutter/flutter/blob/c077b8c61acd0205f92caa6c05d832bfcb8e0a29/packages/flutter/lib/src/material/checkbox.dart#L526
The visualDensity default value is compact with VisualDensity(horizontal: -2.0, vertical: -2.0). When it's multiplied with baseSizeAdjustment , it returns a new Offset(horizontal, vertical) * interval (interval is 4.0) = Offset(-8.0, -8.0).
This causes Checkbox size down to (40.0, 40.0) as observed.

@huycozy What is the ideal fix here? Should we add a check after adding the baseSizeAdjustment and reverting the sum if it breaks the 48 touch target rule?

I'm not sure of the proper fix for this now but I see we can work around this by overriding the Checkbox.visualDensity with VisualDensity.standard in the meantime until having design team's opinion, then Checkbox size should be (48.0, 48.0) as desired.


Multiple where conditions pieced together in a single where clause from variables

i looked over https://github.com/simolus3/moor/issues/424 trying to see how to do what i'm needing. i wasn't able to figure out how to supply a variety of conditionals. could i have a hand with how to do this? the complaint is happening on the ampersand, but i'm thinking i'm not doing it correctly before that point. thank you,
var q = select(todos);
var whereOrphan = (v) => isNull(v.parentId);
var whereActive = (v) => v.deleted.equals(false);

return (select(todos)..where((v) => whereOrphan & whereActive)).watch();

If I have multiple dynamic conditions I do something like this:
    return (db.select(db.investigator)
          ..where((v) {
            final whereList = <Expression<bool>>[
              if (hasParent) isNull(v.parentId),
              if (onlyActive) v.deleted.equals(false),
            ];
            if (whereList.isEmpty) {
              whereList.add(const Constant(true));
            }
            return whereList.reduce((where, condition) => where & condition);
          }))
        .watch();

so, i add my expressions to that <Expression> collection. and, for the .reduce part, i wonder what does it look like if have expressions A, B, and C and want to do something like A & (B | C) ?
thanks much!

i wonder what does it look like if have expressions A, B, and C and want to do something like A & (B | C) ?
You'd need another [] but this time do orList.reduce((clause, condition) => clause | condition)

    return (db.select(db.todos)
          ..where((v) {
            final orList = <Expression<bool>>[
              conditionB,
              conditionC,
            ];

            final whereList = <Expression<bool>>[
              conditionA,
              if (orList.isNotEmpty) orList.reduce((clause, condition) => clause | condition),
            ];
            if (whereList.isEmpty) {
              whereList.add(const Constant(true));
            }
            return whereList.reduce((clause, condition) => clause & condition);
          }))
        .watch();

thanks so much @North101 for these examples to help me over it!


Migrate context management methods to C++

Closes #445.
This also includes a small optimization that ensures we pass ptrs to ManagerInterface methods as const &.

LGTM squash and merge when ready.


Clickable repository URL is incorrect with git scheme

When a project has a URL scheme of git://..., the clickable link is instead linked to git//..., which will result in a copied link of http://git//...

This is caused by Django's urlize filter. Not sure what the best fix would be. Custom filter?

I just imported this repository to my local instance: git//github.com/humitos/turtle-confusion-es.git and the links to Edit or View in github work great.
The problem is in the project home page at RTD, http://localhost:8000/projects/turtle-confusion/,

the URL linked there is: http://git//github.com/humitos/turtle-confusion-es.git
What should be the solution? Just replace the git:// sheme by https:// or what?

@humitos now I came with a more simple solution p:. What about just checking the protocol? If it's https?:// we put a link, otherwise, just plain text.

@stsewd I like the idea; if you want to propose a PR, I can review it :)


Warnings in react 15.6

When upgrading to the latest version of emojione-picker with React 15.6, I have the following error in the console:
Warning: Failed prop type: The prop tabIndex is marked as required in Grid, but its value is null.

@tommoor PR here: https://github.com/tommoor/emojione-picker/pull/78

This was fixed upstream in react-virtualized. Anyone running into this needs to update react-virtualized to 9.11.0 or later.


ReadingTime Function returns incorrect value (v3 beta 2) due to wrong if statement

The public function readingTime() should return 'minutes' for everything greater than 1 and 'minute' for a value of 1 or below.
Line 499 (v3 beta 2): Instead of if ($minutes>0) -> if ($minutes>1)
Thanks.

Fixed by @anaggh here https://github.com/bludit/bludit/pull/735


defaultImage problem

Hi,
I tried to use a default image as obviously implemented in the code, but not working for me, since componentWillReceiveProps() is not fired.
I get the behavior I expected, if the initalization of the pictures state is already done in the constructor. However, I don't know if this would lead to undesired behavior.
By modifying this line:
https://github.com/JakeHartnell/react-images-upload/blob/c19e67ab6f3a38658d0e98972145b05703e7302d/src/component/index.js#L19
to:
pictures: this.props.defaultImage ? [this.props.defaultImage] : [],
the defaultImage works for me. Is this a reasonable change and could maybe modified for the component?
Edit: Of course I also had to uncomment the componentWillReceiveProps() function.

I suggest this pull request.
An idea for future version is to add a defaultImages property, containing an array of urls.

Thank you for creating the PR!