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

Roundup Issue Tracker: http://roundup-tracker.org/