Mercurial > p > roundup > code
annotate hyperdb_bsddb.py @ 19:a5eb90ae8903
Fixed a bug in the filter
wrong variable names in the error message. Recognised that the filter
has an outstanding bug. Hrm. we need a bug tracker for this project :)
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Fri, 20 Jul 2001 08:20:24 +0000 |
| parents | bb0572c92f23 |
| children |
| rev | line source |
|---|---|
|
18
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1 #$Id: hyperdb_bsddb.py,v 1.1 2001-07-20 07:35:55 richard Exp $ |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2 |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3 import bsddb, os, cPickle |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
4 import date |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
5 |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
6 # |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
7 # Now the database |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
8 # |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
9 class Database: |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
10 """A database for storing records containing flexible data types.""" |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
11 |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
12 def __init__(self, storagelocator, journaltag=None): |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
13 """Open a hyperdatabase given a specifier to some storage. |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
14 |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
15 The meaning of 'storagelocator' depends on the particular |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
16 implementation of the hyperdatabase. It could be a file name, |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
17 a directory path, a socket descriptor for a connection to a |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
18 database over the network, etc. |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
19 |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
20 The 'journaltag' is a token that will be attached to the journal |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
21 entries for any edits done on the database. If 'journaltag' is |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
22 None, the database is opened in read-only mode: the Class.create(), |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
23 Class.set(), and Class.retire() methods are disabled. |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
24 """ |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
25 self.dir, self.journaltag = storagelocator, journaltag |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
26 self.classes = {} |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
27 |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
28 # |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
29 # Classes |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
30 # |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
31 def __getattr__(self, classname): |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
32 """A convenient way of calling self.getclass(classname).""" |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
33 return self.classes[classname] |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
34 |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
35 def addclass(self, cl): |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
36 cn = cl.classname |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
37 if self.classes.has_key(cn): |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
38 raise ValueError, cn |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
39 self.classes[cn] = cl |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
40 |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
41 def getclasses(self): |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
42 """Return a list of the names of all existing classes.""" |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
43 l = self.classes.keys() |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
44 l.sort() |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
45 return l |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
46 |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
47 def getclass(self, classname): |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
48 """Get the Class object representing a particular class. |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
49 |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
50 If 'classname' is not a valid class name, a KeyError is raised. |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
51 """ |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
52 return self.classes[classname] |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
53 |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
54 # |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
55 # Class DBs |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
56 # |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
57 def clear(self): |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
58 for cn in self.classes.keys(): |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
59 db = os.path.join(self.dir, 'nodes.%s'%cn) |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
60 bsddb.btopen(db, 'n') |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
61 db = os.path.join(self.dir, 'journals.%s'%cn) |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
62 bsddb.btopen(db, 'n') |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
63 |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
64 def getclassdb(self, classname, mode='r'): |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
65 ''' grab a connection to the class db that will be used for |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
66 multiple actions |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
67 ''' |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
68 path = os.path.join(os.getcwd(), self.dir, 'nodes.%s'%classname) |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
69 return bsddb.btopen(path, mode) |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
70 |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
71 def addnode(self, classname, nodeid, node): |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
72 ''' add the specified node to its class's db |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
73 ''' |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
74 db = self.getclassdb(classname, 'c') |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
75 db[nodeid] = cPickle.dumps(node, 1) |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
76 db.close() |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
77 setnode = addnode |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
78 |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
79 def getnode(self, classname, nodeid, cldb=None): |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
80 ''' add the specified node to its class's db |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
81 ''' |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
82 db = cldb or self.getclassdb(classname) |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
83 if not db.has_key(nodeid): |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
84 raise IndexError, nodeid |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
85 res = cPickle.loads(db[nodeid]) |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
86 if not cldb: db.close() |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
87 return res |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
88 |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
89 def hasnode(self, classname, nodeid, cldb=None): |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
90 ''' add the specified node to its class's db |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
91 ''' |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
92 db = cldb or self.getclassdb(classname) |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
93 res = db.has_key(nodeid) |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
94 if not cldb: db.close() |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
95 return res |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
96 |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
97 def countnodes(self, classname, cldb=None): |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
98 db = cldb or self.getclassdb(classname) |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
99 return len(db.keys()) |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
100 if not cldb: db.close() |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
101 return res |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
102 |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
103 def getnodeids(self, classname, cldb=None): |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
104 db = cldb or self.getclassdb(classname) |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
105 res = db.keys() |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
106 if not cldb: db.close() |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
107 return res |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
108 |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
109 # |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
110 # Journal |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
111 # |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
112 def addjournal(self, classname, nodeid, action, params): |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
113 ''' Journal the Action |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
114 'action' may be: |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
115 |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
116 'create' or 'set' -- 'params' is a dictionary of property values |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
117 'link' or 'unlink' -- 'params' is (classname, nodeid, propname) |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
118 'retire' -- 'params' is None |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
119 ''' |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
120 entry = (nodeid, date.Date(), self.journaltag, action, params) |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
121 db = bsddb.btopen(os.path.join(self.dir, 'journals.%s'%classname), 'c') |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
122 if db.has_key(nodeid): |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
123 s = db[nodeid] |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
124 l = cPickle.loads(db[nodeid]) |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
125 l.append(entry) |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
126 else: |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
127 l = [entry] |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
128 db[nodeid] = cPickle.dumps(l) |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
129 db.close() |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
130 |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
131 def getjournal(self, classname, nodeid): |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
132 ''' get the journal for id |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
133 ''' |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
134 db = bsddb.btopen(os.path.join(self.dir, 'journals.%s'%classname), 'r') |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
135 res = cPickle.loads(db[nodeid]) |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
136 db.close() |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
137 return res |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
138 |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
139 def close(self): |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
140 ''' Close the Database - we must release the circular refs so that |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
141 we can be del'ed and the underlying bsddb connections closed |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
142 cleanly. |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
143 ''' |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
144 self.classes = None |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
145 |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
146 |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
147 # |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
148 # Basic transaction support |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
149 # |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
150 # TODO: well, write these methods (and then use them in other code) |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
151 def register_action(self): |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
152 ''' Register an action to the transaction undo log |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
153 ''' |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
154 |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
155 def commit(self): |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
156 ''' Commit the current transaction, start a new one |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
157 ''' |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
158 |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
159 def rollback(self): |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
160 ''' Reverse all actions from the current transaction |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
161 ''' |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
162 |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
163 # |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
164 #$Log: not supported by cvs2svn $ |
|
bb0572c92f23
largish changes as a start of splitting off bits and pieces...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
165 |
