Mercurial > p > roundup > code
annotate roundup/backends/sessions_rdbms.py @ 8594:be128eb0a4e1
chore(ruff): refine imports and spacing fix.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Sat, 25 Apr 2026 18:05:41 -0400 |
| parents | bd97eaffe900 |
| children |
| rev | line source |
|---|---|
|
2082
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1 """This module defines a very basic store that's used by the CGI interface |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2 to store session and one-time-key information. |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3 |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
4 Yes, it's called "sessions" - because originally it only defined a session |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
5 class. It's now also used for One Time Key handling too. |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
6 """ |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
7 __docformat__ = 'restructuredtext' |
|
8587
31675062230a
feature: replace eval with ast.literal_eval
John Rouillard <rouilj@ieee.org>
parents:
8553
diff
changeset
|
8 import ast |
|
6823
fe0091279f50
Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents:
6808
diff
changeset
|
9 import time |
|
5806
abee2c2c822e
More cgi.escape/html.escape fixes.
John Rouillard <rouilj@ieee.org>
parents:
5319
diff
changeset
|
10 |
|
5837
883c9e90b403
Fix problem with cgi.escape being depricated a different way. This way
John Rouillard <rouilj@ieee.org>
parents:
5806
diff
changeset
|
11 from roundup.anypy.html import html_escape as escape |
|
6823
fe0091279f50
Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents:
6808
diff
changeset
|
12 from roundup.backends.sessions_common import SessionCommon |
|
2082
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
13 |
|
8593
bd97eaffe900
refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents:
8587
diff
changeset
|
14 |
|
8553
ee17f62c8341
bug: improve security of eval'ed of session database data. (hexora)
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
15 def safe_eval(s): |
|
8587
31675062230a
feature: replace eval with ast.literal_eval
John Rouillard <rouilj@ieee.org>
parents:
8553
diff
changeset
|
16 """Restricted eval to eval a repr of a dict of constants. |
|
31675062230a
feature: replace eval with ast.literal_eval
John Rouillard <rouilj@ieee.org>
parents:
8553
diff
changeset
|
17 """ |
|
31675062230a
feature: replace eval with ast.literal_eval
John Rouillard <rouilj@ieee.org>
parents:
8553
diff
changeset
|
18 return ast.literal_eval(s) |
|
6823
fe0091279f50
Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents:
6808
diff
changeset
|
19 |
|
8593
bd97eaffe900
refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents:
8587
diff
changeset
|
20 |
|
6823
fe0091279f50
Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents:
6808
diff
changeset
|
21 class BasicDatabase(SessionCommon): |
|
2082
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
22 ''' Provide a nice encapsulation of an RDBMS table. |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
23 |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
24 Keys are id strings, values are automatically marshalled data. |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
25 ''' |
|
8593
bd97eaffe900
refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents:
8587
diff
changeset
|
26 """ In methods the variables ``n`` and ``a`` should be used |
|
bd97eaffe900
refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents:
8587
diff
changeset
|
27 only for the values of self.name and self.db.arg |
|
bd97eaffe900
refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents:
8587
diff
changeset
|
28 respectively. Only these values should be interpolated |
|
bd97eaffe900
refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents:
8587
diff
changeset
|
29 into a sql string as they are safe. |
|
bd97eaffe900
refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents:
8587
diff
changeset
|
30 |
|
bd97eaffe900
refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents:
8587
diff
changeset
|
31 self.name is ``otk`` or ``session`` for the otk or |
|
bd97eaffe900
refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents:
8587
diff
changeset
|
32 session databases. |
|
bd97eaffe900
refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents:
8587
diff
changeset
|
33 |
|
bd97eaffe900
refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents:
8587
diff
changeset
|
34 self.db.arg is ``%s`` or ``?`` and is the placeholder for |
|
bd97eaffe900
refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents:
8587
diff
changeset
|
35 parameterized queries in mysql/postgresql or sqlite |
|
bd97eaffe900
refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents:
8587
diff
changeset
|
36 respectively. |
|
bd97eaffe900
refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents:
8587
diff
changeset
|
37 """ |
|
bd97eaffe900
refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents:
8587
diff
changeset
|
38 |
|
5252
0b154486ed38
Make sure that the name property is initialized to none.
John Rouillard <rouilj@ieee.org>
parents:
5213
diff
changeset
|
39 name = None |
|
6823
fe0091279f50
Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents:
6808
diff
changeset
|
40 |
|
2082
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
41 def __init__(self, db): |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
42 self.db = db |
|
5319
62de601bdf6f
Fix commits although a Reject exception is raised
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5252
diff
changeset
|
43 self.conn, self.cursor = self.db.sql_open_connection() |
|
2082
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
44 |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
45 def clear(self): |
|
6823
fe0091279f50
Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents:
6808
diff
changeset
|
46 self.cursor.execute('delete from %ss' % self.name) |
|
2082
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
47 |
|
2169
12cd4fa91eb7
OTK generation was busted (thanks Stuart D. Gathman)
Richard Jones <richard@users.sourceforge.net>
parents:
2082
diff
changeset
|
48 def exists(self, infoid): |
|
12cd4fa91eb7
OTK generation was busted (thanks Stuart D. Gathman)
Richard Jones <richard@users.sourceforge.net>
parents:
2082
diff
changeset
|
49 n = self.name |
|
6823
fe0091279f50
Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents:
6808
diff
changeset
|
50 self.cursor.execute('select count(*) from %ss where %s_key=%s' % |
|
fe0091279f50
Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents:
6808
diff
changeset
|
51 (n, n, self.db.arg), (infoid,)) |
|
2244
ac4f295499a4
fixed journal marshalling in RDBMS backends [SF#943627]
Richard Jones <richard@users.sourceforge.net>
parents:
2169
diff
changeset
|
52 return int(self.cursor.fetchone()[0]) |
|
2169
12cd4fa91eb7
OTK generation was busted (thanks Stuart D. Gathman)
Richard Jones <richard@users.sourceforge.net>
parents:
2082
diff
changeset
|
53 |
|
2082
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
54 _marker = [] |
|
6823
fe0091279f50
Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents:
6808
diff
changeset
|
55 |
|
2082
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
56 def get(self, infoid, value, default=_marker): |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
57 n = self.name |
|
6823
fe0091279f50
Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents:
6808
diff
changeset
|
58 self.cursor.execute('select %s_value from %ss where %s_key=%s' % |
|
fe0091279f50
Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents:
6808
diff
changeset
|
59 (n, n, n, self.db.arg), (infoid,)) |
|
2082
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
60 res = self.cursor.fetchone() |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
61 if not res: |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
62 if default != self._marker: |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
63 return default |
|
8593
bd97eaffe900
refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents:
8587
diff
changeset
|
64 raise KeyError('No such %s "%s"' % (n, escape(infoid))) |
|
8553
ee17f62c8341
bug: improve security of eval'ed of session database data. (hexora)
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
65 values = safe_eval(res[0]) |
|
2082
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
66 return values.get(value, None) |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
67 |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
68 def getall(self, infoid): |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
69 n = self.name |
|
6823
fe0091279f50
Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents:
6808
diff
changeset
|
70 self.cursor.execute('select %s_value from %ss where %s_key=%s' % |
|
fe0091279f50
Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents:
6808
diff
changeset
|
71 (n, n, n, self.db.arg), (infoid,)) |
|
2082
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
72 res = self.cursor.fetchone() |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
73 if not res: |
|
8593
bd97eaffe900
refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents:
8587
diff
changeset
|
74 raise KeyError('No such %s "%s"' % (n, escape(infoid))) |
|
8553
ee17f62c8341
bug: improve security of eval'ed of session database data. (hexora)
John Rouillard <rouilj@ieee.org>
parents:
6823
diff
changeset
|
75 return safe_eval(res[0]) |
|
2082
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
76 |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
77 def set(self, infoid, **newvalues): |
|
5213
bf13b28156f3
This change didn't make it into the last commit. Allow the user to
John Rouillard <rouilj@ieee.org>
parents:
4585
diff
changeset
|
78 """ Store all newvalues under key infoid with a timestamp in database. |
|
bf13b28156f3
This change didn't make it into the last commit. Allow the user to
John Rouillard <rouilj@ieee.org>
parents:
4585
diff
changeset
|
79 |
|
6823
fe0091279f50
Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents:
6808
diff
changeset
|
80 If newvalues['__timestamp'] exists and is representable as |
|
fe0091279f50
Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents:
6808
diff
changeset
|
81 a floating point number (i.e. could be generated by time.time()), |
|
fe0091279f50
Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents:
6808
diff
changeset
|
82 that value is used for the <name>_time column in the database. |
|
5213
bf13b28156f3
This change didn't make it into the last commit. Allow the user to
John Rouillard <rouilj@ieee.org>
parents:
4585
diff
changeset
|
83 """ |
|
2082
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
84 c = self.cursor |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
85 n = self.name |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
86 a = self.db.arg |
|
6823
fe0091279f50
Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents:
6808
diff
changeset
|
87 c.execute('select %s_value from %ss where %s_key=%s' % |
|
fe0091279f50
Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents:
6808
diff
changeset
|
88 (n, n, n, a), (infoid,)) |
|
2082
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
89 res = c.fetchone() |
|
6808
375d40a9e730
Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents:
6803
diff
changeset
|
90 |
|
8593
bd97eaffe900
refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents:
8587
diff
changeset
|
91 values = safe_eval(res[0]) if res else {} |
|
bd97eaffe900
refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents:
8587
diff
changeset
|
92 |
|
6823
fe0091279f50
Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents:
6808
diff
changeset
|
93 timestamp = time.time() |
|
6808
375d40a9e730
Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents:
6803
diff
changeset
|
94 |
|
375d40a9e730
Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents:
6803
diff
changeset
|
95 if '__timestamp' in newvalues: |
|
375d40a9e730
Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents:
6803
diff
changeset
|
96 try: |
|
375d40a9e730
Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents:
6803
diff
changeset
|
97 # __timestamp must be representable as a float. Check it. |
|
375d40a9e730
Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents:
6803
diff
changeset
|
98 timestamp = float(newvalues['__timestamp']) |
|
375d40a9e730
Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents:
6803
diff
changeset
|
99 except ValueError: |
|
375d40a9e730
Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents:
6803
diff
changeset
|
100 if res: |
|
375d40a9e730
Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents:
6803
diff
changeset
|
101 # keep the original timestamp |
|
8593
bd97eaffe900
refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents:
8587
diff
changeset
|
102 del newvalues['__timestamp'] |
|
6808
375d40a9e730
Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents:
6803
diff
changeset
|
103 else: |
|
375d40a9e730
Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents:
6803
diff
changeset
|
104 # here timestamp is the new timestamp |
|
375d40a9e730
Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents:
6803
diff
changeset
|
105 newvalues['__timestamp'] = timestamp |
|
2082
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
106 values.update(newvalues) |
|
6803
db437dd13ed5
set method doesn't include user set timestamp if update
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
107 if res: |
|
db437dd13ed5
set method doesn't include user set timestamp if update
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
108 sql = ('update %ss set %s_value=%s, %s_time=%s ' |
|
6823
fe0091279f50
Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents:
6808
diff
changeset
|
109 'where %s_key=%s' % (n, n, a, n, a, n, a)) |
|
6803
db437dd13ed5
set method doesn't include user set timestamp if update
John Rouillard <rouilj@ieee.org>
parents:
5837
diff
changeset
|
110 args = (repr(values), timestamp, infoid) |
|
2082
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
111 else: |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
112 sql = 'insert into %ss (%s_key, %s_time, %s_value) '\ |
|
6823
fe0091279f50
Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents:
6808
diff
changeset
|
113 'values (%s, %s, %s)' % (n, n, n, n, a, a, a) |
|
5213
bf13b28156f3
This change didn't make it into the last commit. Allow the user to
John Rouillard <rouilj@ieee.org>
parents:
4585
diff
changeset
|
114 args = (infoid, timestamp, repr(values)) |
|
2082
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
115 c.execute(sql, args) |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
116 |
|
4390
936bd9bf732d
session API consistency
Richard Jones <richard@users.sourceforge.net>
parents:
4362
diff
changeset
|
117 def list(self): |
|
936bd9bf732d
session API consistency
Richard Jones <richard@users.sourceforge.net>
parents:
4362
diff
changeset
|
118 c = self.cursor |
|
936bd9bf732d
session API consistency
Richard Jones <richard@users.sourceforge.net>
parents:
4362
diff
changeset
|
119 n = self.name |
|
6823
fe0091279f50
Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents:
6808
diff
changeset
|
120 c.execute('select %s_key from %ss' % (n, n)) |
|
4390
936bd9bf732d
session API consistency
Richard Jones <richard@users.sourceforge.net>
parents:
4362
diff
changeset
|
121 return [res[0] for res in c.fetchall()] |
|
936bd9bf732d
session API consistency
Richard Jones <richard@users.sourceforge.net>
parents:
4362
diff
changeset
|
122 |
|
2082
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
123 def destroy(self, infoid): |
|
8593
bd97eaffe900
refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents:
8587
diff
changeset
|
124 n = self.name |
|
6823
fe0091279f50
Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents:
6808
diff
changeset
|
125 self.cursor.execute('delete from %ss where %s_key=%s' % |
|
8593
bd97eaffe900
refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents:
8587
diff
changeset
|
126 (n, n, self.db.arg), (infoid,)) |
|
2082
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
127 |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
128 def updateTimestamp(self, infoid): |
|
3848
7ad206564007
Use """ instead of ''' in comments, or emacs python-mode bails out.
Erik Forsberg <forsberg@users.sourceforge.net>
parents:
3606
diff
changeset
|
129 """ don't update every hit - once a minute should be OK """ |
|
8593
bd97eaffe900
refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents:
8587
diff
changeset
|
130 n = self.name |
|
bd97eaffe900
refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents:
8587
diff
changeset
|
131 a = self.db.arg |
|
3606
04dc3eef67b7
reduced frequency of session timestamp update
Richard Jones <richard@users.sourceforge.net>
parents:
2244
diff
changeset
|
132 now = time.time() |
|
6823
fe0091279f50
Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents:
6808
diff
changeset
|
133 self.cursor.execute('''update %ss set %s_time=%s where %s_key=%s ''' |
|
fe0091279f50
Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents:
6808
diff
changeset
|
134 '''and %s_time < %s''' % |
|
8593
bd97eaffe900
refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents:
8587
diff
changeset
|
135 (n, n, a, n, a, n, a), |
|
bd97eaffe900
refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents:
8587
diff
changeset
|
136 (now, infoid, now - 60)) |
|
2082
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
137 |
|
3989
0112e9e1d068
improvements to session management
Richard Jones <richard@users.sourceforge.net>
parents:
3920
diff
changeset
|
138 def clean(self): |
|
0112e9e1d068
improvements to session management
Richard Jones <richard@users.sourceforge.net>
parents:
3920
diff
changeset
|
139 ''' Remove session records that haven't been used for a week. ''' |
|
8593
bd97eaffe900
refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents:
8587
diff
changeset
|
140 n = self.name |
|
bd97eaffe900
refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents:
8587
diff
changeset
|
141 a = self.db.arg |
|
3989
0112e9e1d068
improvements to session management
Richard Jones <richard@users.sourceforge.net>
parents:
3920
diff
changeset
|
142 now = time.time() |
|
8593
bd97eaffe900
refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents:
8587
diff
changeset
|
143 week = 60 * 60 * 24 * 7 |
|
3989
0112e9e1d068
improvements to session management
Richard Jones <richard@users.sourceforge.net>
parents:
3920
diff
changeset
|
144 old = now - week |
|
6823
fe0091279f50
Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents:
6808
diff
changeset
|
145 self.cursor.execute('delete from %ss where %s_time < %s' % |
|
8593
bd97eaffe900
refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents:
8587
diff
changeset
|
146 (n, n, a), (old, )) |
|
2082
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
147 |
|
5319
62de601bdf6f
Fix commits although a Reject exception is raised
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5252
diff
changeset
|
148 def commit(self): |
|
6823
fe0091279f50
Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents:
6808
diff
changeset
|
149 self.log_info('commit %s' % self.name) |
|
5319
62de601bdf6f
Fix commits although a Reject exception is raised
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5252
diff
changeset
|
150 self.conn.commit() |
|
62de601bdf6f
Fix commits although a Reject exception is raised
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5252
diff
changeset
|
151 self.cursor = self.conn.cursor() |
|
62de601bdf6f
Fix commits although a Reject exception is raised
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5252
diff
changeset
|
152 |
|
6808
375d40a9e730
Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents:
6803
diff
changeset
|
153 def lifetime(self, item_lifetime=0): |
|
375d40a9e730
Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents:
6803
diff
changeset
|
154 """Return the proper timestamp for a key with key_lifetime specified |
|
375d40a9e730
Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents:
6803
diff
changeset
|
155 in seconds. Default lifetime is 0. |
|
375d40a9e730
Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents:
6803
diff
changeset
|
156 """ |
|
375d40a9e730
Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents:
6803
diff
changeset
|
157 now = time.time() |
|
8593
bd97eaffe900
refactor(ruff): cleanup ruff issues and optimize some code.
John Rouillard <rouilj@ieee.org>
parents:
8587
diff
changeset
|
158 week = 60 * 60 * 24 * 7 |
|
6808
375d40a9e730
Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents:
6803
diff
changeset
|
159 return now - week + item_lifetime |
|
375d40a9e730
Add tests to BasicDatabase and merge implementations
John Rouillard <rouilj@ieee.org>
parents:
6803
diff
changeset
|
160 |
|
5319
62de601bdf6f
Fix commits although a Reject exception is raised
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5252
diff
changeset
|
161 def close(self): |
|
62de601bdf6f
Fix commits although a Reject exception is raised
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5252
diff
changeset
|
162 self.conn.close() |
|
62de601bdf6f
Fix commits although a Reject exception is raised
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5252
diff
changeset
|
163 |
|
6823
fe0091279f50
Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents:
6808
diff
changeset
|
164 |
|
2082
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
165 class Sessions(BasicDatabase): |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
166 name = 'session' |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
167 |
|
6823
fe0091279f50
Refactor session db logging and key generation for sessions/otks
John Rouillard <rouilj@ieee.org>
parents:
6808
diff
changeset
|
168 |
|
2082
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
169 class OneTimeKeys(BasicDatabase): |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
170 name = 'otk' |
|
c091cacdc505
Finished implementation of session and one-time-key stores for RDBMS backends.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
171 |
|
3920
416606b09b27
fix vim modelines
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3918
diff
changeset
|
172 # vim: set et sts=4 sw=4 : |
