Merge pull request #482 from camptocamp/18.0-mig-session_redis_fix

[MIG] session_redis: Migration to 18.0
This commit is contained in:
Nicolas Bessi (nbessi)
2025-02-05 10:56:20 +01:00
committed by GitHub
co-authored by GitHub
4 changed files with 31 additions and 30 deletions
+1 -2
View File
@@ -14,6 +14,5 @@
"python": ["redis"],
},
"website": "https://github.com/camptocamp/odoo-cloud-platform",
"data": [],
"installable": False,
"installable": True,
}
+15 -11
View File
@@ -25,21 +25,21 @@ def is_true(strval):
return bool(strtobool(strval or "0".lower()))
sentinel_host = os.environ.get("ODOO_SESSION_REDIS_SENTINEL_HOST")
sentinel_master_name = os.environ.get("ODOO_SESSION_REDIS_SENTINEL_MASTER_NAME")
sentinel_host = os.getenv("ODOO_SESSION_REDIS_SENTINEL_HOST")
sentinel_master_name = os.getenv("ODOO_SESSION_REDIS_SENTINEL_MASTER_NAME")
if sentinel_host and not sentinel_master_name:
raise Exception(
"ODOO_SESSION_REDIS_SENTINEL_MASTER_NAME must be defined "
"when using session_redis"
)
sentinel_port = int(os.environ.get("ODOO_SESSION_REDIS_SENTINEL_PORT", 26379))
host = os.environ.get("ODOO_SESSION_REDIS_HOST", "localhost")
port = int(os.environ.get("ODOO_SESSION_REDIS_PORT", 6379))
prefix = os.environ.get("ODOO_SESSION_REDIS_PREFIX")
url = os.environ.get("ODOO_SESSION_REDIS_URL")
password = os.environ.get("ODOO_SESSION_REDIS_PASSWORD")
expiration = os.environ.get("ODOO_SESSION_REDIS_EXPIRATION")
anon_expiration = os.environ.get("ODOO_SESSION_REDIS_EXPIRATION_ANONYMOUS")
sentinel_port = int(os.getenv("ODOO_SESSION_REDIS_SENTINEL_PORT", 26379))
host = os.getenv("ODOO_SESSION_REDIS_HOST", "localhost")
port = int(os.getenv("ODOO_SESSION_REDIS_PORT", 6379))
prefix = os.getenv("ODOO_SESSION_REDIS_PREFIX")
url = os.getenv("ODOO_SESSION_REDIS_URL")
password = os.getenv("ODOO_SESSION_REDIS_PASSWORD")
expiration = os.getenv("ODOO_SESSION_REDIS_EXPIRATION")
anon_expiration = os.getenv("ODOO_SESSION_REDIS_EXPIRATION_ANONYMOUS")
@lazy_property
@@ -61,6 +61,10 @@ def session_store(self):
def purge_fs_sessions(path):
if not os.path.isdir(path):
_logger.warning(f"Session directory '{path}' does not exist.")
return
for fname in os.listdir(path):
path = os.path.join(path, fname)
try:
@@ -69,7 +73,7 @@ def purge_fs_sessions(path):
_logger.warning("OS Error during purge of redis sessions.")
if is_true(os.environ.get("ODOO_SESSION_REDIS")):
if is_true(os.getenv("ODOO_SESSION_REDIS")):
if sentinel_host:
_logger.debug(
"HTTP sessions stored in Redis with prefix '%s'. "
+9 -13
View File
@@ -60,10 +60,8 @@ class RedisSessionStore(SessionStore):
else:
user_msg = "anonymous user"
_logger.debug(
"saving session with key '%s' and " "expiration of %s seconds for %s",
key,
expiration,
user_msg,
f"saving session with key '{key}' and "
f"expiration of {expiration} seconds for {user_msg}"
)
data = json.dumps(dict(session), cls=json_encoding.SessionEncoder).encode(
@@ -74,14 +72,14 @@ class RedisSessionStore(SessionStore):
def delete(self, session):
key = self.build_key(session.sid)
_logger.debug("deleting session with key %s", key)
_logger.debug(f"deleting session with key {key}")
return self.redis.delete(key)
def get(self, sid):
if not self.is_valid_key(sid):
_logger.debug(
"session with invalid sid '%s' has been asked, " "returning a new one",
sid,
f"session with invalid sid '{sid}' has been asked, "
"returning a new one"
)
return self.new()
@@ -89,18 +87,16 @@ class RedisSessionStore(SessionStore):
saved = self.redis.get(key)
if not saved:
_logger.debug(
"session with non-existent key '%s' has been asked, "
"returning a new one",
key,
f"session with non-existent key '{key}' has been asked, "
"returning a new one"
)
return self.new()
try:
data = json.loads(saved.decode("utf-8"), cls=json_encoding.SessionDecoder)
except ValueError:
_logger.debug(
"session for key '%s' has been asked but its json "
"content could not be read, it has been reset",
key,
f"session for key '{key}' has been asked but its json "
"content could not be read, it has been reset"
)
data = {}
return self.session_class(data, sid, False)
+6 -4
View File
@@ -15,7 +15,9 @@ _MAP = {
def strtobool(value):
try:
return _MAP[str(value).lower()]
except KeyError as error:
raise ValueError(f'"{value}" is not a valid bool value') from error
result = _MAP.get(str(value).strip().lower())
if result is None:
raise ValueError(f"Invalid boolean value: {repr(value)}")
return result