Skip to content

Commit

Permalink
[MIG] session_redis: Migration to 18.0
Browse files Browse the repository at this point in the history
  • Loading branch information
p-tombez committed Feb 4, 2025
1 parent 5fe59ff commit 27879b5
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 30 deletions.
3 changes: 1 addition & 2 deletions session_redis/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,5 @@
"python": ["redis"],
},
"website": "https://github.com/camptocamp/odoo-cloud-platform",
"data": [],
"installable": False,
"installable": True,
}
26 changes: 15 additions & 11 deletions session_redis/http.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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:
Expand All @@ -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'. "
Expand Down
22 changes: 9 additions & 13 deletions session_redis/session.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,8 @@ def save(self, session):
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(
Expand All @@ -74,33 +72,31 @@ def save(self, session):

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()

key = self.build_key(sid)
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)
Expand Down
10 changes: 6 additions & 4 deletions session_redis/strtobool.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@


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

0 comments on commit 27879b5

Please sign in to comment.