apache / superset

Apache Superset is a Data Visualization and Data Exploration Platform
https://superset.apache.org/
Apache License 2.0
62.05k stars 13.61k forks source link

RedisCache lost support for function as a key_prefix #27077

Open dbascoules opened 7 months ago

dbascoules commented 7 months ago

Bug description

The hability to specify a function as a key_prefix for RedisCache doesn't work anymore in Superset. Expected type 'str', got '() -> str' instead error is thrown.

This was fundamental for my usecase where I use the subdomain of the Superset URL as an ingredient of my PostgreSQL RLS. Each subdomain correspond to a subset of the data that users may query through Superset (only one instance).

Introducing the notion of subdomain in the Redis cache key prefix avoids a cache mismatch between subdomains and data subsets. It's implemented with a function parametrized in RedisCache key_prefix.

I submitted a PR in the concerned lib project : pallets-eco/cachelib#332.

How to reproduce the bug

  1. Create a simple function returning a string.
  2. Parameter this function in the RedisCache key_prefix.
  3. Display in Superset anything related to your data that will be cached to throw the error.

Screenshots/recordings

No response

Superset version

3.0.3

Python version

3.11

Node version

Not applicable

Browser

Not applicable

Additional context

`Expected type 'str', got '() -> str'

Checklist

michael-s-molina commented 7 months ago

Hi @dbascoules. In order to upgrade Superset's cachelib dependency to 0.12.0, which contains the support for callable keys, we need flask-caching to also update their requirements to allow that version.

rusackas commented 2 months ago

Is this still an issue, and if it is, is it a Superset issue? I would be tempted to close this as stale, but thought I should seek opinions here first. Mabye it's worth filing an issue on flask-caching if they haven't published a new release since this issue was opened nearly 5 months ago.