Mercurial > p > roundup > code
diff roundup/backends/sessions_dbm.py @ 6823:fe0091279f50
Refactor session db logging and key generation for sessions/otks
While I was working on the redis sessiondb stuff, I noticed that
log_wanrning, get_logger ... was duplicated. Also there was code to
generate a unique key for otks that was duplicated.
Changes:
creating new sessions_common.py and SessionsCommon class to provide
methods:
log_warning, log_info, log_debug, get_logger, getUniqueKey
getUniqueKey method is closer to the method used to make
session keys in client.py.
sessions_common.py now report when random_.py chooses a weak
random number generator. Removed same from rest.py.
get_logger reconciles all logging under
roundup.hyperdb.backends.<name of BasicDatabase class>
some backends used to log to root logger.
have BasicDatabase in other sessions_*.py modules inherit from
SessionCommon.
change logging to use log_* methods.
In addition:
remove unused imports reported by flake8 and other formatting
changes
modify actions.py, rest.py, templating.py to use getUniqueKey
method.
add tests for new methods
test_redis_session.py
swap out ModuleNotFoundError for ImportError to prevent crash in
python2 when redis is not present.
allow injection of username:password or just password into redis
connection URL. set pytest_redis_pw envirnment variable to password
or user:password when running test.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Sun, 07 Aug 2022 01:51:11 -0400 |
| parents | 375d40a9e730 |
| children | 39c482e6a246 |
line wrap: on
line diff
--- a/roundup/backends/sessions_dbm.py Sun Aug 07 01:26:30 2022 -0400 +++ b/roundup/backends/sessions_dbm.py Sun Aug 07 01:51:11 2022 -0400 @@ -6,16 +6,17 @@ """ __docformat__ = 'restructuredtext' -import os, marshal, time, logging, random +import marshal, os, random, time from roundup.anypy.html import html_escape as escape from roundup import hyperdb from roundup.i18n import _ from roundup.anypy.dbm_ import anydbm, whichdb +from roundup.backends.sessions_common import SessionCommon -class BasicDatabase: +class BasicDatabase(SessionCommon): ''' Provide a nice encapsulation of an anydbm store. Keys are id strings, values are automatically marshalled data. @@ -88,7 +89,7 @@ def set(self, infoid, **newvalues): db = self.opendb('c') - timestamp=None + timestamp = None try: if infoid in db: values = marshal.loads(db[infoid]) @@ -147,7 +148,6 @@ dbm = __import__(db_type) retries_left = 15 - logger = logging.getLogger('roundup.hyperdb.backend.sessions') while True: try: handle = dbm.open(path, mode) @@ -157,14 +157,16 @@ # [Errno 11] Resource temporarily unavailable retry # FIXME: make this more specific if retries_left < 10: - logger.warning('dbm.open failed on ...%s, retry %s left: %s, %s'%(path[-15:],15-retries_left,retries_left,e)) + self.log_warning( + 'dbm.open failed on ...%s, retry %s left: %s, %s' % + (path[-15:], 15-retries_left, retries_left, e)) if retries_left < 0: # We have used up the retries. Reraise the exception # that got us here. raise else: # stagger retry to try to get around thundering herd issue. - time.sleep(random.randint(0,25)*.005) + time.sleep(random.randint(0, 25)*.005) retries_left = retries_left - 1 continue # the while loop return handle
