From a836df9a5a8b85360f7d0696dd8b6f997ac0cb3c Mon Sep 17 00:00:00 2001 From: Daniel Pavel Date: Sun, 14 Jul 2019 14:43:40 +0300 Subject: [PATCH] more robust disposing of database session avoid spamming the log with debug messages from libraries --- .gitignore | 1 + cps/__init__.py | 1 + cps/admin.py | 4 ---- cps/config_sql.py | 14 ++++++++++---- cps/db.py | 16 +++++++--------- cps/logger.py | 9 +++++++-- cps/ub.py | 16 +++++++--------- 7 files changed, 33 insertions(+), 28 deletions(-) diff --git a/.gitignore b/.gitignore index 981158fe..0ce14757 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ build/ *.egg-info/ .installed.cfg *.egg +.pylint.d # calibre-web *.db diff --git a/cps/__init__.py b/cps/__init__.py index 5808f8ae..7dcea6ed 100755 --- a/cps/__init__.py +++ b/cps/__init__.py @@ -64,6 +64,7 @@ lm.anonymous_user = ub.Anonymous ub.init_db(cli.settingspath) +# pylint: disable=no-member config = config_sql.load_configuration(ub.session) from . import db, services diff --git a/cps/admin.py b/cps/admin.py index 69aee9d5..e25e692f 100644 --- a/cps/admin.py +++ b/cps/admin.py @@ -27,10 +27,6 @@ import base64 import json import time from datetime import datetime, timedelta -# try: -# from imp import reload -# except ImportError: -# pass from babel import Locale as LC from babel.dates import format_datetime diff --git a/cps/config_sql.py b/cps/config_sql.py index 37ea77e5..b99351cd 100644 --- a/cps/config_sql.py +++ b/cps/config_sql.py @@ -52,7 +52,7 @@ class _Settings(_Base): config_random_books = Column(Integer, default=4) config_authors_max = Column(Integer, default=0) config_read_column = Column(Integer, default=0) - config_title_regex = Column(String, default=u'^(A|The|An|Der|Die|Das|Den|Ein|Eine|Einen|Dem|Des|Einem|Eines)\s+') + config_title_regex = Column(String, default=r'^(A|The|An|Der|Die|Das|Den|Ein|Eine|Einen|Dem|Des|Einem|Eines)\s+') config_log_level = Column(SmallInteger, default=logger.DEFAULT_LOG_LEVEL) config_access_log = Column(SmallInteger, default=0) config_uploading = Column(SmallInteger, default=0) @@ -106,7 +106,6 @@ class _Settings(_Base): # Class holds all application specific settings in calibre-web class _ConfigSQL(object): - # pylint: disable=no-member def __init__(self, session): self._session = session self._settings = None @@ -226,8 +225,14 @@ class _ConfigSQL(object): if self.config_google_drive_watch_changes_response: self.config_google_drive_watch_changes_response = json.loads(self.config_google_drive_watch_changes_response) - self.db_configured = (self.config_calibre_dir and - (not self.config_use_google_drive or os.path.exists(self.config_calibre_dir + '/metadata.db'))) + + have_metadata_db = bool(self.config_calibre_dir) + if have_metadata_db: + if not self.config_use_google_drive: + db_file = os.path.join(self.config_calibre_dir, 'metadata.db') + have_metadata_db = os.path.isfile(db_file) + self.db_configured = have_metadata_db + logger.setup(self.config_logfile, self.config_log_level) def save(self): @@ -264,6 +269,7 @@ def _migrate_table(session, orm_class): log.debug("%s: %s", column_name, err) column_default = "" if column.default is None else ("DEFAULT %r" % column.default.arg) alter_table = "ALTER TABLE %s ADD COLUMN `%s` %s %s" % (orm_class.__tablename__, column_name, column.type, column_default) + log.debug(alter_table) session.execute(alter_table) changed = True diff --git a/cps/db.py b/cps/db.py index edcdef63..1ed56234 100755 --- a/cps/db.py +++ b/cps/db.py @@ -407,16 +407,14 @@ def setup_db(config): def dispose(): global session - engine = None - if session: - engine = session.bind - try: session.close() - except: pass - session = None - - if engine: - try: engine.dispose() + old_session = session + session = None + if old_session: + try: old_session.close() except: pass + if old_session.bind: + try: old_session.bind.dispose() + except: pass for attr in list(Books.__dict__.keys()): if attr.startswith("custom_column_"): diff --git a/cps/logger.py b/cps/logger.py index 3a540683..50fab983 100644 --- a/cps/logger.py +++ b/cps/logger.py @@ -97,15 +97,20 @@ def setup(log_file, log_level=None): ''' log_file = _absolute_log_file(log_file, DEFAULT_LOG_FILE) + log_level = log_level or DEFAULT_LOG_LEVEL + logging.getLogger(__package__).setLevel(log_level) + r = logging.root - r.setLevel(log_level or DEFAULT_LOG_LEVEL) + if log_level >= logging.INFO or os.environ.get('FLASK_DEBUG'): + # avoid spamming the log with debug messages from libraries + r.setLevel(log_level) previous_handler = r.handlers[0] if r.handlers else None if previous_handler: # if the log_file has not changed, don't create a new handler if getattr(previous_handler, 'baseFilename', None) == log_file: return - r.debug("logging to %s level %s", log_file, r.level) + logging.debug("logging to %s level %s", log_file, r.level) if log_file == LOG_TO_STDERR: file_handler = StreamHandler() diff --git a/cps/ub.py b/cps/ub.py index 5d0b8c40..d87b5a6a 100644 --- a/cps/ub.py +++ b/cps/ub.py @@ -478,13 +478,11 @@ def init_db(app_db_path): def dispose(): global session - engine = None - if session: - engine = session.bind - try: session.close() - except: pass - session = None - - if engine: - try: engine.dispose() + old_session = session + session = None + if old_session: + try: old_session.close() except: pass + if old_session.bind: + try: old_session.bind.dispose() + except: pass