From 82a3e729f1f562a74070900a2cbd1cd653f99710 Mon Sep 17 00:00:00 2001 From: Vikash Kothary Date: Fri, 14 Oct 2022 23:40:56 +0100 Subject: [PATCH] refactor: Separate sessions into multiple files --- src/ankisyncd/sessions/__init__.py | 40 +++++++++++++ src/ankisyncd/sessions/simple_manager.py | 19 ++++++ .../sqlite_manager.py} | 59 +------------------ 3 files changed, 60 insertions(+), 58 deletions(-) create mode 100644 src/ankisyncd/sessions/__init__.py create mode 100644 src/ankisyncd/sessions/simple_manager.py rename src/ankisyncd/{sessions.py => sessions/sqlite_manager.py} (62%) diff --git a/src/ankisyncd/sessions/__init__.py b/src/ankisyncd/sessions/__init__.py new file mode 100644 index 0000000..8b80ca2 --- /dev/null +++ b/src/ankisyncd/sessions/__init__.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- + +import importlib +import inspect +from ankisyncd import logging +from ankisyncd.sessions.simple_manager import SimpleSessionManager +from ankisyncd.sessions.sqlite_manager import SqliteSessionManager + +logger = logging.get_logger(__name__) + + +def get_session_manager(config): + if "session_db_path" in config and config["session_db_path"]: + logger.info( + "Found session_db_path in config, using SqliteSessionManager for auth" + ) + return SqliteSessionManager(config["session_db_path"]) + elif "session_manager" in config and config["session_manager"]: # load from config + logger.info( + "Found session_manager in config, using {} for persisting sessions".format( + config["session_manager"] + ) + ) + + module_name, class_name = config["session_manager"].rsplit(".", 1) + module = importlib.import_module(module_name.strip()) + class_ = getattr(module, class_name.strip()) + + if not SimpleSessionManager in inspect.getmro(class_): + raise TypeError( + """"session_manager" found in the conf file but it doesn''t + inherit from SimpleSessionManager""" + ) + return class_(config) + else: + logger.warning( + "Neither session_db_path nor session_manager set, " + "ankisyncd will lose sessions on application restart" + ) + return SimpleSessionManager() diff --git a/src/ankisyncd/sessions/simple_manager.py b/src/ankisyncd/sessions/simple_manager.py new file mode 100644 index 0000000..59f4b37 --- /dev/null +++ b/src/ankisyncd/sessions/simple_manager.py @@ -0,0 +1,19 @@ +class SimpleSessionManager: + """A simple session manager that keeps the sessions in memory.""" + + def __init__(self): + self.sessions = {} + + def load(self, hkey, session_factory=None): + return self.sessions.get(hkey) + + def load_from_skey(self, skey, session_factory=None): + for i in self.sessions: + if self.sessions[i].skey == skey: + return self.sessions[i] + + def save(self, hkey, session): + self.sessions[hkey] = session + + def delete(self, hkey): + del self.sessions[hkey] diff --git a/src/ankisyncd/sessions.py b/src/ankisyncd/sessions/sqlite_manager.py similarity index 62% rename from src/ankisyncd/sessions.py rename to src/ankisyncd/sessions/sqlite_manager.py index 64ab1dc..fc76142 100644 --- a/src/ankisyncd/sessions.py +++ b/src/ankisyncd/sessions/sqlite_manager.py @@ -1,30 +1,6 @@ -# -*- coding: utf-8 -*- import os -import logging from sqlite3 import dbapi2 as sqlite - -logger = logging.getLogger("ankisyncd.sessions") - - -class SimpleSessionManager: - """A simple session manager that keeps the sessions in memory.""" - - def __init__(self): - self.sessions = {} - - def load(self, hkey, session_factory=None): - return self.sessions.get(hkey) - - def load_from_skey(self, skey, session_factory=None): - for i in self.sessions: - if self.sessions[i].skey == skey: - return self.sessions[i] - - def save(self, hkey, session): - self.sessions[hkey] = session - - def delete(self, hkey): - del self.sessions[hkey] +from ankisyncd.sessions.simple_manager import SimpleSessionManager class SqliteSessionManager(SimpleSessionManager): @@ -128,36 +104,3 @@ class SqliteSessionManager(SimpleSessionManager): cursor.execute(self.fs("DELETE FROM session WHERE hkey=?"), (hkey,)) conn.commit() - - -def get_session_manager(config): - if "session_db_path" in config and config["session_db_path"]: - logger.info( - "Found session_db_path in config, using SqliteSessionManager for auth" - ) - return SqliteSessionManager(config["session_db_path"]) - elif "session_manager" in config and config["session_manager"]: # load from config - logger.info( - "Found session_manager in config, using {} for persisting sessions".format( - config["session_manager"] - ) - ) - import importlib - import inspect - - module_name, class_name = config["session_manager"].rsplit(".", 1) - module = importlib.import_module(module_name.strip()) - class_ = getattr(module, class_name.strip()) - - if not SimpleSessionManager in inspect.getmro(class_): - raise TypeError( - """"session_manager" found in the conf file but it doesn''t - inherit from SimpleSessionManager""" - ) - return class_(config) - else: - logger.warning( - "Neither session_db_path nor session_manager set, " - "ankisyncd will lose sessions on application restart" - ) - return SimpleSessionManager()