Open weigosw opened 1 week ago
Hey @weigosw! 👋 I'm here to help you with any bugs, questions, and contributing to the project!
To resolve the error "Encoding objects of type LazyString is unsupported" when configuring Superset to use server-side sessions with Redis, you need to ensure that the SESSION_INTERFACE
is correctly set up in your superset_config.py
file. Here is an example configuration:
from flask_session import RedisSessionInterface
from redis import Redis
SESSION_TYPE = "redis"
SESSION_REDIS = Redis(host="localhost", port=6379, db=0)
SESSION_SERVER_SIDE = True
SESSION_INTERFACE = RedisSessionInterface(SESSION_REDIS)
Make sure you have the flask-session
and redis
packages installed in your environment. You can install them using pip:
pip install flask-session redis
This configuration sets up Redis as the backend for server-side sessions and should help in handling LazyString
objects in session data [1].
To continue talking to Dosu, mention @dosu.
Hi Thanks for help, but i can't import RedisSessionInterface ImportError: cannot import name 'RedisSessionInterface' from 'flask_session' @dosu.
To resolve the "Encoding objects of type LazyString is unsupported" error without using RedisSessionInterface
, you can use the base_json_conv
function to handle LazyString
objects. This function converts LazyString
objects to strings, thus avoiding the unsupported encoding error.
Here is an example of how you can integrate this into your configuration:
base_json_conv
function in your superset_config.py
:
import json
from redis import Redis
from flask import Flask
from flask_session import Session
from werkzeug.middleware.proxy_fix import ProxyFix
from flask_babel import Babel
from flask_caching import Cache
from flask_appbuilder import AppBuilder, SQLA
from flask_appbuilder.security.manager import AUTH_DB
from flask_appbuilder.security.sqla.manager import SecurityManager
from flask_appbuilder.security.sqla.models import User
from flask_appbuilder.security.views import UserDBModelView
from flask_appbuilder.views import ModelView
from flask_appbuilder import ModelRestApi
from flask_appbuilder.api import BaseApi, expose, rison, protect, safe
from flask_appbuilder.models.sqla.interface import SQLAInterface
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder.models.sqla.filters import FilterContains
from flask_appbuilder.models.sqla.filters import FilterGreater
from flask_appbuilder.models.sqla.filters import FilterSmaller
from flask_appbuilder.models.sqla.filters import FilterEqualFunction
from flask_appbuilder.models.sqla.filters import FilterEqual
from flask_appbuilder.models.sqla.filters import FilterStartsWith
from flask_appbuilder
<!-- Dosu Comment Footer -->
*To continue talking to [Dosu](https://dosu.dev), mention @dosu.*
I printed the Session object with encoding errors, the problem should be related to text leading by 'l'
{
'_permanent': True,
'locale': 'zh',
'_fresh': True,
'csrf_token': 'cdecffb548f609b2b38eeeaf65ace448e9f847da',
'_user_id': '2',
'_id': 'd45ed5036f66c80fe6791e116e9c0f31e26c8489ea5acb8b4ea42d274e1be740c93d6f82573d2185896865f164a744bd5394c79c5a791fd08175bb7810baa8e1',
'page_history': ['http://localhost:8088/exceltodatabaseview/form'],
'_flashes': [
(
'danger',
l'无法将Excel文件 "Efficiency-Data-0625.xlsx" 上传到数据库 "Efficiency" 中的表 "Requirements" 内。错误消息:Table \'Requirements\' already exists.'
)
]
}
@dosu.
Bug description
When configuring Superset to use server-side sessions with Redis, an error occurs during the serialization of session data. Specifically, the error message indicates that encoding objects of type LazyString is unsupported. This issue arises when attempting to upload an Excel file, but it may also affect other functionalities that involve session data.
How to reproduce the bug
superset_config.py
:Expected Behavior: The session data should be serialized and stored in Redis without errors, and the Excel file should be uploaded successfully.
Actual Behavior: The following error is logged:
Screenshots/recordings
Superset version
4.0.1
Python version
3.9
Node version
Not applicable
Browser
Chrome
Additional context
superset_config.py
Checklist