Mercurial > p > roundup > code
comparison roundup/backends/sessions_redis.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 | 3f60a71b0812 |
| children | dd15c307c409 |
comparison
equal
deleted
inserted
replaced
| 6822:5053ee6c846b | 6823:fe0091279f50 |
|---|---|
| 16 session_rdbms. So use marshal even though it is impossible | 16 session_rdbms. So use marshal even though it is impossible |
| 17 to read when viewing (using redis-cli). | 17 to read when viewing (using redis-cli). |
| 18 """ | 18 """ |
| 19 __docformat__ = 'restructuredtext' | 19 __docformat__ = 'restructuredtext' |
| 20 | 20 |
| 21 import logging, marshal, redis, time | 21 import marshal, redis, time |
| 22 | 22 |
| 23 from roundup.anypy.html import html_escape as escape | 23 from roundup.anypy.html import html_escape as escape |
| 24 | 24 |
| 25 from roundup.i18n import _ | 25 from roundup.i18n import _ |
| 26 | 26 |
| 27 | 27 from roundup.backends.sessions_common import SessionCommon |
| 28 class BasicDatabase: | 28 |
| 29 | |
| 30 class BasicDatabase(SessionCommon): | |
| 29 ''' Provide a nice encapsulation of a redis store. | 31 ''' Provide a nice encapsulation of a redis store. |
| 30 | 32 |
| 31 Keys are id strings, values are automatically marshalled data. | 33 Keys are id strings, values are automatically marshalled data. |
| 32 ''' | 34 ''' |
| 33 name = None | 35 name = None |
| 183 # raise exceptions tht bubble up and result in mail | 185 # raise exceptions tht bubble up and result in mail |
| 184 # to admin. | 186 # to admin. |
| 185 transaction.execute() | 187 transaction.execute() |
| 186 break | 188 break |
| 187 except redis.Exceptions.WatchError: | 189 except redis.Exceptions.WatchError: |
| 188 logging.getLogger('roundup.redis').info( | 190 self.log_info( |
| 189 _('Key %(key)s changed in %(name)s db' % | 191 _('Key %(key)s changed in %(name)s db' % |
| 190 {"key": escape(infoid), "name": self.name}) | 192 {"key": escape(infoid), "name": self.name}) |
| 191 ) | 193 ) |
| 192 else: | 194 else: |
| 193 raise Exception(_("Redis set failed afer 3 retries")) | 195 raise Exception(_("Redis set failed afer 3 retries")) |
| 194 | 196 |
| 195 def list(self): | 197 def list(self): |
