Mercurial > p > roundup > code
annotate roundup/test/memorydb.py @ 6438:b671ed2b49b2
2551143: Problem with installing external trackers ...
the change from distutils to setuptools moved the directories for the
templates, man pages and docs under the install directory. The install
directory is buried in the directory tree under
/usr/ib/python/.../roundup...egg/...
This patch tries to put them under:
the directory specified by --prefix argument
the python platform library prefix that prefixes /lib
in sysconfig.getpath('platlib')
the directory returned by sys.prefix.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Sat, 19 Jun 2021 14:22:36 -0400 |
| parents | 7f00fc5958ca |
| children | 087cae2fbcea |
| rev | line source |
|---|---|
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1 '''Implement an in-memory hyperdb for testing purposes. |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2 ''' |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
4 import shutil |
|
5077
88fc7202f87d
Remove 'import *' statement from test/memorydb.py
John Kristensen <john@jerrykan.com>
parents:
4795
diff
changeset
|
5 import os |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
6 |
|
5077
88fc7202f87d
Remove 'import *' statement from test/memorydb.py
John Kristensen <john@jerrykan.com>
parents:
4795
diff
changeset
|
7 from roundup import date |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
8 from roundup import hyperdb |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
9 from roundup import roundupdb |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
10 from roundup import security |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
11 from roundup import password |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
12 from roundup import configuration |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
13 from roundup.backends import back_anydbm |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
14 from roundup.backends import indexer_dbm |
|
4349
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
15 from roundup.backends import sessions_dbm |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
16 from roundup.backends import indexer_common |
|
4349
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
17 from roundup.support import ensureParentsExist |
|
5462
d0fd8bb64c3f
fixed memorydb string encoding
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5395
diff
changeset
|
18 from roundup.anypy.strings import s2b |
| 6361 | 19 from roundup.test.tx_Source_detector import init as tx_Source_init |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
20 |
| 6361 | 21 default_prefix = '../../share/roundup/templates/classic' |
| 22 | |
| 23 def new_config(debug=False, prefix=default_prefix): | |
| 24 if not prefix.startswith('/'): | |
| 25 prefix = os.path.join (os.path.dirname(__file__), prefix) | |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
26 config = configuration.CoreConfig() |
| 6361 | 27 config.detectors = configuration.UserConfig( |
| 28 os.path.join(prefix, "detectors/config.ini")) | |
| 29 config.ext = configuration.UserConfig( | |
| 30 os.path.join(prefix, "extensions/config.ini")) | |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
31 config.DATABASE = "db" |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
32 #config.logging = MockNull() |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
33 # these TRACKER_WEB and MAIL_DOMAIN values are used in mailgw tests |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4350
diff
changeset
|
34 if debug: |
|
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4350
diff
changeset
|
35 config.LOGGING_LEVEL = "DEBUG" |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
36 config.MAIL_DOMAIN = "your.tracker.email.domain.example" |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
37 config.TRACKER_WEB = "http://tracker.example/cgi-bin/roundup.cgi/bugs/" |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
38 return config |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
39 |
| 6361 | 40 def create(journaltag, create=True, debug=False, prefix=default_prefix): |
|
6365
7f00fc5958ca
Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6361
diff
changeset
|
41 # "Nuke" in-memory db |
|
7f00fc5958ca
Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6361
diff
changeset
|
42 db_nuke('') |
|
7f00fc5958ca
Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6361
diff
changeset
|
43 |
|
4358
887a153cedec
The email for the first message on an issue...
Richard Jones <richard@users.sourceforge.net>
parents:
4350
diff
changeset
|
44 db = Database(new_config(debug), journaltag) |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
45 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
46 # load standard schema |
| 6361 | 47 if not prefix.startswith('/'): |
| 48 prefix = os.path.join (os.path.dirname(__file__), prefix) | |
| 49 schema = os.path.join(prefix, 'schema.py') | |
|
5077
88fc7202f87d
Remove 'import *' statement from test/memorydb.py
John Kristensen <john@jerrykan.com>
parents:
4795
diff
changeset
|
50 vars = hyperdb.__dict__ |
|
88fc7202f87d
Remove 'import *' statement from test/memorydb.py
John Kristensen <john@jerrykan.com>
parents:
4795
diff
changeset
|
51 vars['Class'] = Class |
|
88fc7202f87d
Remove 'import *' statement from test/memorydb.py
John Kristensen <john@jerrykan.com>
parents:
4795
diff
changeset
|
52 vars['FileClass'] = FileClass |
|
88fc7202f87d
Remove 'import *' statement from test/memorydb.py
John Kristensen <john@jerrykan.com>
parents:
4795
diff
changeset
|
53 vars['IssueClass'] = IssueClass |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
54 vars['db'] = db |
|
5385
e9fb7c539a52
Python 3 preparation: use exec(compile(open().read())) instead of execfile().
Joseph Myers <jsm@polyomino.org.uk>
parents:
5381
diff
changeset
|
55 exec(compile(open(schema).read(), schema, 'exec'), vars) |
| 6361 | 56 initial_data = os.path.join(prefix, 'initial_data.py') |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
57 vars = dict(db=db, admin_email='admin@test.com', |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
58 adminpw=password.Password('sekrit')) |
|
5385
e9fb7c539a52
Python 3 preparation: use exec(compile(open().read())) instead of execfile().
Joseph Myers <jsm@polyomino.org.uk>
parents:
5381
diff
changeset
|
59 exec(compile(open(initial_data).read(), initial_data, 'exec'), vars) |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
60 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
61 # load standard detectors |
| 6361 | 62 dirname = os.path.join(prefix, 'detectors') |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
63 for fn in os.listdir(dirname): |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
64 if not fn.endswith('.py'): continue |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
65 vars = {} |
|
5385
e9fb7c539a52
Python 3 preparation: use exec(compile(open().read())) instead of execfile().
Joseph Myers <jsm@polyomino.org.uk>
parents:
5381
diff
changeset
|
66 exec(compile(open(os.path.join(dirname, fn)).read(), |
|
e9fb7c539a52
Python 3 preparation: use exec(compile(open().read())) instead of execfile().
Joseph Myers <jsm@polyomino.org.uk>
parents:
5381
diff
changeset
|
67 os.path.join(dirname, fn), 'exec'), vars) |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
68 vars['init'](db) |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
69 |
| 6361 | 70 tx_Source_init(db) |
| 4781 | 71 |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
72 ''' |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
73 status = Class(db, "status", name=String()) |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
74 status.setkey("name") |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
75 priority = Class(db, "priority", name=String(), order=String()) |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
76 priority.setkey("name") |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
77 keyword = Class(db, "keyword", name=String(), order=String()) |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
78 keyword.setkey("name") |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
79 user = Class(db, "user", username=String(), password=Password(), |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
80 assignable=Boolean(), age=Number(), roles=String(), address=String(), |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
81 supervisor=Link('user'),realname=String(),alternate_addresses=String()) |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
82 user.setkey("username") |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
83 file = FileClass(db, "file", name=String(), type=String(), |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
84 comment=String(indexme="yes"), fooz=Password()) |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
85 file_nidx = FileClass(db, "file_nidx", content=String(indexme='no')) |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
86 issue = IssueClass(db, "issue", title=String(indexme="yes"), |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
87 status=Link("status"), nosy=Multilink("user"), deadline=Date(), |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
88 foo=Interval(), files=Multilink("file"), assignedto=Link('user'), |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
89 priority=Link('priority'), spam=Multilink('msg'), |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
90 feedback=Link('msg')) |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
91 stuff = Class(db, "stuff", stuff=String()) |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
92 session = Class(db, 'session', title=String()) |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
93 msg = FileClass(db, "msg", date=Date(), |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
94 author=Link("user", do_journal='no'), |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
95 files=Multilink('file'), inreplyto=String(), |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
96 messageid=String(), summary=String(), |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
97 content=String(), |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
98 recipients=Multilink("user", do_journal='no') |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
99 ) |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
100 ''' |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
101 if create: |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
102 db.user.create(username="fred", roles='User', |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
103 password=password.Password('sekrit'), address='fred@example.com') |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
104 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
105 db.security.addPermissionToRole('User', 'Email Access') |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
106 ''' |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
107 db.security.addPermission(name='Register', klass='user') |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
108 db.security.addPermissionToRole('User', 'Web Access') |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
109 db.security.addPermissionToRole('Anonymous', 'Email Access') |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
110 db.security.addPermissionToRole('Anonymous', 'Register', 'user') |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
111 for cl in 'issue', 'file', 'msg', 'keyword': |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
112 db.security.addPermissionToRole('User', 'View', cl) |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
113 db.security.addPermissionToRole('User', 'Edit', cl) |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
114 db.security.addPermissionToRole('User', 'Create', cl) |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
115 for cl in 'priority', 'status': |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
116 db.security.addPermissionToRole('User', 'View', cl) |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
117 ''' |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
118 return db |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
119 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
120 class cldb(dict): |
|
5462
d0fd8bb64c3f
fixed memorydb string encoding
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5395
diff
changeset
|
121 def __init__(self, **values): |
|
d0fd8bb64c3f
fixed memorydb string encoding
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5395
diff
changeset
|
122 super(cldb, self).__init__() |
|
d0fd8bb64c3f
fixed memorydb string encoding
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5395
diff
changeset
|
123 for key, value in values.items(): |
|
d0fd8bb64c3f
fixed memorydb string encoding
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5395
diff
changeset
|
124 super(cldb, self).__setitem__(s2b(key), value) |
|
d0fd8bb64c3f
fixed memorydb string encoding
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5395
diff
changeset
|
125 def __getitem__(self, key): |
|
d0fd8bb64c3f
fixed memorydb string encoding
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5395
diff
changeset
|
126 return super(cldb, self).__getitem__(s2b(key)) |
|
d0fd8bb64c3f
fixed memorydb string encoding
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5395
diff
changeset
|
127 def __setitem__(self, key, value): |
|
d0fd8bb64c3f
fixed memorydb string encoding
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5395
diff
changeset
|
128 return super(cldb, self).__setitem__(s2b(key), value) |
|
d0fd8bb64c3f
fixed memorydb string encoding
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5395
diff
changeset
|
129 def __delitem__(self, key): |
|
d0fd8bb64c3f
fixed memorydb string encoding
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5395
diff
changeset
|
130 return super(cldb, self).__delitem__(s2b(key)) |
|
d0fd8bb64c3f
fixed memorydb string encoding
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5395
diff
changeset
|
131 def __contains__(self, key): |
|
d0fd8bb64c3f
fixed memorydb string encoding
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5395
diff
changeset
|
132 return super(cldb, self).__contains__(s2b(key)) |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
133 def close(self): |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
134 pass |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
135 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
136 class BasicDatabase(dict): |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
137 ''' Provide a nice encapsulation of an anydbm store. |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
138 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
139 Keys are id strings, values are automatically marshalled data. |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
140 ''' |
|
5462
d0fd8bb64c3f
fixed memorydb string encoding
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5395
diff
changeset
|
141 def __init__(self, **values): |
|
d0fd8bb64c3f
fixed memorydb string encoding
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5395
diff
changeset
|
142 super(BasicDatabase, self).__init__() |
|
d0fd8bb64c3f
fixed memorydb string encoding
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5395
diff
changeset
|
143 for k, v in values.items(): |
|
d0fd8bb64c3f
fixed memorydb string encoding
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5395
diff
changeset
|
144 super(BasicDatabase, self).__setitem__(s2b(k), v) |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
145 def __getitem__(self, key): |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
146 if key not in self: |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
147 d = self[key] = {} |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
148 return d |
|
5462
d0fd8bb64c3f
fixed memorydb string encoding
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5395
diff
changeset
|
149 return super(BasicDatabase, self).__getitem__(s2b(key)) |
|
d0fd8bb64c3f
fixed memorydb string encoding
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5395
diff
changeset
|
150 def __setitem__(self, key, value): |
|
d0fd8bb64c3f
fixed memorydb string encoding
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5395
diff
changeset
|
151 return super(BasicDatabase, self).__setitem__(s2b(key), value) |
|
d0fd8bb64c3f
fixed memorydb string encoding
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5395
diff
changeset
|
152 def __delitem__(self, key): |
|
d0fd8bb64c3f
fixed memorydb string encoding
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5395
diff
changeset
|
153 return super(BasicDatabase, self).__delitem__(s2b(key)) |
|
d0fd8bb64c3f
fixed memorydb string encoding
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5395
diff
changeset
|
154 def __contains__(self, key): |
|
d0fd8bb64c3f
fixed memorydb string encoding
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5395
diff
changeset
|
155 return super(BasicDatabase, self).__contains__(s2b(key)) |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
156 def exists(self, infoid): |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
157 return infoid in self |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
158 def get(self, infoid, value, default=None): |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
159 return self[infoid].get(value, default) |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
160 def getall(self, infoid): |
|
4389
355cd8fdeb32
memorydb API consistency fix
Richard Jones <richard@users.sourceforge.net>
parents:
4358
diff
changeset
|
161 if infoid not in self: |
|
355cd8fdeb32
memorydb API consistency fix
Richard Jones <richard@users.sourceforge.net>
parents:
4358
diff
changeset
|
162 raise KeyError(infoid) |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
163 return self[infoid] |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
164 def set(self, infoid, **newvalues): |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
165 self[infoid].update(newvalues) |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
166 def list(self): |
|
5395
23b8e6067f7c
Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5385
diff
changeset
|
167 return list(self.keys()) |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
168 def destroy(self, infoid): |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
169 del self[infoid] |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
170 def commit(self): |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
171 pass |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
172 def close(self): |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
173 pass |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
174 def updateTimestamp(self, sessid): |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
175 pass |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
176 def clean(self): |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
177 pass |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
178 |
|
4349
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
179 class Sessions(BasicDatabase, sessions_dbm.Sessions): |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
180 name = 'sessions' |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
181 |
|
4349
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
182 class OneTimeKeys(BasicDatabase, sessions_dbm.Sessions): |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
183 name = 'otks' |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
184 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
185 class Indexer(indexer_dbm.Indexer): |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
186 def __init__(self, db): |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
187 indexer_common.Indexer.__init__(self, db) |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
188 self.reindex = 0 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
189 self.quiet = 9 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
190 self.changed = 0 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
191 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
192 def load_index(self, reload=0, wordlist=None): |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
193 # Unless reload is indicated, do not load twice |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
194 if self.index_loaded() and not reload: |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
195 return 0 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
196 self.words = {} |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
197 self.files = {'_TOP':(0,None)} |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
198 self.fileids = {} |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
199 self.changed = 0 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
200 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
201 def save_index(self): |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
202 pass |
|
4349
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
203 def force_reindex(self): |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
204 # TODO I'm concerned that force_reindex may not be tested by |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
205 # testForcedReindexing if the functionality can just be removed |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
206 pass |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
207 |
|
4349
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
208 class Database(back_anydbm.Database): |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
209 """A database for storing records containing flexible data types. |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
210 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
211 Transaction stuff TODO: |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
212 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
213 - check the timestamp of the class file and nuke the cache if it's |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
214 modified. Do some sort of conflict checking on the dirty stuff. |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
215 - perhaps detect write collisions (related to above)? |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
216 """ |
|
5317
c0cda00af479
Fix tests for memorydb and anydbm backends
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5077
diff
changeset
|
217 |
|
c0cda00af479
Fix tests for memorydb and anydbm backends
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5077
diff
changeset
|
218 dbtype = "memorydb" |
|
c0cda00af479
Fix tests for memorydb and anydbm backends
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5077
diff
changeset
|
219 |
|
6365
7f00fc5958ca
Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6361
diff
changeset
|
220 # Make it a little more persistent across re-open |
|
7f00fc5958ca
Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6361
diff
changeset
|
221 memdb = {} |
|
7f00fc5958ca
Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6361
diff
changeset
|
222 |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
223 def __init__(self, config, journaltag=None): |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
224 self.config, self.journaltag = config, journaltag |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
225 self.classes = {} |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
226 self.files = {} |
|
4349
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
227 self.tx_files = {} |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
228 self.security = security.Security(self) |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
229 self.stats = {'cache_hits': 0, 'cache_misses': 0, 'get_items': 0, |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
230 'filtering': 0} |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
231 self.sessions = Sessions() |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
232 self.otks = OneTimeKeys() |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
233 self.indexer = Indexer(self) |
|
4349
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
234 |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
235 # anydbm bits |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
236 self.cache = {} # cache of nodes loaded or created |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
237 self.dirtynodes = {} # keep track of the dirty nodes by class |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
238 self.newnodes = {} # keep track of the new nodes by class |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
239 self.destroyednodes = {}# keep track of the destroyed nodes by class |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
240 self.transactions = [] |
| 4781 | 241 self.tx_Source = None |
|
6365
7f00fc5958ca
Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6361
diff
changeset
|
242 # persistence across re-open |
|
7f00fc5958ca
Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6361
diff
changeset
|
243 self.items = self.__class__.memdb.get('items', {}) |
|
7f00fc5958ca
Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6361
diff
changeset
|
244 self.ids = self.__class__.memdb.get('ids', {}) |
|
7f00fc5958ca
Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6361
diff
changeset
|
245 self.journals = self.__class__.memdb.get('journals', {}) |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
246 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
247 def filename(self, classname, nodeid, property=None, create=0): |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
248 shutil.copyfile(__file__, __file__+'.dummy') |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
249 return __file__+'.dummy' |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
250 |
|
4347
0e33bf5571dc
make some more memorydb tests pass
Richard Jones <richard@users.sourceforge.net>
parents:
4346
diff
changeset
|
251 def filesize(self, classname, nodeid, property=None, create=0): |
|
4349
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
252 return len(self.getfile(classname, nodeid, property)) |
|
4347
0e33bf5571dc
make some more memorydb tests pass
Richard Jones <richard@users.sourceforge.net>
parents:
4346
diff
changeset
|
253 |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
254 def post_init(self): |
|
6148
8497bf3f23a1
Allow to define reverse Multilinks
Ralf Schlatterbeck <rsc@runtux.com>
parents:
5972
diff
changeset
|
255 super(Database, self).post_init() |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
256 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
257 def refresh_database(self): |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
258 pass |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
259 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
260 def getSessionManager(self): |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
261 return self.sessions |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
262 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
263 def getOTKManager(self): |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
264 return self.otks |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
265 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
266 def reindex(self, classname=None, show_progress=False): |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
267 pass |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
268 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
269 def __repr__(self): |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
270 return '<memorydb instance at %x>'%id(self) |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
271 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
272 def storefile(self, classname, nodeid, property, content): |
|
5465
c4f9a152258d
keep test code in sync with real implementation
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5462
diff
changeset
|
273 if isinstance(content, str): |
|
c4f9a152258d
keep test code in sync with real implementation
Christof Meerwald <cmeerw@cmeerw.org>
parents:
5462
diff
changeset
|
274 content = s2b(content) |
|
4349
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
275 self.tx_files[classname, nodeid, property] = content |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
276 self.transactions.append((self.doStoreFile, (classname, nodeid, |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
277 property))) |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
278 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
279 def getfile(self, classname, nodeid, property): |
|
4349
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
280 if (classname, nodeid, property) in self.tx_files: |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
281 return self.tx_files[classname, nodeid, property] |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
282 return self.files[classname, nodeid, property] |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
283 |
|
4349
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
284 def doStoreFile(self, classname, nodeid, property, **databases): |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
285 self.files[classname, nodeid, property] = self.tx_files[classname, nodeid, property] |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
286 return (classname, nodeid) |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
287 |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
288 def rollbackStoreFile(self, classname, nodeid, property, **databases): |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
289 del self.tx_files[classname, nodeid, property] |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
290 |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
291 def numfiles(self): |
|
4349
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
292 return len(self.files) + len(self.tx_files) |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
293 |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
294 def close(self): |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
295 self.clearCache() |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
296 self.tx_files = {} |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
297 # kill the schema too |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
298 self.classes = {} |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
299 # just keep the .items |
|
6365
7f00fc5958ca
Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6361
diff
changeset
|
300 # persistence across re-open |
|
7f00fc5958ca
Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6361
diff
changeset
|
301 self.__class__.memdb['items'] = self.items |
|
7f00fc5958ca
Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6361
diff
changeset
|
302 self.__class__.memdb['ids'] = self.ids |
|
7f00fc5958ca
Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6361
diff
changeset
|
303 self.__class__.memdb['journals'] = self.journals |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
304 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
305 # |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
306 # Classes |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
307 # |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
308 def __getattr__(self, classname): |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
309 """A convenient way of calling self.getclass(classname).""" |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
310 if classname in self.classes: |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
311 return self.classes[classname] |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5317
diff
changeset
|
312 raise AttributeError(classname) |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
313 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
314 def addclass(self, cl): |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
315 cn = cl.classname |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
316 if cn in self.classes: |
|
6243
1e53e3ad9e5c
Remove translation markings. Not needed.
John Rouillard <rouilj@ieee.org>
parents:
6241
diff
changeset
|
317 raise ValueError('Class "%s" already defined.'%cn) |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
318 self.classes[cn] = cl |
|
4349
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
319 if cn not in self.items: |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
320 self.items[cn] = cldb() |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
321 self.ids[cn] = 0 |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
322 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
323 # add default Edit and View permissions |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
324 self.security.addPermission(name="Create", klass=cn, |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
325 description="User is allowed to create "+cn) |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
326 self.security.addPermission(name="Edit", klass=cn, |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
327 description="User is allowed to edit "+cn) |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
328 self.security.addPermission(name="View", klass=cn, |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
329 description="User is allowed to access "+cn) |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
330 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
331 def getclasses(self): |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
332 """Return a list of the names of all existing classes.""" |
|
5395
23b8e6067f7c
Python 3 preparation: update calls to dict methods.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5385
diff
changeset
|
333 return sorted(self.classes.keys()) |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
334 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
335 def getclass(self, classname): |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
336 """Get the Class object representing a particular class. |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
337 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
338 If 'classname' is not a valid class name, a KeyError is raised. |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
339 """ |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
340 try: |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
341 return self.classes[classname] |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
342 except KeyError: |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5317
diff
changeset
|
343 raise KeyError('There is no class called "%s"'%classname) |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
344 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
345 # |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
346 # Class DBs |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
347 # |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
348 def clear(self): |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
349 self.items = {} |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
350 |
|
4349
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
351 def getclassdb(self, classname, mode='r'): |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
352 """ grab a connection to the class db that will be used for |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
353 multiple actions |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
354 """ |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
355 return self.items[classname] |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
356 |
|
4349
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
357 def getCachedJournalDB(self, classname): |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
358 return self.journals.setdefault(classname, {}) |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
359 |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
360 # |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
361 # Node IDs |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
362 # |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
363 def newid(self, classname): |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
364 self.ids[classname] += 1 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
365 return str(self.ids[classname]) |
|
4347
0e33bf5571dc
make some more memorydb tests pass
Richard Jones <richard@users.sourceforge.net>
parents:
4346
diff
changeset
|
366 def setid(self, classname, id): |
|
4349
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
367 self.ids[classname] = int(id) |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
368 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
369 # |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
370 # Journal |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
371 # |
|
4349
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
372 def doSaveJournal(self, classname, nodeid, action, params, creator, |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
373 creation): |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
374 if creator is None: |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
375 creator = self.getuid() |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
376 if creation is None: |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
377 creation = date.Date() |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
378 self.journals.setdefault(classname, {}).setdefault(nodeid, |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
379 []).append((nodeid, creation, creator, action, params)) |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
380 |
|
4349
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
381 def doSetJournal(self, classname, nodeid, journal): |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
382 self.journals.setdefault(classname, {})[nodeid] = journal |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
383 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
384 def getjournal(self, classname, nodeid): |
|
4349
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
385 # our journal result |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
386 res = [] |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
387 |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
388 # add any journal entries for transactions not committed to the |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
389 # database |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
390 for method, args in self.transactions: |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
391 if method != self.doSaveJournal: |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
392 continue |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
393 (cache_classname, cache_nodeid, cache_action, cache_params, |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
394 cache_creator, cache_creation) = args |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
395 if cache_classname == classname and cache_nodeid == nodeid: |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
396 if not cache_creator: |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
397 cache_creator = self.getuid() |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
398 if not cache_creation: |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
399 cache_creation = date.Date() |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
400 res.append((cache_nodeid, cache_creation, cache_creator, |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
401 cache_action, cache_params)) |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
402 try: |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
403 res += self.journals.get(classname, {})[nodeid] |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
404 except KeyError: |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
405 if res: return res |
|
5378
35ea9b1efc14
Python 3 preparation: "raise" syntax.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5317
diff
changeset
|
406 raise IndexError(nodeid) |
|
4349
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
407 return res |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
408 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
409 def pack(self, pack_before): |
|
4349
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
410 """ Delete all journal entries except "create" before 'pack_before'. |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
411 """ |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
412 pack_before = pack_before.serialise() |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
413 for classname in self.journals: |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
414 db = self.journals[classname] |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
415 for key in db: |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
416 # get the journal for this db entry |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
417 l = [] |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
418 last_set_entry = None |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
419 for entry in db[key]: |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
420 # unpack the entry |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
421 (nodeid, date_stamp, self.journaltag, action, |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
422 params) = entry |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
423 date_stamp = date_stamp.serialise() |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
424 # if the entry is after the pack date, _or_ the initial |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
425 # create entry, then it stays |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
426 if date_stamp > pack_before or action == 'create': |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
427 l.append(entry) |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
428 db[key] = l |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
429 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
430 class Class(back_anydbm.Class): |
|
4349
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
431 pass |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
432 |
|
4349
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
433 class FileClass(back_anydbm.FileClass): |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
434 def __init__(self, db, classname, **properties): |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
435 if 'content' not in properties: |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
436 properties['content'] = hyperdb.String(indexme='yes') |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
437 if 'type' not in properties: |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
438 properties['type'] = hyperdb.String() |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
439 back_anydbm.Class.__init__(self, db, classname, **properties) |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
440 |
|
4349
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
441 def export_files(self, dirname, nodeid): |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
442 dest = self.exportFilename(dirname, nodeid) |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
443 ensureParentsExist(dest) |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
444 f = open(dest, 'wb') |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
445 f.write(self.db.files[self.classname, nodeid, None]) |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
446 f.close() |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
447 |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
448 def import_files(self, dirname, nodeid): |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
449 source = self.exportFilename(dirname, nodeid) |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
450 f = open(source, 'rb') |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
451 self.db.files[self.classname, nodeid, None] = f.read() |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
452 f.close() |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
453 mime_type = None |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
454 props = self.getprops() |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
455 if 'type' in props: |
|
4349
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
456 mime_type = self.get(nodeid, 'type') |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
457 if not mime_type: |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
458 mime_type = self.default_mime_type |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
459 if props['content'].indexme: |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
460 self.db.indexer.add_text((self.classname, nodeid, 'content'), |
|
f0faef4dd023
Make memorydb pass all tests;
Richard Jones <richard@users.sourceforge.net>
parents:
4347
diff
changeset
|
461 self.get(nodeid, 'content'), mime_type) |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
462 |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
463 # deviation from spec - was called ItemClass |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
464 class IssueClass(Class, roundupdb.IssueClass): |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
465 # Overridden methods: |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
466 def __init__(self, db, classname, **properties): |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
467 """The newly-created class automatically includes the "messages", |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
468 "files", "nosy", and "superseder" properties. If the 'properties' |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
469 dictionary attempts to specify any of these properties or a |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
470 "creation" or "activity" property, a ValueError is raised. |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
471 """ |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
472 if 'title' not in properties: |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
473 properties['title'] = hyperdb.String(indexme='yes') |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
474 if 'messages' not in properties: |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
475 properties['messages'] = hyperdb.Multilink("msg") |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
476 if 'files' not in properties: |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
477 properties['files'] = hyperdb.Multilink("file") |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
478 if 'nosy' not in properties: |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
479 # note: journalling is turned off as it really just wastes |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
480 # space. this behaviour may be overridden in an instance |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
481 properties['nosy'] = hyperdb.Multilink("user", do_journal="no") |
|
5381
0942fe89e82e
Python 3 preparation: change "x.has_key(y)" to "y in x".
Joseph Myers <jsm@polyomino.org.uk>
parents:
5378
diff
changeset
|
482 if 'superseder' not in properties: |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
483 properties['superseder'] = hyperdb.Multilink(classname) |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
484 Class.__init__(self, db, classname, **properties) |
|
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
485 |
|
6365
7f00fc5958ca
Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6361
diff
changeset
|
486 # Methods to check for existence and nuke the db |
|
7f00fc5958ca
Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6361
diff
changeset
|
487 # We don't support multiple named databases |
|
7f00fc5958ca
Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6361
diff
changeset
|
488 |
|
7f00fc5958ca
Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6361
diff
changeset
|
489 def db_exists(name): |
|
7f00fc5958ca
Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6361
diff
changeset
|
490 return bool(Database.memdb) |
|
7f00fc5958ca
Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6361
diff
changeset
|
491 |
|
7f00fc5958ca
Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6361
diff
changeset
|
492 def db_nuke(name): |
|
7f00fc5958ca
Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6361
diff
changeset
|
493 Database.memdb = {} |
|
7f00fc5958ca
Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents:
6361
diff
changeset
|
494 |
|
4342
94c992852f12
add in-memory hyperdb implementation to speed up testing
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
495 # vim: set et sts=4 sw=4 : |
