Mercurial > p > roundup > code
annotate scripts/dump_dbm_sessions_db.py @ 8478:ed4ef394d5d6
doc: initial attempt to document setup of pgp support for email.
Used an AI assistant to help write this. Basic gpg commands seem to
work, but I have not tested this totally. Docs basically follow the
setup used for pgp testing in the test suite.
It looks like roundup accepts signed emails as well as encrypted
and signed emails. But it does not generate signed emails.
Also it looks like there is no PGP support for alternate email
addresses. Only primary addresses can do PGP emails.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Sat, 15 Nov 2025 16:59:24 -0500 |
| parents | 9ba04f37896f |
| children |
| rev | line source |
|---|---|
|
6571
cd408eb748dd
Add small utility script for dumping dbm based databases.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
1 #! /usr/bin/env python3 |
|
cd408eb748dd
Add small utility script for dumping dbm based databases.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
2 """Usage: dump_dbm_sessions_db.py [filename] |
|
cd408eb748dd
Add small utility script for dumping dbm based databases.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
3 |
|
cd408eb748dd
Add small utility script for dumping dbm based databases.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
4 Simple script to dump the otks and sessions dbm databases. Dumps |
|
cd408eb748dd
Add small utility script for dumping dbm based databases.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
5 sessions db in current directory if no argument is given. |
|
cd408eb748dd
Add small utility script for dumping dbm based databases.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
6 |
|
cd408eb748dd
Add small utility script for dumping dbm based databases.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
7 Dump format: |
|
cd408eb748dd
Add small utility script for dumping dbm based databases.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
8 |
|
cd408eb748dd
Add small utility script for dumping dbm based databases.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
9 key: <timestamp> data |
|
cd408eb748dd
Add small utility script for dumping dbm based databases.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
10 |
|
cd408eb748dd
Add small utility script for dumping dbm based databases.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
11 where <timestamp> is the human readable __timestamp decoded from the |
|
6799
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
12 data object. Data object is dumped in json format. With pretty print |
|
6571
cd408eb748dd
Add small utility script for dumping dbm based databases.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
13 |
|
6799
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
14 key: |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
15 <timestamp> |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
16 { |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
17 key: val, |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
18 ... |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
19 } |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
20 |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
21 if data is not a python object, print will be key: data or |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
22 key: |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
23 data |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
24 |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
25 if pretty printed. |
| 6577 | 26 """ |
|
6571
cd408eb748dd
Add small utility script for dumping dbm based databases.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
27 |
| 7780 | 28 import argparse |
| 29 import dbm | |
| 30 import json | |
| 31 import marshal | |
| 32 import os | |
| 33 import sys | |
|
6571
cd408eb748dd
Add small utility script for dumping dbm based databases.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
34 from datetime import datetime |
|
cd408eb748dd
Add small utility script for dumping dbm based databases.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
35 |
| 7780 | 36 |
|
6799
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
37 def indent(text, amount, ch=" "): |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
38 """ Found at: https://stackoverflow.com/a/8348914 |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
39 """ |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
40 padding = amount * ch |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
41 return ''.join(padding+line for line in text.splitlines(True)) |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
42 |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
43 def print_marshal(k): |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
44 d = marshal.loads(db[k]) |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
45 try: |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
46 t = datetime.fromtimestamp(d['__timestamp']) |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
47 except (KeyError, TypeError): |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
48 # TypeError raised if marshalled data is not a dict (list, tuple etc) |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
49 t = "no_timestamp" |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
50 if args.pretty: |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
51 print("%s:\n %s\n%s"%(k, t, indent(json.dumps( |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
52 d, sort_keys=True, indent=4), 4))) |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
53 else: |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
54 print("%s: %s %s"%(k, t, d)) |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
55 |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
56 def print_raw(k): |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
57 if args.pretty: |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
58 print("%s:\n %s"%(k, db[k])) |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
59 else: |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
60 print("%s: %s"%(k, db[k])) |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
61 |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
62 parser = argparse.ArgumentParser( |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
63 description='Dump DBM files used by Roundup in storage order.') |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
64 parser.add_argument('-k', '--key', action="append", |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
65 help='dump the entry for a key, can be used multiple times.') |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
66 parser.add_argument('-K', '--keysonly', action='store_true', |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
67 help='print the database keys, sorted in byte order.') |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
68 parser.add_argument('-p', '--pretty', action='store_true', |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
69 help='pretty print the output rather than printing on one line.') |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
70 parser.add_argument('file', nargs='?', |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
71 help='file to be dumped ("sessions" if not provided)') |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
72 args = parser.parse_args() |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
73 |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
74 if args.file: |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
75 file = args.file |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
76 else: |
|
6571
cd408eb748dd
Add small utility script for dumping dbm based databases.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
77 file="sessions" |
|
cd408eb748dd
Add small utility script for dumping dbm based databases.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
78 |
|
cd408eb748dd
Add small utility script for dumping dbm based databases.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
79 try: |
|
cd408eb748dd
Add small utility script for dumping dbm based databases.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
80 db = dbm.open(file) |
|
6799
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
81 except Exception as e: |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
82 print("Unable to open database for %s: %s"%(file, e)) |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
83 try: |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
84 os.stat(file) |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
85 print(" perhaps file is invalid or was created with a different version of Python?") |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
86 except OSError: |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
87 # the file does exist on disk. |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
88 pass |
| 7780 | 89 sys.exit(1) |
|
6799
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
90 |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
91 if args.keysonly: |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
92 for k in sorted(db.keys()): |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
93 print("%s"%k) |
| 7780 | 94 sys.exit(0) |
|
6799
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
95 |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
96 if args.key: |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
97 for k in args.key: |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
98 try: |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
99 print_marshal(k) |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
100 except (ValueError): |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
101 print_raw(k) |
| 7780 | 102 sys.exit(0) |
|
6571
cd408eb748dd
Add small utility script for dumping dbm based databases.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
103 |
|
cd408eb748dd
Add small utility script for dumping dbm based databases.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
104 k = db.firstkey() |
|
cd408eb748dd
Add small utility script for dumping dbm based databases.
John Rouillard <rouilj@ieee.org>
parents:
diff
changeset
|
105 while k is not None: |
|
6799
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
106 try: |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
107 print_marshal(k) |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
108 except (ValueError): # ValueError marshal.loads failed |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
109 print_raw(k) |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
110 |
|
1188bb423f92
Script dumps dbm files without marshalled data like _ids
John Rouillard <rouilj@ieee.org>
parents:
6577
diff
changeset
|
111 k = db.nextkey(k) |
