annotate roundup/hyperdb.py @ 692:0521ddc7bb31 search_indexing-0-4-2-branch

Miscellaneous changes. cgi_client.py removed search link for the time being moved rendering of matches to htmltemplate hyperdb.py filtering of nodes on full text search incorporated in filter method roundupdb.py added paramater to call of filter method roundup_indexer.py added search method to RoundupIndexer class
author Roche Compaan <rochecompaan@users.sourceforge.net>
date Fri, 19 Apr 2002 19:54:42 +0000
parents e0a1cc7538e9
children 250d0d517f64
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
213
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
1 #
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
2 # Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
3 # This module is free software, and you may redistribute it and/or modify
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
4 # under the same terms as Python, so long as this copyright message and
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
5 # disclaimer are retained in their original form.
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
6 #
214
18134bffab37 stupid typo
Richard Jones <richard@users.sourceforge.net>
parents: 213
diff changeset
7 # IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR
213
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
8 # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
9 # OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
10 # POSSIBILITY OF SUCH DAMAGE.
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
11 #
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
12 # BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
13 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
14 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
15 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
16 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
17 #
692
0521ddc7bb31 Miscellaneous changes.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 657
diff changeset
18 # $Id: hyperdb.py,v 1.59.2.1 2002-04-19 19:54:42 rochecompaan Exp $
406
bdc2ea127ae9 Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 398
diff changeset
19
bdc2ea127ae9 Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 398
diff changeset
20 __doc__ = """
bdc2ea127ae9 Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 398
diff changeset
21 Hyperdatabase implementation, especially field types.
bdc2ea127ae9 Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 398
diff changeset
22 """
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
23
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
24 # standard python modules
648
07422fe57db2 Ran it through pychecker, made fixes
Richard Jones <richard@users.sourceforge.net>
parents: 628
diff changeset
25 import re, string, weakref, os
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
26
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
27 # roundup modules
270
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
28 import date, password
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
29
570
e346a9792335 fixed back_bsddb so it passed the journal tests
Richard Jones <richard@users.sourceforge.net>
parents: 562
diff changeset
30 DEBUG = os.environ.get('HYPERDBDEBUG', '')
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
31
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
32 #
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
33 # Types
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
34 #
224
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
35 class String:
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
36 """An object designating a String property."""
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
37 def __repr__(self):
657
e0a1cc7538e9 more pychecker warnings removed
Richard Jones <richard@users.sourceforge.net>
parents: 648
diff changeset
38 ' more useful for dumps '
224
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
39 return '<%s>'%self.__class__
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
40
270
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
41 class Password:
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
42 """An object designating a Password property."""
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
43 def __repr__(self):
657
e0a1cc7538e9 more pychecker warnings removed
Richard Jones <richard@users.sourceforge.net>
parents: 648
diff changeset
44 ' more useful for dumps '
270
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
45 return '<%s>'%self.__class__
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
46
224
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
47 class Date:
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
48 """An object designating a Date property."""
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
49 def __repr__(self):
657
e0a1cc7538e9 more pychecker warnings removed
Richard Jones <richard@users.sourceforge.net>
parents: 648
diff changeset
50 ' more useful for dumps '
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
51 return '<%s>'%self.__class__
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
52
224
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
53 class Interval:
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
54 """An object designating an Interval property."""
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
55 def __repr__(self):
657
e0a1cc7538e9 more pychecker warnings removed
Richard Jones <richard@users.sourceforge.net>
parents: 648
diff changeset
56 ' more useful for dumps '
224
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
57 return '<%s>'%self.__class__
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
58
224
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
59 class Link:
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
60 """An object designating a Link property that links to a
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
61 node in a specified class."""
555
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
62 def __init__(self, classname, do_journal='no'):
657
e0a1cc7538e9 more pychecker warnings removed
Richard Jones <richard@users.sourceforge.net>
parents: 648
diff changeset
63 ''' Default is to not journal link and unlink events
e0a1cc7538e9 more pychecker warnings removed
Richard Jones <richard@users.sourceforge.net>
parents: 648
diff changeset
64 '''
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
65 self.classname = classname
555
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
66 self.do_journal = do_journal == 'yes'
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
67 def __repr__(self):
657
e0a1cc7538e9 more pychecker warnings removed
Richard Jones <richard@users.sourceforge.net>
parents: 648
diff changeset
68 ' more useful for dumps '
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
69 return '<%s to "%s">'%(self.__class__, self.classname)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
70
224
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
71 class Multilink:
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
72 """An object designating a Multilink property that links
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
73 to nodes in a specified class.
557
dfac856502d1 brief docco on the do_journal argument
Richard Jones <richard@users.sourceforge.net>
parents: 555
diff changeset
74
dfac856502d1 brief docco on the do_journal argument
Richard Jones <richard@users.sourceforge.net>
parents: 555
diff changeset
75 "classname" indicates the class to link to
dfac856502d1 brief docco on the do_journal argument
Richard Jones <richard@users.sourceforge.net>
parents: 555
diff changeset
76
dfac856502d1 brief docco on the do_journal argument
Richard Jones <richard@users.sourceforge.net>
parents: 555
diff changeset
77 "do_journal" indicates whether the linked-to nodes should have
dfac856502d1 brief docco on the do_journal argument
Richard Jones <richard@users.sourceforge.net>
parents: 555
diff changeset
78 'link' and 'unlink' events placed in their journal
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
79 """
555
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
80 def __init__(self, classname, do_journal='no'):
657
e0a1cc7538e9 more pychecker warnings removed
Richard Jones <richard@users.sourceforge.net>
parents: 648
diff changeset
81 ''' Default is to not journal link and unlink events
e0a1cc7538e9 more pychecker warnings removed
Richard Jones <richard@users.sourceforge.net>
parents: 648
diff changeset
82 '''
224
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
83 self.classname = classname
555
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
84 self.do_journal = do_journal == 'yes'
224
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
85 def __repr__(self):
657
e0a1cc7538e9 more pychecker warnings removed
Richard Jones <richard@users.sourceforge.net>
parents: 648
diff changeset
86 ' more useful for dumps '
224
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
87 return '<%s to "%s">'%(self.__class__, self.classname)
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
88
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
89 class DatabaseError(ValueError):
657
e0a1cc7538e9 more pychecker warnings removed
Richard Jones <richard@users.sourceforge.net>
parents: 648
diff changeset
90 '''Error to be raised when there is some problem in the database code
e0a1cc7538e9 more pychecker warnings removed
Richard Jones <richard@users.sourceforge.net>
parents: 648
diff changeset
91 '''
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
92 pass
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
93
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
94
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
95 #
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
96 # the base Database class
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
97 #
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
98 class Database:
477
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
99 '''A database for storing records containing flexible data types.
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
100
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
101 This class defines a hyperdatabase storage layer, which the Classes use to
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
102 store their data.
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
103
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
104
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
105 Transactions
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
106 ------------
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
107 The Database should support transactions through the commit() and
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
108 rollback() methods. All other Database methods should be transaction-aware,
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
109 using data from the current transaction before looking up the database.
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
110
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
111 An implementation must provide an override for the get() method so that the
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
112 in-database value is returned in preference to the in-transaction value.
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
113 This is necessary to determine if any values have changed during a
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
114 transaction.
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
115
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
116 '''
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
117
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
118 # flag to set on retired entries
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
119 RETIRED_FLAG = '__hyperdb_retired'
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
120
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 490
diff changeset
121 # XXX deviates from spec: storagelocator is obtained from the config
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 490
diff changeset
122 def __init__(self, config, journaltag=None):
477
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
123 """Open a hyperdatabase given a specifier to some storage.
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
124
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 490
diff changeset
125 The 'storagelocator' is obtained from config.DATABASE.
477
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
126 The meaning of 'storagelocator' depends on the particular
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
127 implementation of the hyperdatabase. It could be a file name,
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
128 a directory path, a socket descriptor for a connection to a
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
129 database over the network, etc.
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
130
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
131 The 'journaltag' is a token that will be attached to the journal
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
132 entries for any edits done on the database. If 'journaltag' is
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
133 None, the database is opened in read-only mode: the Class.create(),
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
134 Class.set(), and Class.retire() methods are disabled.
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
135 """
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
136 raise NotImplementedError
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
137
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
138 def __getattr__(self, classname):
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
139 """A convenient way of calling self.getclass(classname)."""
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
140 raise NotImplementedError
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
141
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
142 def addclass(self, cl):
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
143 '''Add a Class to the hyperdatabase.
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
144 '''
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
145 raise NotImplementedError
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
146
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
147 def getclasses(self):
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
148 """Return a list of the names of all existing classes."""
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
149 raise NotImplementedError
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
150
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
151 def getclass(self, classname):
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
152 """Get the Class object representing a particular class.
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
153
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
154 If 'classname' is not a valid class name, a KeyError is raised.
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
155 """
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
156 raise NotImplementedError
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
157
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
158 def clear(self):
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
159 '''Delete all database contents.
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
160 '''
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
161 raise NotImplementedError
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
162
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
163 def getclassdb(self, classname, mode='r'):
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
164 '''Obtain a connection to the class db that will be used for
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
165 multiple actions.
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
166 '''
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
167 raise NotImplementedError
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
168
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
169 def addnode(self, classname, nodeid, node):
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
170 '''Add the specified node to its class's db.
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
171 '''
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
172 raise NotImplementedError
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
173
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
174 def setnode(self, classname, nodeid, node):
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
175 '''Change the specified node.
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
176 '''
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
177 raise NotImplementedError
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
178
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
179 def getnode(self, classname, nodeid, db=None, cache=1):
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
180 '''Get a node from the database.
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
181 '''
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
182 raise NotImplementedError
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
183
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
184 def hasnode(self, classname, nodeid, db=None):
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
185 '''Determine if the database has a given node.
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
186 '''
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
187 raise NotImplementedError
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
188
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
189 def countnodes(self, classname, db=None):
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
190 '''Count the number of nodes that exist for a particular Class.
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
191 '''
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
192 raise NotImplementedError
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
193
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
194 def getnodeids(self, classname, db=None):
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
195 '''Retrieve all the ids of the nodes for a particular Class.
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
196 '''
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
197 raise NotImplementedError
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
198
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
199 def storefile(self, classname, nodeid, property, content):
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
200 '''Store the content of the file in the database.
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
201
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
202 The property may be None, in which case the filename does not
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
203 indicate which property is being saved.
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
204 '''
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
205 raise NotImplementedError
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
206
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
207 def getfile(self, classname, nodeid, property):
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
208 '''Store the content of the file in the database.
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
209 '''
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
210 raise NotImplementedError
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
211
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
212 def addjournal(self, classname, nodeid, action, params):
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
213 ''' Journal the Action
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
214 'action' may be:
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
215
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
216 'create' or 'set' -- 'params' is a dictionary of property values
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
217 'link' or 'unlink' -- 'params' is (classname, nodeid, propname)
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
218 'retire' -- 'params' is None
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
219 '''
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
220 raise NotImplementedError
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
221
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
222 def getjournal(self, classname, nodeid):
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
223 ''' get the journal for id
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
224 '''
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
225 raise NotImplementedError
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
226
562
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 557
diff changeset
227 def pack(self, pack_before):
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 557
diff changeset
228 ''' pack the database
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 557
diff changeset
229 '''
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 557
diff changeset
230 raise NotImplementedError
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 557
diff changeset
231
477
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
232 def commit(self):
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
233 ''' Commit the current transactions.
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
234
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
235 Save all data changed since the database was opened or since the
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
236 last commit() or rollback().
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
237 '''
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
238 raise NotImplementedError
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
239
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
240 def rollback(self):
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
241 ''' Reverse all actions from the current transaction.
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
242
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
243 Undo all the changes made since the database was opened or the last
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
244 commit() or rollback() was performed.
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
245 '''
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
246 raise NotImplementedError
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
247
156
9c5ddad06430 get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents: 130
diff changeset
248 _marker = []
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
249 #
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
250 # The base Class class
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
251 #
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
252 class Class:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
253 """The handle to a particular class of nodes in a hyperdatabase."""
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
254
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
255 def __init__(self, db, classname, **properties):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
256 """Create a new class with a given name and property specification.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
257
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
258 'classname' must not collide with the name of an existing class,
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
259 or a ValueError is raised. The keyword arguments in 'properties'
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
260 must map names to property objects, or a TypeError is raised.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
261 """
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
262 self.classname = classname
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
263 self.properties = properties
431
a28a80b714f9 Eliminate database close method by using weakrefs.
Richard Jones <richard@users.sourceforge.net>
parents: 430
diff changeset
264 self.db = weakref.proxy(db) # use a weak ref to avoid circularity
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
265 self.key = ''
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
266
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
267 # do the db-related init stuff
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
268 db.addclass(self)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
269
452
7181efddce66 yuck, a gdbm instance tests false :(
Richard Jones <richard@users.sourceforge.net>
parents: 431
diff changeset
270 def __repr__(self):
657
e0a1cc7538e9 more pychecker warnings removed
Richard Jones <richard@users.sourceforge.net>
parents: 648
diff changeset
271 '''Slightly more useful representation
e0a1cc7538e9 more pychecker warnings removed
Richard Jones <richard@users.sourceforge.net>
parents: 648
diff changeset
272 '''
452
7181efddce66 yuck, a gdbm instance tests false :(
Richard Jones <richard@users.sourceforge.net>
parents: 431
diff changeset
273 return '<hypderdb.Class "%s">'%self.classname
7181efddce66 yuck, a gdbm instance tests false :(
Richard Jones <richard@users.sourceforge.net>
parents: 431
diff changeset
274
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
275 # Editing nodes:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
276
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
277 def create(self, **propvalues):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
278 """Create a new node of this class and return its id.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
279
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
280 The keyword arguments in 'propvalues' map property names to values.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
281
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
282 The values of arguments must be acceptable for the types of their
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
283 corresponding properties or a TypeError is raised.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
284
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
285 If this class has a key property, it must be present and its value
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
286 must not collide with other key strings or a ValueError is raised.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
287
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
288 Any other properties on this class that are missing from the
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
289 'propvalues' dictionary are set to None.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
290
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
291 If an id in a link or multilink property does not refer to a valid
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
292 node, an IndexError is raised.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
293 """
118
a55c1301ba1f Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents: 89
diff changeset
294 if propvalues.has_key('id'):
a55c1301ba1f Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents: 89
diff changeset
295 raise KeyError, '"id" is reserved'
a55c1301ba1f Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents: 89
diff changeset
296
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
297 if self.db.journaltag is None:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
298 raise DatabaseError, 'Database open read-only'
118
a55c1301ba1f Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents: 89
diff changeset
299
a55c1301ba1f Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents: 89
diff changeset
300 # new node's id
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
301 newid = str(self.count() + 1)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
302
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
303 # validate propvalues
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
304 num_re = re.compile('^\d+$')
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
305 for key, value in propvalues.items():
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
306 if key == self.key:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
307 try:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
308 self.lookup(value)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
309 except KeyError:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
310 pass
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
311 else:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
312 raise ValueError, 'node with key "%s" exists'%value
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
313
172
c580555a6508 mailgw was assuming certain properties existed on the issues being created.
Richard Jones <richard@users.sourceforge.net>
parents: 156
diff changeset
314 # try to handle this property
c580555a6508 mailgw was assuming certain properties existed on the issues being created.
Richard Jones <richard@users.sourceforge.net>
parents: 156
diff changeset
315 try:
c580555a6508 mailgw was assuming certain properties existed on the issues being created.
Richard Jones <richard@users.sourceforge.net>
parents: 156
diff changeset
316 prop = self.properties[key]
c580555a6508 mailgw was assuming certain properties existed on the issues being created.
Richard Jones <richard@users.sourceforge.net>
parents: 156
diff changeset
317 except KeyError:
c580555a6508 mailgw was assuming certain properties existed on the issues being created.
Richard Jones <richard@users.sourceforge.net>
parents: 156
diff changeset
318 raise KeyError, '"%s" has no property "%s"'%(self.classname,
c580555a6508 mailgw was assuming certain properties existed on the issues being created.
Richard Jones <richard@users.sourceforge.net>
parents: 156
diff changeset
319 key)
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
320
224
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
321 if isinstance(prop, Link):
89
b6b30ba53986 Fixed some of the exceptions so they're the right type.
Richard Jones <richard@users.sourceforge.net>
parents: 86
diff changeset
322 if type(value) != type(''):
b6b30ba53986 Fixed some of the exceptions so they're the right type.
Richard Jones <richard@users.sourceforge.net>
parents: 86
diff changeset
323 raise ValueError, 'link value must be String'
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
324 link_class = self.properties[key].classname
89
b6b30ba53986 Fixed some of the exceptions so they're the right type.
Richard Jones <richard@users.sourceforge.net>
parents: 86
diff changeset
325 # if it isn't a number, it's a key
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
326 if not num_re.match(value):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
327 try:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
328 value = self.db.classes[link_class].lookup(value)
457
6abdddc506e9 Cleaned up some bare except statements
Richard Jones <richard@users.sourceforge.net>
parents: 452
diff changeset
329 except (TypeError, KeyError):
89
b6b30ba53986 Fixed some of the exceptions so they're the right type.
Richard Jones <richard@users.sourceforge.net>
parents: 86
diff changeset
330 raise IndexError, 'new property "%s": %s not a %s'%(
419
831e91e23963 login_action and newuser_action return values were being ignored
Richard Jones <richard@users.sourceforge.net>
parents: 415
diff changeset
331 key, value, link_class)
831e91e23963 login_action and newuser_action return values were being ignored
Richard Jones <richard@users.sourceforge.net>
parents: 415
diff changeset
332 elif not self.db.hasnode(link_class, value):
831e91e23963 login_action and newuser_action return values were being ignored
Richard Jones <richard@users.sourceforge.net>
parents: 415
diff changeset
333 raise IndexError, '%s has no node %s'%(link_class, value)
831e91e23963 login_action and newuser_action return values were being ignored
Richard Jones <richard@users.sourceforge.net>
parents: 415
diff changeset
334
831e91e23963 login_action and newuser_action return values were being ignored
Richard Jones <richard@users.sourceforge.net>
parents: 415
diff changeset
335 # save off the value
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
336 propvalues[key] = value
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
337
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
338 # register the link with the newly linked node
555
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
339 if self.properties[key].do_journal:
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
340 self.db.addjournal(link_class, value, 'link',
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
341 (self.classname, newid, key))
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
342
224
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
343 elif isinstance(prop, Multilink):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
344 if type(value) != type([]):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
345 raise TypeError, 'new property "%s" not a list of ids'%key
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
346 link_class = self.properties[key].classname
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
347 l = []
89
b6b30ba53986 Fixed some of the exceptions so they're the right type.
Richard Jones <richard@users.sourceforge.net>
parents: 86
diff changeset
348 for entry in value:
b6b30ba53986 Fixed some of the exceptions so they're the right type.
Richard Jones <richard@users.sourceforge.net>
parents: 86
diff changeset
349 if type(entry) != type(''):
b6b30ba53986 Fixed some of the exceptions so they're the right type.
Richard Jones <richard@users.sourceforge.net>
parents: 86
diff changeset
350 raise ValueError, 'link value must be String'
b6b30ba53986 Fixed some of the exceptions so they're the right type.
Richard Jones <richard@users.sourceforge.net>
parents: 86
diff changeset
351 # if it isn't a number, it's a key
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
352 if not num_re.match(entry):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
353 try:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
354 entry = self.db.classes[link_class].lookup(entry)
457
6abdddc506e9 Cleaned up some bare except statements
Richard Jones <richard@users.sourceforge.net>
parents: 452
diff changeset
355 except (TypeError, KeyError):
89
b6b30ba53986 Fixed some of the exceptions so they're the right type.
Richard Jones <richard@users.sourceforge.net>
parents: 86
diff changeset
356 raise IndexError, 'new property "%s": %s not a %s'%(
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
357 key, entry, self.properties[key].classname)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
358 l.append(entry)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
359 value = l
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
360 propvalues[key] = value
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
361
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
362 # handle additions
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
363 for id in value:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
364 if not self.db.hasnode(link_class, id):
89
b6b30ba53986 Fixed some of the exceptions so they're the right type.
Richard Jones <richard@users.sourceforge.net>
parents: 86
diff changeset
365 raise IndexError, '%s has no node %s'%(link_class, id)
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
366 # register the link with the newly linked node
555
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
367 if self.properties[key].do_journal:
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
368 self.db.addjournal(link_class, id, 'link',
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
369 (self.classname, newid, key))
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
370
224
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
371 elif isinstance(prop, String):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
372 if type(value) != type(''):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
373 raise TypeError, 'new property "%s" not a string'%key
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
374
270
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
375 elif isinstance(prop, Password):
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
376 if not isinstance(value, password.Password):
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
377 raise TypeError, 'new property "%s" not a Password'%key
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
378
224
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
379 elif isinstance(prop, Date):
543
22e0edf7da6e lots of date/interval related changes: more relaxed date format for input
Richard Jones <richard@users.sourceforge.net>
parents: 527
diff changeset
380 if value is not None and not isinstance(value, date.Date):
270
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
381 raise TypeError, 'new property "%s" not a Date'%key
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
382
224
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
383 elif isinstance(prop, Interval):
543
22e0edf7da6e lots of date/interval related changes: more relaxed date format for input
Richard Jones <richard@users.sourceforge.net>
parents: 527
diff changeset
384 if value is not None and not isinstance(value, date.Interval):
270
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
385 raise TypeError, 'new property "%s" not an Interval'%key
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
386
275
1cc866cec608 Moved the data stringification up into the hyperdb.Class class's...
Richard Jones <richard@users.sourceforge.net>
parents: 270
diff changeset
387 # make sure there's data where there needs to be
89
b6b30ba53986 Fixed some of the exceptions so they're the right type.
Richard Jones <richard@users.sourceforge.net>
parents: 86
diff changeset
388 for key, prop in self.properties.items():
b6b30ba53986 Fixed some of the exceptions so they're the right type.
Richard Jones <richard@users.sourceforge.net>
parents: 86
diff changeset
389 if propvalues.has_key(key):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
390 continue
262
ab921dc53ccd Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents: 236
diff changeset
391 if key == self.key:
ab921dc53ccd Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents: 236
diff changeset
392 raise ValueError, 'key property "%s" is required'%key
224
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
393 if isinstance(prop, Multilink):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
394 propvalues[key] = []
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
395 else:
527
53839883cab6 [SF#502951] adding new properties to old database
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
396 # TODO: None isn't right here, I think...
282
fb1b67a8fd98 Reverted a change in hyperdb...
Richard Jones <richard@users.sourceforge.net>
parents: 278
diff changeset
397 propvalues[key] = None
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
398
275
1cc866cec608 Moved the data stringification up into the hyperdb.Class class's...
Richard Jones <richard@users.sourceforge.net>
parents: 270
diff changeset
399 # convert all data to strings
1cc866cec608 Moved the data stringification up into the hyperdb.Class class's...
Richard Jones <richard@users.sourceforge.net>
parents: 270
diff changeset
400 for key, prop in self.properties.items():
1cc866cec608 Moved the data stringification up into the hyperdb.Class class's...
Richard Jones <richard@users.sourceforge.net>
parents: 270
diff changeset
401 if isinstance(prop, Date):
543
22e0edf7da6e lots of date/interval related changes: more relaxed date format for input
Richard Jones <richard@users.sourceforge.net>
parents: 527
diff changeset
402 if propvalues[key] is not None:
22e0edf7da6e lots of date/interval related changes: more relaxed date format for input
Richard Jones <richard@users.sourceforge.net>
parents: 527
diff changeset
403 propvalues[key] = propvalues[key].get_tuple()
275
1cc866cec608 Moved the data stringification up into the hyperdb.Class class's...
Richard Jones <richard@users.sourceforge.net>
parents: 270
diff changeset
404 elif isinstance(prop, Interval):
543
22e0edf7da6e lots of date/interval related changes: more relaxed date format for input
Richard Jones <richard@users.sourceforge.net>
parents: 527
diff changeset
405 if propvalues[key] is not None:
22e0edf7da6e lots of date/interval related changes: more relaxed date format for input
Richard Jones <richard@users.sourceforge.net>
parents: 527
diff changeset
406 propvalues[key] = propvalues[key].get_tuple()
275
1cc866cec608 Moved the data stringification up into the hyperdb.Class class's...
Richard Jones <richard@users.sourceforge.net>
parents: 270
diff changeset
407 elif isinstance(prop, Password):
1cc866cec608 Moved the data stringification up into the hyperdb.Class class's...
Richard Jones <richard@users.sourceforge.net>
parents: 270
diff changeset
408 propvalues[key] = str(propvalues[key])
1cc866cec608 Moved the data stringification up into the hyperdb.Class class's...
Richard Jones <richard@users.sourceforge.net>
parents: 270
diff changeset
409
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
410 # done
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
411 self.db.addnode(self.classname, newid, propvalues)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
412 self.db.addjournal(self.classname, newid, 'create', propvalues)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
413 return newid
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
414
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
415 def get(self, nodeid, propname, default=_marker, cache=1):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
416 """Get the value of a property on an existing node of this class.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
417
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
418 'nodeid' must be the id of an existing node of this class or an
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
419 IndexError is raised. 'propname' must be the name of a property
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
420 of this class or a KeyError is raised.
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
421
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
422 'cache' indicates whether the transaction cache should be queried
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
423 for the node. If the node has been modified and you need to
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
424 determine what its values prior to modification are, you need to
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
425 set cache=0.
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
426 """
118
a55c1301ba1f Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents: 89
diff changeset
427 if propname == 'id':
a55c1301ba1f Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents: 89
diff changeset
428 return nodeid
430
350685601f37 Database transactions.
Richard Jones <richard@users.sourceforge.net>
parents: 419
diff changeset
429
527
53839883cab6 [SF#502951] adding new properties to old database
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
430 # get the property (raises KeyErorr if invalid)
53839883cab6 [SF#502951] adding new properties to old database
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
431 prop = self.properties[propname]
53839883cab6 [SF#502951] adding new properties to old database
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
432
430
350685601f37 Database transactions.
Richard Jones <richard@users.sourceforge.net>
parents: 419
diff changeset
433 # get the node's dict
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
434 d = self.db.getnode(self.classname, nodeid, cache=cache)
430
350685601f37 Database transactions.
Richard Jones <richard@users.sourceforge.net>
parents: 419
diff changeset
435
527
53839883cab6 [SF#502951] adding new properties to old database
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
436 if not d.has_key(propname):
53839883cab6 [SF#502951] adding new properties to old database
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
437 if default is _marker:
53839883cab6 [SF#502951] adding new properties to old database
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
438 if isinstance(prop, Multilink):
53839883cab6 [SF#502951] adding new properties to old database
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
439 return []
53839883cab6 [SF#502951] adding new properties to old database
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
440 else:
53839883cab6 [SF#502951] adding new properties to old database
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
441 # TODO: None isn't right here, I think...
53839883cab6 [SF#502951] adding new properties to old database
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
442 return None
53839883cab6 [SF#502951] adding new properties to old database
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
443 else:
53839883cab6 [SF#502951] adding new properties to old database
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
444 return default
430
350685601f37 Database transactions.
Richard Jones <richard@users.sourceforge.net>
parents: 419
diff changeset
445
350685601f37 Database transactions.
Richard Jones <richard@users.sourceforge.net>
parents: 419
diff changeset
446 # possibly convert the marshalled data to instances
350685601f37 Database transactions.
Richard Jones <richard@users.sourceforge.net>
parents: 419
diff changeset
447 if isinstance(prop, Date):
543
22e0edf7da6e lots of date/interval related changes: more relaxed date format for input
Richard Jones <richard@users.sourceforge.net>
parents: 527
diff changeset
448 if d[propname] is None:
22e0edf7da6e lots of date/interval related changes: more relaxed date format for input
Richard Jones <richard@users.sourceforge.net>
parents: 527
diff changeset
449 return None
430
350685601f37 Database transactions.
Richard Jones <richard@users.sourceforge.net>
parents: 419
diff changeset
450 return date.Date(d[propname])
350685601f37 Database transactions.
Richard Jones <richard@users.sourceforge.net>
parents: 419
diff changeset
451 elif isinstance(prop, Interval):
543
22e0edf7da6e lots of date/interval related changes: more relaxed date format for input
Richard Jones <richard@users.sourceforge.net>
parents: 527
diff changeset
452 if d[propname] is None:
22e0edf7da6e lots of date/interval related changes: more relaxed date format for input
Richard Jones <richard@users.sourceforge.net>
parents: 527
diff changeset
453 return None
430
350685601f37 Database transactions.
Richard Jones <richard@users.sourceforge.net>
parents: 419
diff changeset
454 return date.Interval(d[propname])
350685601f37 Database transactions.
Richard Jones <richard@users.sourceforge.net>
parents: 419
diff changeset
455 elif isinstance(prop, Password):
350685601f37 Database transactions.
Richard Jones <richard@users.sourceforge.net>
parents: 419
diff changeset
456 p = password.Password()
350685601f37 Database transactions.
Richard Jones <richard@users.sourceforge.net>
parents: 419
diff changeset
457 p.unpack(d[propname])
350685601f37 Database transactions.
Richard Jones <richard@users.sourceforge.net>
parents: 419
diff changeset
458 return p
350685601f37 Database transactions.
Richard Jones <richard@users.sourceforge.net>
parents: 419
diff changeset
459
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
460 return d[propname]
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
461
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
462 # XXX not in spec
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
463 def getnode(self, nodeid, cache=1):
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
464 ''' Return a convenience wrapper for the node.
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
465
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
466 'nodeid' must be the id of an existing node of this class or an
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
467 IndexError is raised.
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
468
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
469 'cache' indicates whether the transaction cache should be queried
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
470 for the node. If the node has been modified and you need to
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
471 determine what its values prior to modification are, you need to
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
472 set cache=0.
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
473 '''
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
474 return Node(self, nodeid, cache=cache)
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
475
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
476 def set(self, nodeid, **propvalues):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
477 """Modify a property on an existing node of this class.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
478
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
479 'nodeid' must be the id of an existing node of this class or an
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
480 IndexError is raised.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
481
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
482 Each key in 'propvalues' must be the name of a property of this
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
483 class or a KeyError is raised.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
484
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
485 All values in 'propvalues' must be acceptable types for their
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
486 corresponding properties or a TypeError is raised.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
487
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
488 If the value of the key property is set, it must not collide with
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
489 other key strings or a ValueError is raised.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
490
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
491 If the value of a Link or Multilink property contains an invalid
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
492 node id, a ValueError is raised.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
493 """
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
494 if not propvalues:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
495 return
118
a55c1301ba1f Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents: 89
diff changeset
496
a55c1301ba1f Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents: 89
diff changeset
497 if propvalues.has_key('id'):
a55c1301ba1f Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents: 89
diff changeset
498 raise KeyError, '"id" is reserved'
a55c1301ba1f Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents: 89
diff changeset
499
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
500 if self.db.journaltag is None:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
501 raise DatabaseError, 'Database open read-only'
118
a55c1301ba1f Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents: 89
diff changeset
502
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
503 node = self.db.getnode(self.classname, nodeid)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
504 if node.has_key(self.db.RETIRED_FLAG):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
505 raise IndexError
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
506 num_re = re.compile('^\d+$')
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
507 for key, value in propvalues.items():
236
8827f5931ea8 Fixed CGI client change messages...
Richard Jones <richard@users.sourceforge.net>
parents: 231
diff changeset
508 # check to make sure we're not duplicating an existing key
8827f5931ea8 Fixed CGI client change messages...
Richard Jones <richard@users.sourceforge.net>
parents: 231
diff changeset
509 if key == self.key and node[key] != value:
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
510 try:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
511 self.lookup(value)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
512 except KeyError:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
513 pass
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
514 else:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
515 raise ValueError, 'node with key "%s" exists'%value
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
516
395
d4b19c2ee740 Better handling of new properties.
Richard Jones <richard@users.sourceforge.net>
parents: 380
diff changeset
517 # this will raise the KeyError if the property isn't valid
397
d47818b09265 more new property handling
Richard Jones <richard@users.sourceforge.net>
parents: 395
diff changeset
518 # ... we don't use getprops() here because we only care about
d47818b09265 more new property handling
Richard Jones <richard@users.sourceforge.net>
parents: 395
diff changeset
519 # the writeable properties.
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
520 prop = self.properties[key]
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
521
627
952679be9e2c Added simple editing for classes that don't define a templated interface.
Richard Jones <richard@users.sourceforge.net>
parents: 618
diff changeset
522 # if the value's the same as the existing value, no sense in
952679be9e2c Added simple editing for classes that don't define a templated interface.
Richard Jones <richard@users.sourceforge.net>
parents: 618
diff changeset
523 # doing anything
628
923de4949369 Didn't accomodate new values for new properties
Richard Jones <richard@users.sourceforge.net>
parents: 627
diff changeset
524 if node.has_key(key) and value == node[key]:
627
952679be9e2c Added simple editing for classes that don't define a templated interface.
Richard Jones <richard@users.sourceforge.net>
parents: 618
diff changeset
525 del propvalues[key]
952679be9e2c Added simple editing for classes that don't define a templated interface.
Richard Jones <richard@users.sourceforge.net>
parents: 618
diff changeset
526 continue
952679be9e2c Added simple editing for classes that don't define a templated interface.
Richard Jones <richard@users.sourceforge.net>
parents: 618
diff changeset
527
952679be9e2c Added simple editing for classes that don't define a templated interface.
Richard Jones <richard@users.sourceforge.net>
parents: 618
diff changeset
528 # do stuff based on the prop type
224
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
529 if isinstance(prop, Link):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
530 link_class = self.properties[key].classname
89
b6b30ba53986 Fixed some of the exceptions so they're the right type.
Richard Jones <richard@users.sourceforge.net>
parents: 86
diff changeset
531 # if it isn't a number, it's a key
b6b30ba53986 Fixed some of the exceptions so they're the right type.
Richard Jones <richard@users.sourceforge.net>
parents: 86
diff changeset
532 if type(value) != type(''):
b6b30ba53986 Fixed some of the exceptions so they're the right type.
Richard Jones <richard@users.sourceforge.net>
parents: 86
diff changeset
533 raise ValueError, 'link value must be String'
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
534 if not num_re.match(value):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
535 try:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
536 value = self.db.classes[link_class].lookup(value)
457
6abdddc506e9 Cleaned up some bare except statements
Richard Jones <richard@users.sourceforge.net>
parents: 452
diff changeset
537 except (TypeError, KeyError):
89
b6b30ba53986 Fixed some of the exceptions so they're the right type.
Richard Jones <richard@users.sourceforge.net>
parents: 86
diff changeset
538 raise IndexError, 'new property "%s": %s not a %s'%(
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
539 key, value, self.properties[key].classname)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
540
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
541 if not self.db.hasnode(link_class, value):
89
b6b30ba53986 Fixed some of the exceptions so they're the right type.
Richard Jones <richard@users.sourceforge.net>
parents: 86
diff changeset
542 raise IndexError, '%s has no node %s'%(link_class, value)
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
543
555
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
544 if self.properties[key].do_journal:
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
545 # register the unlink with the old linked node
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
546 if node[key] is not None:
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
547 self.db.addjournal(link_class, node[key], 'unlink',
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
548 (self.classname, nodeid, key))
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
549
555
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
550 # register the link with the newly linked node
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
551 if value is not None:
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
552 self.db.addjournal(link_class, value, 'link',
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
553 (self.classname, nodeid, key))
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
554
224
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
555 elif isinstance(prop, Multilink):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
556 if type(value) != type([]):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
557 raise TypeError, 'new property "%s" not a list of ids'%key
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
558 link_class = self.properties[key].classname
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
559 l = []
89
b6b30ba53986 Fixed some of the exceptions so they're the right type.
Richard Jones <richard@users.sourceforge.net>
parents: 86
diff changeset
560 for entry in value:
b6b30ba53986 Fixed some of the exceptions so they're the right type.
Richard Jones <richard@users.sourceforge.net>
parents: 86
diff changeset
561 # if it isn't a number, it's a key
b6b30ba53986 Fixed some of the exceptions so they're the right type.
Richard Jones <richard@users.sourceforge.net>
parents: 86
diff changeset
562 if type(entry) != type(''):
b6b30ba53986 Fixed some of the exceptions so they're the right type.
Richard Jones <richard@users.sourceforge.net>
parents: 86
diff changeset
563 raise ValueError, 'link value must be String'
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
564 if not num_re.match(entry):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
565 try:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
566 entry = self.db.classes[link_class].lookup(entry)
457
6abdddc506e9 Cleaned up some bare except statements
Richard Jones <richard@users.sourceforge.net>
parents: 452
diff changeset
567 except (TypeError, KeyError):
89
b6b30ba53986 Fixed some of the exceptions so they're the right type.
Richard Jones <richard@users.sourceforge.net>
parents: 86
diff changeset
568 raise IndexError, 'new property "%s": %s not a %s'%(
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
569 key, entry, self.properties[key].classname)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
570 l.append(entry)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
571 value = l
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
572 propvalues[key] = value
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
573
527
53839883cab6 [SF#502951] adding new properties to old database
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
574 # handle removals
53839883cab6 [SF#502951] adding new properties to old database
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
575 if node.has_key(key):
53839883cab6 [SF#502951] adding new properties to old database
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
576 l = node[key]
53839883cab6 [SF#502951] adding new properties to old database
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
577 else:
53839883cab6 [SF#502951] adding new properties to old database
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
578 l = []
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
579 for id in l[:]:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
580 if id in value:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
581 continue
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
582 # register the unlink with the old linked node
555
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
583 if self.properties[key].do_journal:
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
584 self.db.addjournal(link_class, id, 'unlink',
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
585 (self.classname, nodeid, key))
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
586 l.remove(id)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
587
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
588 # handle additions
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
589 for id in value:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
590 if not self.db.hasnode(link_class, id):
555
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
591 raise IndexError, '%s has no node %s'%(
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
592 link_class, id)
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
593 if id in l:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
594 continue
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
595 # register the link with the newly linked node
555
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
596 if self.properties[key].do_journal:
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
597 self.db.addjournal(link_class, id, 'link',
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
598 (self.classname, nodeid, key))
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
599 l.append(id)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
600
224
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
601 elif isinstance(prop, String):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
602 if value is not None and type(value) != type(''):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
603 raise TypeError, 'new property "%s" not a string'%key
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
604
270
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
605 elif isinstance(prop, Password):
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
606 if not isinstance(value, password.Password):
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
607 raise TypeError, 'new property "%s" not a Password'% key
275
1cc866cec608 Moved the data stringification up into the hyperdb.Class class's...
Richard Jones <richard@users.sourceforge.net>
parents: 270
diff changeset
608 propvalues[key] = value = str(value)
270
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
609
543
22e0edf7da6e lots of date/interval related changes: more relaxed date format for input
Richard Jones <richard@users.sourceforge.net>
parents: 527
diff changeset
610 elif value is not None and isinstance(prop, Date):
228
1d1848c99abe Fixed some isFooTypes that I missed.
Richard Jones <richard@users.sourceforge.net>
parents: 224
diff changeset
611 if not isinstance(value, date.Date):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
612 raise TypeError, 'new property "%s" not a Date'% key
275
1cc866cec608 Moved the data stringification up into the hyperdb.Class class's...
Richard Jones <richard@users.sourceforge.net>
parents: 270
diff changeset
613 propvalues[key] = value = value.get_tuple()
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
614
543
22e0edf7da6e lots of date/interval related changes: more relaxed date format for input
Richard Jones <richard@users.sourceforge.net>
parents: 527
diff changeset
615 elif value is not None and isinstance(prop, Interval):
228
1d1848c99abe Fixed some isFooTypes that I missed.
Richard Jones <richard@users.sourceforge.net>
parents: 224
diff changeset
616 if not isinstance(value, date.Interval):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
617 raise TypeError, 'new property "%s" not an Interval'% key
275
1cc866cec608 Moved the data stringification up into the hyperdb.Class class's...
Richard Jones <richard@users.sourceforge.net>
parents: 270
diff changeset
618 propvalues[key] = value = value.get_tuple()
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
619
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
620 node[key] = value
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
621
627
952679be9e2c Added simple editing for classes that don't define a templated interface.
Richard Jones <richard@users.sourceforge.net>
parents: 618
diff changeset
622 # nothing to do?
952679be9e2c Added simple editing for classes that don't define a templated interface.
Richard Jones <richard@users.sourceforge.net>
parents: 618
diff changeset
623 if not propvalues:
952679be9e2c Added simple editing for classes that don't define a templated interface.
Richard Jones <richard@users.sourceforge.net>
parents: 618
diff changeset
624 return
952679be9e2c Added simple editing for classes that don't define a templated interface.
Richard Jones <richard@users.sourceforge.net>
parents: 618
diff changeset
625
952679be9e2c Added simple editing for classes that don't define a templated interface.
Richard Jones <richard@users.sourceforge.net>
parents: 618
diff changeset
626 # do the set, and journal it
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
627 self.db.setnode(self.classname, nodeid, node)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
628 self.db.addjournal(self.classname, nodeid, 'set', propvalues)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
629
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
630 def retire(self, nodeid):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
631 """Retire a node.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
632
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
633 The properties on the node remain available from the get() method,
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
634 and the node's id is never reused.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
635
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
636 Retired nodes are not returned by the find(), list(), or lookup()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
637 methods, and other nodes may reuse the values of their key properties.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
638 """
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
639 if self.db.journaltag is None:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
640 raise DatabaseError, 'Database open read-only'
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
641 node = self.db.getnode(self.classname, nodeid)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
642 node[self.db.RETIRED_FLAG] = 1
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
643 self.db.setnode(self.classname, nodeid, node)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
644 self.db.addjournal(self.classname, nodeid, 'retired', None)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
645
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
646 def history(self, nodeid):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
647 """Retrieve the journal of edits on a particular node.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
648
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
649 'nodeid' must be the id of an existing node of this class or an
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
650 IndexError is raised.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
651
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
652 The returned list contains tuples of the form
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
653
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
654 (date, tag, action, params)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
655
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
656 'date' is a Timestamp object specifying the time of the change and
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
657 'tag' is the journaltag specified when the database was opened.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
658 """
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
659 return self.db.getjournal(self.classname, nodeid)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
660
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
661 # Locating nodes:
627
952679be9e2c Added simple editing for classes that don't define a templated interface.
Richard Jones <richard@users.sourceforge.net>
parents: 618
diff changeset
662 def hasnode(self, nodeid):
952679be9e2c Added simple editing for classes that don't define a templated interface.
Richard Jones <richard@users.sourceforge.net>
parents: 618
diff changeset
663 '''Determine if the given nodeid actually exists
952679be9e2c Added simple editing for classes that don't define a templated interface.
Richard Jones <richard@users.sourceforge.net>
parents: 618
diff changeset
664 '''
952679be9e2c Added simple editing for classes that don't define a templated interface.
Richard Jones <richard@users.sourceforge.net>
parents: 618
diff changeset
665 return self.db.hasnode(self.classname, nodeid)
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
666
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
667 def setkey(self, propname):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
668 """Select a String property of this class to be the key property.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
669
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
670 'propname' must be the name of a String property of this class or
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
671 None, or a TypeError is raised. The values of the key property on
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
672 all existing nodes must be unique or a ValueError is raised.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
673 """
270
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
674 # TODO: validate that the property is a String!
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
675 self.key = propname
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
676
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
677 def getkey(self):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
678 """Return the name of the key property for this class or None."""
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
679 return self.key
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
680
188
1536be43d2fa Roundupdb now appends "mailing list" information to its messages...
Richard Jones <richard@users.sourceforge.net>
parents: 172
diff changeset
681 def labelprop(self, default_to_id=0):
123
51cce9671db0 Cleanup of the link label generation.
Richard Jones <richard@users.sourceforge.net>
parents: 118
diff changeset
682 ''' Return the property name for a label for the given node.
51cce9671db0 Cleanup of the link label generation.
Richard Jones <richard@users.sourceforge.net>
parents: 118
diff changeset
683
51cce9671db0 Cleanup of the link label generation.
Richard Jones <richard@users.sourceforge.net>
parents: 118
diff changeset
684 This method attempts to generate a consistent label for the node.
51cce9671db0 Cleanup of the link label generation.
Richard Jones <richard@users.sourceforge.net>
parents: 118
diff changeset
685 It tries the following in order:
51cce9671db0 Cleanup of the link label generation.
Richard Jones <richard@users.sourceforge.net>
parents: 118
diff changeset
686 1. key property
51cce9671db0 Cleanup of the link label generation.
Richard Jones <richard@users.sourceforge.net>
parents: 118
diff changeset
687 2. "name" property
51cce9671db0 Cleanup of the link label generation.
Richard Jones <richard@users.sourceforge.net>
parents: 118
diff changeset
688 3. "title" property
51cce9671db0 Cleanup of the link label generation.
Richard Jones <richard@users.sourceforge.net>
parents: 118
diff changeset
689 4. first property from the sorted property name list
51cce9671db0 Cleanup of the link label generation.
Richard Jones <richard@users.sourceforge.net>
parents: 118
diff changeset
690 '''
51cce9671db0 Cleanup of the link label generation.
Richard Jones <richard@users.sourceforge.net>
parents: 118
diff changeset
691 k = self.getkey()
51cce9671db0 Cleanup of the link label generation.
Richard Jones <richard@users.sourceforge.net>
parents: 118
diff changeset
692 if k:
51cce9671db0 Cleanup of the link label generation.
Richard Jones <richard@users.sourceforge.net>
parents: 118
diff changeset
693 return k
51cce9671db0 Cleanup of the link label generation.
Richard Jones <richard@users.sourceforge.net>
parents: 118
diff changeset
694 props = self.getprops()
51cce9671db0 Cleanup of the link label generation.
Richard Jones <richard@users.sourceforge.net>
parents: 118
diff changeset
695 if props.has_key('name'):
51cce9671db0 Cleanup of the link label generation.
Richard Jones <richard@users.sourceforge.net>
parents: 118
diff changeset
696 return 'name'
51cce9671db0 Cleanup of the link label generation.
Richard Jones <richard@users.sourceforge.net>
parents: 118
diff changeset
697 elif props.has_key('title'):
51cce9671db0 Cleanup of the link label generation.
Richard Jones <richard@users.sourceforge.net>
parents: 118
diff changeset
698 return 'title'
188
1536be43d2fa Roundupdb now appends "mailing list" information to its messages...
Richard Jones <richard@users.sourceforge.net>
parents: 172
diff changeset
699 if default_to_id:
1536be43d2fa Roundupdb now appends "mailing list" information to its messages...
Richard Jones <richard@users.sourceforge.net>
parents: 172
diff changeset
700 return 'id'
123
51cce9671db0 Cleanup of the link label generation.
Richard Jones <richard@users.sourceforge.net>
parents: 118
diff changeset
701 props = props.keys()
51cce9671db0 Cleanup of the link label generation.
Richard Jones <richard@users.sourceforge.net>
parents: 118
diff changeset
702 props.sort()
51cce9671db0 Cleanup of the link label generation.
Richard Jones <richard@users.sourceforge.net>
parents: 118
diff changeset
703 return props[0]
51cce9671db0 Cleanup of the link label generation.
Richard Jones <richard@users.sourceforge.net>
parents: 118
diff changeset
704
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
705 # TODO: set up a separate index db file for this? profile?
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
706 def lookup(self, keyvalue):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
707 """Locate a particular node by its key property and return its id.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
708
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
709 If this class has no key property, a TypeError is raised. If the
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
710 'keyvalue' matches one of the values for the key property among
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
711 the nodes in this class, the matching node's id is returned;
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
712 otherwise a KeyError is raised.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
713 """
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
714 cldb = self.db.getclassdb(self.classname)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
715 for nodeid in self.db.getnodeids(self.classname, cldb):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
716 node = self.db.getnode(self.classname, nodeid, cldb)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
717 if node.has_key(self.db.RETIRED_FLAG):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
718 continue
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
719 if node[self.key] == keyvalue:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
720 return nodeid
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
721 raise KeyError, keyvalue
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
722
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
723 # XXX: change from spec - allows multiple props to match
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
724 def find(self, **propspec):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
725 """Get the ids of nodes in this class which link to a given node.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
726
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
727 'propspec' consists of keyword args propname=nodeid
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
728 'propname' must be the name of a property in this class, or a
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
729 KeyError is raised. That property must be a Link or Multilink
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
730 property, or a TypeError is raised.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
731
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
732 'nodeid' must be the id of an existing node in the class linked
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
733 to by the given property, or an IndexError is raised.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
734 """
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
735 propspec = propspec.items()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
736 for propname, nodeid in propspec:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
737 # check the prop is OK
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
738 prop = self.properties[propname]
224
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
739 if not isinstance(prop, Link) and not isinstance(prop, Multilink):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
740 raise TypeError, "'%s' not a Link/Multilink property"%propname
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
741 if not self.db.hasnode(prop.classname, nodeid):
377
93dc08528ad9 roundup-admin now handles all hyperdb exceptions
Richard Jones <richard@users.sourceforge.net>
parents: 330
diff changeset
742 raise ValueError, '%s has no node %s'%(prop.classname, nodeid)
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
743
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
744 # ok, now do the find
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
745 cldb = self.db.getclassdb(self.classname)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
746 l = []
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
747 for id in self.db.getnodeids(self.classname, cldb):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
748 node = self.db.getnode(self.classname, id, cldb)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
749 if node.has_key(self.db.RETIRED_FLAG):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
750 continue
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
751 for propname, nodeid in propspec:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
752 property = node[propname]
224
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
753 if isinstance(prop, Link) and nodeid == property:
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
754 l.append(id)
224
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
755 elif isinstance(prop, Multilink) and nodeid in property:
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
756 l.append(id)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
757 return l
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
758
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
759 def stringFind(self, **requirements):
330
62f899fb0c03 Made Class.stringFind() do caseless matching.
Richard Jones <richard@users.sourceforge.net>
parents: 312
diff changeset
760 """Locate a particular node by matching a set of its String
62f899fb0c03 Made Class.stringFind() do caseless matching.
Richard Jones <richard@users.sourceforge.net>
parents: 312
diff changeset
761 properties in a caseless search.
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
762
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
763 If the property is not a String property, a TypeError is raised.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
764
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
765 The return is a list of the id of all nodes that match.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
766 """
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
767 for propname in requirements.keys():
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
768 prop = self.properties[propname]
224
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
769 if isinstance(not prop, String):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
770 raise TypeError, "'%s' not a String property"%propname
330
62f899fb0c03 Made Class.stringFind() do caseless matching.
Richard Jones <richard@users.sourceforge.net>
parents: 312
diff changeset
771 requirements[propname] = requirements[propname].lower()
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
772 l = []
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
773 cldb = self.db.getclassdb(self.classname)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
774 for nodeid in self.db.getnodeids(self.classname, cldb):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
775 node = self.db.getnode(self.classname, nodeid, cldb)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
776 if node.has_key(self.db.RETIRED_FLAG):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
777 continue
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
778 for key, value in requirements.items():
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 377
diff changeset
779 if node[key] and node[key].lower() != value:
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
780 break
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
781 else:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
782 l.append(nodeid)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
783 return l
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
784
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
785 def list(self):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
786 """Return a list of the ids of the active nodes in this class."""
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
787 l = []
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
788 cn = self.classname
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
789 cldb = self.db.getclassdb(cn)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
790 for nodeid in self.db.getnodeids(cn, cldb):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
791 node = self.db.getnode(cn, nodeid, cldb)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
792 if node.has_key(self.db.RETIRED_FLAG):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
793 continue
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
794 l.append(nodeid)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
795 l.sort()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
796 return l
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
797
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
798 # XXX not in spec
692
0521ddc7bb31 Miscellaneous changes.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 657
diff changeset
799 def filter(self, search_matches, filterspec, sort, group,
0521ddc7bb31 Miscellaneous changes.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 657
diff changeset
800 num_re = re.compile('^\d+$')):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
801 ''' Return a list of the ids of the active nodes in this class that
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
802 match the 'filter' spec, sorted by the group spec and then the
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
803 sort spec
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
804 '''
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
805 cn = self.classname
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
806
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
807 # optimise filterspec
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
808 l = []
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
809 props = self.getprops()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
810 for k, v in filterspec.items():
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
811 propclass = props[k]
224
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
812 if isinstance(propclass, Link):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
813 if type(v) is not type([]):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
814 v = [v]
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
815 # replace key values with node ids
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
816 u = []
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
817 link_class = self.db.classes[propclass.classname]
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
818 for entry in v:
312
5a2c43891c20 [SF#473124]: UI inconsistency with Link fields.
Richard Jones <richard@users.sourceforge.net>
parents: 305
diff changeset
819 if entry == '-1': entry = None
5a2c43891c20 [SF#473124]: UI inconsistency with Link fields.
Richard Jones <richard@users.sourceforge.net>
parents: 305
diff changeset
820 elif not num_re.match(entry):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
821 try:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
822 entry = link_class.lookup(entry)
457
6abdddc506e9 Cleaned up some bare except statements
Richard Jones <richard@users.sourceforge.net>
parents: 452
diff changeset
823 except (TypeError,KeyError):
312
5a2c43891c20 [SF#473124]: UI inconsistency with Link fields.
Richard Jones <richard@users.sourceforge.net>
parents: 305
diff changeset
824 raise ValueError, 'property "%s": %s not a %s'%(
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
825 k, entry, self.properties[k].classname)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
826 u.append(entry)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
827
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
828 l.append((0, k, u))
224
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
829 elif isinstance(propclass, Multilink):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
830 if type(v) is not type([]):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
831 v = [v]
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
832 # replace key values with node ids
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
833 u = []
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
834 link_class = self.db.classes[propclass.classname]
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
835 for entry in v:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
836 if not num_re.match(entry):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
837 try:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
838 entry = link_class.lookup(entry)
457
6abdddc506e9 Cleaned up some bare except statements
Richard Jones <richard@users.sourceforge.net>
parents: 452
diff changeset
839 except (TypeError,KeyError):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
840 raise ValueError, 'new property "%s": %s not a %s'%(
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
841 k, entry, self.properties[k].classname)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
842 u.append(entry)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
843 l.append((1, k, u))
224
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
844 elif isinstance(propclass, String):
231
afd428ba6523 better CGI text searching - but hidden filter fields are disappearing...
Richard Jones <richard@users.sourceforge.net>
parents: 230
diff changeset
845 # simple glob searching
afd428ba6523 better CGI text searching - but hidden filter fields are disappearing...
Richard Jones <richard@users.sourceforge.net>
parents: 230
diff changeset
846 v = re.sub(r'([\|\{\}\\\.\+\[\]\(\)])', r'\\\1', v)
afd428ba6523 better CGI text searching - but hidden filter fields are disappearing...
Richard Jones <richard@users.sourceforge.net>
parents: 230
diff changeset
847 v = v.replace('?', '.')
afd428ba6523 better CGI text searching - but hidden filter fields are disappearing...
Richard Jones <richard@users.sourceforge.net>
parents: 230
diff changeset
848 v = v.replace('*', '.*?')
afd428ba6523 better CGI text searching - but hidden filter fields are disappearing...
Richard Jones <richard@users.sourceforge.net>
parents: 230
diff changeset
849 l.append((2, k, re.compile(v, re.I)))
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
850 else:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
851 l.append((6, k, v))
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
852 filterspec = l
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
853
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
854 # now, find all the nodes that are active and pass filtering
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
855 l = []
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
856 cldb = self.db.getclassdb(cn)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
857 for nodeid in self.db.getnodeids(cn, cldb):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
858 node = self.db.getnode(cn, nodeid, cldb)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
859 if node.has_key(self.db.RETIRED_FLAG):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
860 continue
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
861 # apply filter
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
862 for t, k, v in filterspec:
415
105a052508a0 Another place that wasn't handling missing properties.
Richard Jones <richard@users.sourceforge.net>
parents: 406
diff changeset
863 # this node doesn't have this property, so reject it
105a052508a0 Another place that wasn't handling missing properties.
Richard Jones <richard@users.sourceforge.net>
parents: 406
diff changeset
864 if not node.has_key(k): break
105a052508a0 Another place that wasn't handling missing properties.
Richard Jones <richard@users.sourceforge.net>
parents: 406
diff changeset
865
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
866 if t == 0 and node[k] not in v:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
867 # link - if this node'd property doesn't appear in the
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
868 # filterspec's nodeid list, skip it
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
869 break
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
870 elif t == 1:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
871 # multilink - if any of the nodeids required by the
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
872 # filterspec aren't in this node's property, then skip
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
873 # it
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
874 for value in v:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
875 if value not in node[k]:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
876 break
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
877 else:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
878 continue
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
879 break
618
9431715612ac Oops, precedences around the way w0rng.
Richard Jones <richard@users.sourceforge.net>
parents: 617
diff changeset
880 elif t == 2 and (node[k] is None or not v.search(node[k])):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
881 # RE search
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
882 break
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
883 elif t == 6 and node[k] != v:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
884 # straight value comparison for the other types
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
885 break
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
886 else:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
887 l.append((nodeid, node))
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
888 l.sort()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
889
692
0521ddc7bb31 Miscellaneous changes.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 657
diff changeset
890 # filter based on full text search
0521ddc7bb31 Miscellaneous changes.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 657
diff changeset
891 if search_matches:
0521ddc7bb31 Miscellaneous changes.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 657
diff changeset
892 k = []
0521ddc7bb31 Miscellaneous changes.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 657
diff changeset
893 for v in l:
0521ddc7bb31 Miscellaneous changes.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 657
diff changeset
894 if search_matches.has_key(v[0]):
0521ddc7bb31 Miscellaneous changes.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 657
diff changeset
895 k.append(v)
0521ddc7bb31 Miscellaneous changes.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 657
diff changeset
896 l = k
0521ddc7bb31 Miscellaneous changes.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 657
diff changeset
897
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
898 # optimise sort
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
899 m = []
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
900 for entry in sort:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
901 if entry[0] != '-':
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
902 m.append(('+', entry))
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
903 else:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
904 m.append((entry[0], entry[1:]))
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
905 sort = m
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
906
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
907 # optimise group
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
908 m = []
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
909 for entry in group:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
910 if entry[0] != '-':
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
911 m.append(('+', entry))
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
912 else:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
913 m.append((entry[0], entry[1:]))
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
914 group = m
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
915 # now, sort the result
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
916 def sortfun(a, b, sort=sort, group=group, properties=self.getprops(),
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
917 db = self.db, cl=self):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
918 a_id, an = a
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
919 b_id, bn = b
86
b89712288636 just some comments
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
920 # sort by group and then sort
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
921 for list in group, sort:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
922 for dir, prop in list:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
923 # sorting is class-specific
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
924 propclass = properties[prop]
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
925
398
bbbcdee47762 *sigh* more missing value handling
Richard Jones <richard@users.sourceforge.net>
parents: 397
diff changeset
926 # handle the properties that might be "faked"
bbbcdee47762 *sigh* more missing value handling
Richard Jones <richard@users.sourceforge.net>
parents: 397
diff changeset
927 # also, handle possible missing properties
bbbcdee47762 *sigh* more missing value handling
Richard Jones <richard@users.sourceforge.net>
parents: 397
diff changeset
928 try:
bbbcdee47762 *sigh* more missing value handling
Richard Jones <richard@users.sourceforge.net>
parents: 397
diff changeset
929 if not an.has_key(prop):
bbbcdee47762 *sigh* more missing value handling
Richard Jones <richard@users.sourceforge.net>
parents: 397
diff changeset
930 an[prop] = cl.get(a_id, prop)
bbbcdee47762 *sigh* more missing value handling
Richard Jones <richard@users.sourceforge.net>
parents: 397
diff changeset
931 av = an[prop]
bbbcdee47762 *sigh* more missing value handling
Richard Jones <richard@users.sourceforge.net>
parents: 397
diff changeset
932 except KeyError:
bbbcdee47762 *sigh* more missing value handling
Richard Jones <richard@users.sourceforge.net>
parents: 397
diff changeset
933 # the node doesn't have a value for this property
bbbcdee47762 *sigh* more missing value handling
Richard Jones <richard@users.sourceforge.net>
parents: 397
diff changeset
934 if isinstance(propclass, Multilink): av = []
bbbcdee47762 *sigh* more missing value handling
Richard Jones <richard@users.sourceforge.net>
parents: 397
diff changeset
935 else: av = ''
bbbcdee47762 *sigh* more missing value handling
Richard Jones <richard@users.sourceforge.net>
parents: 397
diff changeset
936 try:
bbbcdee47762 *sigh* more missing value handling
Richard Jones <richard@users.sourceforge.net>
parents: 397
diff changeset
937 if not bn.has_key(prop):
bbbcdee47762 *sigh* more missing value handling
Richard Jones <richard@users.sourceforge.net>
parents: 397
diff changeset
938 bn[prop] = cl.get(b_id, prop)
bbbcdee47762 *sigh* more missing value handling
Richard Jones <richard@users.sourceforge.net>
parents: 397
diff changeset
939 bv = bn[prop]
bbbcdee47762 *sigh* more missing value handling
Richard Jones <richard@users.sourceforge.net>
parents: 397
diff changeset
940 except KeyError:
bbbcdee47762 *sigh* more missing value handling
Richard Jones <richard@users.sourceforge.net>
parents: 397
diff changeset
941 # the node doesn't have a value for this property
bbbcdee47762 *sigh* more missing value handling
Richard Jones <richard@users.sourceforge.net>
parents: 397
diff changeset
942 if isinstance(propclass, Multilink): bv = []
bbbcdee47762 *sigh* more missing value handling
Richard Jones <richard@users.sourceforge.net>
parents: 397
diff changeset
943 else: bv = ''
bbbcdee47762 *sigh* more missing value handling
Richard Jones <richard@users.sourceforge.net>
parents: 397
diff changeset
944
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
945 # String and Date values are sorted in the natural way
224
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
946 if isinstance(propclass, String):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
947 # clean up the strings
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
948 if av and av[0] in string.uppercase:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
949 av = an[prop] = av.lower()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
950 if bv and bv[0] in string.uppercase:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
951 bv = bn[prop] = bv.lower()
228
1d1848c99abe Fixed some isFooTypes that I missed.
Richard Jones <richard@users.sourceforge.net>
parents: 224
diff changeset
952 if (isinstance(propclass, String) or
1d1848c99abe Fixed some isFooTypes that I missed.
Richard Jones <richard@users.sourceforge.net>
parents: 224
diff changeset
953 isinstance(propclass, Date)):
305
cb6d168b5aaa Hyperdatabase sorts strings-that-look-like-numbers as numbers now.
Richard Jones <richard@users.sourceforge.net>
parents: 294
diff changeset
954 # it might be a string that's really an integer
466
a3548136f7bb Two bug fixes and a feature.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 460
diff changeset
955 try:
a3548136f7bb Two bug fixes and a feature.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 460
diff changeset
956 av = int(av)
a3548136f7bb Two bug fixes and a feature.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 460
diff changeset
957 bv = int(bv)
a3548136f7bb Two bug fixes and a feature.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 460
diff changeset
958 except:
a3548136f7bb Two bug fixes and a feature.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 460
diff changeset
959 pass
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
960 if dir == '+':
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
961 r = cmp(av, bv)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
962 if r != 0: return r
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
963 elif dir == '-':
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
964 r = cmp(bv, av)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
965 if r != 0: return r
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
966
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
967 # Link properties are sorted according to the value of
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
968 # the "order" property on the linked nodes if it is
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
969 # present; or otherwise on the key string of the linked
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
970 # nodes; or finally on the node ids.
224
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
971 elif isinstance(propclass, Link):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
972 link = db.classes[propclass.classname]
130
204f99944de0 Fixed sorting by clicking on column headings.
Richard Jones <richard@users.sourceforge.net>
parents: 128
diff changeset
973 if av is None and bv is not None: return -1
204f99944de0 Fixed sorting by clicking on column headings.
Richard Jones <richard@users.sourceforge.net>
parents: 128
diff changeset
974 if av is not None and bv is None: return 1
466
a3548136f7bb Two bug fixes and a feature.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 460
diff changeset
975 if av is None and bv is None: continue
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
976 if link.getprops().has_key('order'):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
977 if dir == '+':
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
978 r = cmp(link.get(av, 'order'),
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
979 link.get(bv, 'order'))
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
980 if r != 0: return r
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
981 elif dir == '-':
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
982 r = cmp(link.get(bv, 'order'),
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
983 link.get(av, 'order'))
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
984 if r != 0: return r
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
985 elif link.getkey():
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
986 key = link.getkey()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
987 if dir == '+':
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
988 r = cmp(link.get(av, key), link.get(bv, key))
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
989 if r != 0: return r
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
990 elif dir == '-':
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
991 r = cmp(link.get(bv, key), link.get(av, key))
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
992 if r != 0: return r
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
993 else:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
994 if dir == '+':
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
995 r = cmp(av, bv)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
996 if r != 0: return r
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
997 elif dir == '-':
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
998 r = cmp(bv, av)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
999 if r != 0: return r
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1000
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1001 # Multilink properties are sorted according to how many
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1002 # links are present.
224
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
1003 elif isinstance(propclass, Multilink):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1004 if dir == '+':
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1005 r = cmp(len(av), len(bv))
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1006 if r != 0: return r
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1007 elif dir == '-':
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1008 r = cmp(len(bv), len(av))
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1009 if r != 0: return r
86
b89712288636 just some comments
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
1010 # end for dir, prop in list:
b89712288636 just some comments
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
1011 # end for list in sort, group:
b89712288636 just some comments
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
1012 # if all else fails, compare the ids
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1013 return cmp(a[0], b[0])
86
b89712288636 just some comments
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
1014
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1015 l.sort(sortfun)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1016 return [i[0] for i in l]
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1017
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1018 def count(self):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1019 """Get the number of nodes in this class.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1020
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1021 If the returned integer is 'numnodes', the ids of all the nodes
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1022 in this class run from 1 to numnodes, and numnodes+1 will be the
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1023 id of the next node to be created in this class.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1024 """
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1025 return self.db.countnodes(self.classname)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1026
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1027 # Manipulating properties:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1028
262
ab921dc53ccd Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents: 236
diff changeset
1029 def getprops(self, protected=1):
ab921dc53ccd Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents: 236
diff changeset
1030 """Return a dictionary mapping property names to property objects.
ab921dc53ccd Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents: 236
diff changeset
1031 If the "protected" flag is true, we include protected properties -
ab921dc53ccd Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents: 236
diff changeset
1032 those which may not be modified."""
118
a55c1301ba1f Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents: 89
diff changeset
1033 d = self.properties.copy()
262
ab921dc53ccd Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents: 236
diff changeset
1034 if protected:
ab921dc53ccd Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents: 236
diff changeset
1035 d['id'] = String()
118
a55c1301ba1f Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents: 89
diff changeset
1036 return d
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1037
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1038 def addprop(self, **properties):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1039 """Add properties to this class.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1040
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1041 The keyword arguments in 'properties' must map names to property
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1042 objects, or a TypeError is raised. None of the keys in 'properties'
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1043 may collide with the names of existing properties, or a ValueError
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1044 is raised before any properties have been added.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1045 """
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1046 for key in properties.keys():
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1047 if self.properties.has_key(key):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1048 raise ValueError, key
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1049 self.properties.update(properties)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1050
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1051 # XXX not in spec
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1052 class Node:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1053 ''' A convenience wrapper for the given node
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1054 '''
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
1055 def __init__(self, cl, nodeid, cache=1):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1056 self.__dict__['cl'] = cl
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1057 self.__dict__['nodeid'] = nodeid
490
Richard Jones <richard@users.sourceforge.net>
parents: 477
diff changeset
1058 self.__dict__['cache'] = cache
278
a5dabf2430c5 Added database importing and exporting through CSV files.
Richard Jones <richard@users.sourceforge.net>
parents: 275
diff changeset
1059 def keys(self, protected=1):
a5dabf2430c5 Added database importing and exporting through CSV files.
Richard Jones <richard@users.sourceforge.net>
parents: 275
diff changeset
1060 return self.cl.getprops(protected=protected).keys()
a5dabf2430c5 Added database importing and exporting through CSV files.
Richard Jones <richard@users.sourceforge.net>
parents: 275
diff changeset
1061 def values(self, protected=1):
a5dabf2430c5 Added database importing and exporting through CSV files.
Richard Jones <richard@users.sourceforge.net>
parents: 275
diff changeset
1062 l = []
a5dabf2430c5 Added database importing and exporting through CSV files.
Richard Jones <richard@users.sourceforge.net>
parents: 275
diff changeset
1063 for name in self.cl.getprops(protected=protected).keys():
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
1064 l.append(self.cl.get(self.nodeid, name, cache=self.cache))
278
a5dabf2430c5 Added database importing and exporting through CSV files.
Richard Jones <richard@users.sourceforge.net>
parents: 275
diff changeset
1065 return l
a5dabf2430c5 Added database importing and exporting through CSV files.
Richard Jones <richard@users.sourceforge.net>
parents: 275
diff changeset
1066 def items(self, protected=1):
a5dabf2430c5 Added database importing and exporting through CSV files.
Richard Jones <richard@users.sourceforge.net>
parents: 275
diff changeset
1067 l = []
a5dabf2430c5 Added database importing and exporting through CSV files.
Richard Jones <richard@users.sourceforge.net>
parents: 275
diff changeset
1068 for name in self.cl.getprops(protected=protected).keys():
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
1069 l.append((name, self.cl.get(self.nodeid, name, cache=self.cache)))
278
a5dabf2430c5 Added database importing and exporting through CSV files.
Richard Jones <richard@users.sourceforge.net>
parents: 275
diff changeset
1070 return l
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1071 def has_key(self, name):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1072 return self.cl.getprops().has_key(name)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1073 def __getattr__(self, name):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1074 if self.__dict__.has_key(name):
278
a5dabf2430c5 Added database importing and exporting through CSV files.
Richard Jones <richard@users.sourceforge.net>
parents: 275
diff changeset
1075 return self.__dict__[name]
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1076 try:
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
1077 return self.cl.get(self.nodeid, name, cache=self.cache)
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1078 except KeyError, value:
460
9c895b44240a take a copy of the node dict...
Richard Jones <richard@users.sourceforge.net>
parents: 457
diff changeset
1079 # we trap this but re-raise it as AttributeError - all other
9c895b44240a take a copy of the node dict...
Richard Jones <richard@users.sourceforge.net>
parents: 457
diff changeset
1080 # exceptions should pass through untrapped
9c895b44240a take a copy of the node dict...
Richard Jones <richard@users.sourceforge.net>
parents: 457
diff changeset
1081 pass
9c895b44240a take a copy of the node dict...
Richard Jones <richard@users.sourceforge.net>
parents: 457
diff changeset
1082 # nope, no such attribute
9c895b44240a take a copy of the node dict...
Richard Jones <richard@users.sourceforge.net>
parents: 457
diff changeset
1083 raise AttributeError, str(value)
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1084 def __getitem__(self, name):
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
1085 return self.cl.get(self.nodeid, name, cache=self.cache)
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1086 def __setattr__(self, name, value):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1087 try:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1088 return self.cl.set(self.nodeid, **{name: value})
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1089 except KeyError, value:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1090 raise AttributeError, str(value)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1091 def __setitem__(self, name, value):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1092 self.cl.set(self.nodeid, **{name: value})
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1093 def history(self):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1094 return self.cl.history(self.nodeid)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1095 def retire(self):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1096 return self.cl.retire(self.nodeid)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1097
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1098
648
07422fe57db2 Ran it through pychecker, made fixes
Richard Jones <richard@users.sourceforge.net>
parents: 628
diff changeset
1099 def Choice(name, db, *options):
07422fe57db2 Ran it through pychecker, made fixes
Richard Jones <richard@users.sourceforge.net>
parents: 628
diff changeset
1100 '''Quick helper to create a simple class with choices
07422fe57db2 Ran it through pychecker, made fixes
Richard Jones <richard@users.sourceforge.net>
parents: 628
diff changeset
1101 '''
07422fe57db2 Ran it through pychecker, made fixes
Richard Jones <richard@users.sourceforge.net>
parents: 628
diff changeset
1102 cl = Class(db, name, name=String(), order=String())
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1103 for i in range(len(options)):
648
07422fe57db2 Ran it through pychecker, made fixes
Richard Jones <richard@users.sourceforge.net>
parents: 628
diff changeset
1104 cl.create(name=options[i], order=i)
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1105 return hyperdb.Link(name)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1106
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1107 #
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1108 # $Log: not supported by cvs2svn $
692
0521ddc7bb31 Miscellaneous changes.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 657
diff changeset
1109 # Revision 1.59 2002/03/12 22:52:26 richard
0521ddc7bb31 Miscellaneous changes.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 657
diff changeset
1110 # more pychecker warnings removed
0521ddc7bb31 Miscellaneous changes.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 657
diff changeset
1111 #
657
e0a1cc7538e9 more pychecker warnings removed
Richard Jones <richard@users.sourceforge.net>
parents: 648
diff changeset
1112 # Revision 1.58 2002/02/27 03:23:16 richard
e0a1cc7538e9 more pychecker warnings removed
Richard Jones <richard@users.sourceforge.net>
parents: 648
diff changeset
1113 # Ran it through pychecker, made fixes
e0a1cc7538e9 more pychecker warnings removed
Richard Jones <richard@users.sourceforge.net>
parents: 648
diff changeset
1114 #
648
07422fe57db2 Ran it through pychecker, made fixes
Richard Jones <richard@users.sourceforge.net>
parents: 628
diff changeset
1115 # Revision 1.57 2002/02/20 05:23:24 richard
07422fe57db2 Ran it through pychecker, made fixes
Richard Jones <richard@users.sourceforge.net>
parents: 628
diff changeset
1116 # Didn't accomodate new values for new properties
07422fe57db2 Ran it through pychecker, made fixes
Richard Jones <richard@users.sourceforge.net>
parents: 628
diff changeset
1117 #
628
923de4949369 Didn't accomodate new values for new properties
Richard Jones <richard@users.sourceforge.net>
parents: 627
diff changeset
1118 # Revision 1.56 2002/02/20 05:05:28 richard
923de4949369 Didn't accomodate new values for new properties
Richard Jones <richard@users.sourceforge.net>
parents: 627
diff changeset
1119 # . Added simple editing for classes that don't define a templated interface.
923de4949369 Didn't accomodate new values for new properties
Richard Jones <richard@users.sourceforge.net>
parents: 627
diff changeset
1120 # - access using the admin "class list" interface
923de4949369 Didn't accomodate new values for new properties
Richard Jones <richard@users.sourceforge.net>
parents: 627
diff changeset
1121 # - limited to admin-only
923de4949369 Didn't accomodate new values for new properties
Richard Jones <richard@users.sourceforge.net>
parents: 627
diff changeset
1122 # - requires the csv module from object-craft (url given if it's missing)
923de4949369 Didn't accomodate new values for new properties
Richard Jones <richard@users.sourceforge.net>
parents: 627
diff changeset
1123 #
627
952679be9e2c Added simple editing for classes that don't define a templated interface.
Richard Jones <richard@users.sourceforge.net>
parents: 618
diff changeset
1124 # Revision 1.55 2002/02/15 07:27:12 richard
952679be9e2c Added simple editing for classes that don't define a templated interface.
Richard Jones <richard@users.sourceforge.net>
parents: 618
diff changeset
1125 # Oops, precedences around the way w0rng.
952679be9e2c Added simple editing for classes that don't define a templated interface.
Richard Jones <richard@users.sourceforge.net>
parents: 618
diff changeset
1126 #
618
9431715612ac Oops, precedences around the way w0rng.
Richard Jones <richard@users.sourceforge.net>
parents: 617
diff changeset
1127 # Revision 1.54 2002/02/15 07:08:44 richard
9431715612ac Oops, precedences around the way w0rng.
Richard Jones <richard@users.sourceforge.net>
parents: 617
diff changeset
1128 # . Alternate email addresses are now available for users. See the MIGRATION
9431715612ac Oops, precedences around the way w0rng.
Richard Jones <richard@users.sourceforge.net>
parents: 617
diff changeset
1129 # file for info on how to activate the feature.
9431715612ac Oops, precedences around the way w0rng.
Richard Jones <richard@users.sourceforge.net>
parents: 617
diff changeset
1130 #
617
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 570
diff changeset
1131 # Revision 1.53 2002/01/22 07:21:13 richard
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 570
diff changeset
1132 # . fixed back_bsddb so it passed the journal tests
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 570
diff changeset
1133 #
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 570
diff changeset
1134 # ... it didn't seem happy using the back_anydbm _open method, which is odd.
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 570
diff changeset
1135 # Yet another occurrance of whichdb not being able to recognise older bsddb
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 570
diff changeset
1136 # databases. Yadda yadda. Made the HYPERDBDEBUG stuff more sane in the
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 570
diff changeset
1137 # process.
edd210915e64 Alternate email addresses are now available for users.
Richard Jones <richard@users.sourceforge.net>
parents: 570
diff changeset
1138 #
570
e346a9792335 fixed back_bsddb so it passed the journal tests
Richard Jones <richard@users.sourceforge.net>
parents: 562
diff changeset
1139 # Revision 1.52 2002/01/21 16:33:19 rochecompaan
e346a9792335 fixed back_bsddb so it passed the journal tests
Richard Jones <richard@users.sourceforge.net>
parents: 562
diff changeset
1140 # You can now use the roundup-admin tool to pack the database
e346a9792335 fixed back_bsddb so it passed the journal tests
Richard Jones <richard@users.sourceforge.net>
parents: 562
diff changeset
1141 #
562
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 557
diff changeset
1142 # Revision 1.51 2002/01/21 03:01:29 richard
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 557
diff changeset
1143 # brief docco on the do_journal argument
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 557
diff changeset
1144 #
557
dfac856502d1 brief docco on the do_journal argument
Richard Jones <richard@users.sourceforge.net>
parents: 555
diff changeset
1145 # Revision 1.50 2002/01/19 13:16:04 rochecompaan
dfac856502d1 brief docco on the do_journal argument
Richard Jones <richard@users.sourceforge.net>
parents: 555
diff changeset
1146 # Journal entries for link and multilink properties can now be switched on
dfac856502d1 brief docco on the do_journal argument
Richard Jones <richard@users.sourceforge.net>
parents: 555
diff changeset
1147 # or off.
dfac856502d1 brief docco on the do_journal argument
Richard Jones <richard@users.sourceforge.net>
parents: 555
diff changeset
1148 #
555
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
1149 # Revision 1.49 2002/01/16 07:02:57 richard
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
1150 # . lots of date/interval related changes:
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
1151 # - more relaxed date format for input
5fd94347c6f2 Journal entries for link and multilink properties can now be switched on or off.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 543
diff changeset
1152 #
543
22e0edf7da6e lots of date/interval related changes: more relaxed date format for input
Richard Jones <richard@users.sourceforge.net>
parents: 527
diff changeset
1153 # Revision 1.48 2002/01/14 06:32:34 richard
22e0edf7da6e lots of date/interval related changes: more relaxed date format for input
Richard Jones <richard@users.sourceforge.net>
parents: 527
diff changeset
1154 # . #502951 ] adding new properties to old database
22e0edf7da6e lots of date/interval related changes: more relaxed date format for input
Richard Jones <richard@users.sourceforge.net>
parents: 527
diff changeset
1155 #
527
53839883cab6 [SF#502951] adding new properties to old database
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
1156 # Revision 1.47 2002/01/14 02:20:15 richard
53839883cab6 [SF#502951] adding new properties to old database
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
1157 # . changed all config accesses so they access either the instance or the
53839883cab6 [SF#502951] adding new properties to old database
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
1158 # config attriubute on the db. This means that all config is obtained from
53839883cab6 [SF#502951] adding new properties to old database
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
1159 # instance_config instead of the mish-mash of classes. This will make
53839883cab6 [SF#502951] adding new properties to old database
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
1160 # switching to a ConfigParser setup easier too, I hope.
53839883cab6 [SF#502951] adding new properties to old database
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
1161 #
53839883cab6 [SF#502951] adding new properties to old database
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
1162 # At a minimum, this makes migration a _little_ easier (a lot easier in the
53839883cab6 [SF#502951] adding new properties to old database
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
1163 # 0.5.0 switch, I hope!)
53839883cab6 [SF#502951] adding new properties to old database
Richard Jones <richard@users.sourceforge.net>
parents: 524
diff changeset
1164 #
524
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 490
diff changeset
1165 # Revision 1.46 2002/01/07 10:42:23 richard
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 490
diff changeset
1166 # oops
dce4c75bef5a changed all config accesses...
Richard Jones <richard@users.sourceforge.net>
parents: 490
diff changeset
1167 #
490
Richard Jones <richard@users.sourceforge.net>
parents: 477
diff changeset
1168 # Revision 1.45 2002/01/02 04:18:17 richard
Richard Jones <richard@users.sourceforge.net>
parents: 477
diff changeset
1169 # hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 477
diff changeset
1170 #
477
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
1171 # Revision 1.44 2002/01/02 02:31:38 richard
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
1172 # Sorry for the huge checkin message - I was only intending to implement #496356
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
1173 # but I found a number of places where things had been broken by transactions:
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
1174 # . modified ROUNDUPDBSENDMAILDEBUG to be SENDMAILDEBUG and hold a filename
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
1175 # for _all_ roundup-generated smtp messages to be sent to.
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
1176 # . the transaction cache had broken the roundupdb.Class set() reactors
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
1177 # . newly-created author users in the mailgw weren't being committed to the db
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
1178 #
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
1179 # Stuff that made it into CHANGES.txt (ie. the stuff I was actually working
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
1180 # on when I found that stuff :):
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
1181 # . #496356 ] Use threading in messages
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
1182 # . detectors were being registered multiple times
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
1183 # . added tests for mailgw
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
1184 # . much better attaching of erroneous messages in the mail gateway
05a46da7293a hyperdb docstrings
Richard Jones <richard@users.sourceforge.net>
parents: 475
diff changeset
1185 #
475
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
1186 # Revision 1.43 2001/12/20 06:13:24 rochecompaan
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
1187 # Bugs fixed:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
1188 # . Exception handling in hyperdb for strings-that-look-like numbers got
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
1189 # lost somewhere
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
1190 # . Internet Explorer submits full path for filename - we now strip away
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
1191 # the path
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
1192 # Features added:
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
1193 # . Link and multilink properties are now displayed sorted in the cgi
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
1194 # interface
a1a44636bace Fix breakage caused by transaction changes.
Richard Jones <richard@users.sourceforge.net>
parents: 466
diff changeset
1195 #
466
a3548136f7bb Two bug fixes and a feature.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 460
diff changeset
1196 # Revision 1.42 2001/12/16 10:53:37 richard
a3548136f7bb Two bug fixes and a feature.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 460
diff changeset
1197 # take a copy of the node dict so that the subsequent set
a3548136f7bb Two bug fixes and a feature.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 460
diff changeset
1198 # operation doesn't modify the oldvalues structure
a3548136f7bb Two bug fixes and a feature.
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 460
diff changeset
1199 #
460
9c895b44240a take a copy of the node dict...
Richard Jones <richard@users.sourceforge.net>
parents: 457
diff changeset
1200 # Revision 1.41 2001/12/15 23:47:47 richard
9c895b44240a take a copy of the node dict...
Richard Jones <richard@users.sourceforge.net>
parents: 457
diff changeset
1201 # Cleaned up some bare except statements
9c895b44240a take a copy of the node dict...
Richard Jones <richard@users.sourceforge.net>
parents: 457
diff changeset
1202 #
457
6abdddc506e9 Cleaned up some bare except statements
Richard Jones <richard@users.sourceforge.net>
parents: 452
diff changeset
1203 # Revision 1.40 2001/12/14 23:42:57 richard
6abdddc506e9 Cleaned up some bare except statements
Richard Jones <richard@users.sourceforge.net>
parents: 452
diff changeset
1204 # yuck, a gdbm instance tests false :(
6abdddc506e9 Cleaned up some bare except statements
Richard Jones <richard@users.sourceforge.net>
parents: 452
diff changeset
1205 # I've left the debugging code in - it should be removed one day if we're ever
6abdddc506e9 Cleaned up some bare except statements
Richard Jones <richard@users.sourceforge.net>
parents: 452
diff changeset
1206 # _really_ anal about performace :)
6abdddc506e9 Cleaned up some bare except statements
Richard Jones <richard@users.sourceforge.net>
parents: 452
diff changeset
1207 #
452
7181efddce66 yuck, a gdbm instance tests false :(
Richard Jones <richard@users.sourceforge.net>
parents: 431
diff changeset
1208 # Revision 1.39 2001/12/02 05:06:16 richard
7181efddce66 yuck, a gdbm instance tests false :(
Richard Jones <richard@users.sourceforge.net>
parents: 431
diff changeset
1209 # . We now use weakrefs in the Classes to keep the database reference, so
7181efddce66 yuck, a gdbm instance tests false :(
Richard Jones <richard@users.sourceforge.net>
parents: 431
diff changeset
1210 # the close() method on the database is no longer needed.
7181efddce66 yuck, a gdbm instance tests false :(
Richard Jones <richard@users.sourceforge.net>
parents: 431
diff changeset
1211 # I bumped the minimum python requirement up to 2.1 accordingly.
7181efddce66 yuck, a gdbm instance tests false :(
Richard Jones <richard@users.sourceforge.net>
parents: 431
diff changeset
1212 # . #487480 ] roundup-server
7181efddce66 yuck, a gdbm instance tests false :(
Richard Jones <richard@users.sourceforge.net>
parents: 431
diff changeset
1213 # . #487476 ] INSTALL.txt
7181efddce66 yuck, a gdbm instance tests false :(
Richard Jones <richard@users.sourceforge.net>
parents: 431
diff changeset
1214 #
7181efddce66 yuck, a gdbm instance tests false :(
Richard Jones <richard@users.sourceforge.net>
parents: 431
diff changeset
1215 # I also cleaned up the change message / post-edit stuff in the cgi client.
7181efddce66 yuck, a gdbm instance tests false :(
Richard Jones <richard@users.sourceforge.net>
parents: 431
diff changeset
1216 # There's now a clearly marked "TODO: append the change note" where I believe
7181efddce66 yuck, a gdbm instance tests false :(
Richard Jones <richard@users.sourceforge.net>
parents: 431
diff changeset
1217 # the change note should be added there. The "changes" list will obviously
7181efddce66 yuck, a gdbm instance tests false :(
Richard Jones <richard@users.sourceforge.net>
parents: 431
diff changeset
1218 # have to be modified to be a dict of the changes, or somesuch.
7181efddce66 yuck, a gdbm instance tests false :(
Richard Jones <richard@users.sourceforge.net>
parents: 431
diff changeset
1219 #
7181efddce66 yuck, a gdbm instance tests false :(
Richard Jones <richard@users.sourceforge.net>
parents: 431
diff changeset
1220 # More testing needed.
7181efddce66 yuck, a gdbm instance tests false :(
Richard Jones <richard@users.sourceforge.net>
parents: 431
diff changeset
1221 #
431
a28a80b714f9 Eliminate database close method by using weakrefs.
Richard Jones <richard@users.sourceforge.net>
parents: 430
diff changeset
1222 # Revision 1.38 2001/12/01 07:17:50 richard
a28a80b714f9 Eliminate database close method by using weakrefs.
Richard Jones <richard@users.sourceforge.net>
parents: 430
diff changeset
1223 # . We now have basic transaction support! Information is only written to
a28a80b714f9 Eliminate database close method by using weakrefs.
Richard Jones <richard@users.sourceforge.net>
parents: 430
diff changeset
1224 # the database when the commit() method is called. Only the anydbm
a28a80b714f9 Eliminate database close method by using weakrefs.
Richard Jones <richard@users.sourceforge.net>
parents: 430
diff changeset
1225 # backend is modified in this way - neither of the bsddb backends have been.
a28a80b714f9 Eliminate database close method by using weakrefs.
Richard Jones <richard@users.sourceforge.net>
parents: 430
diff changeset
1226 # The mail, admin and cgi interfaces all use commit (except the admin tool
a28a80b714f9 Eliminate database close method by using weakrefs.
Richard Jones <richard@users.sourceforge.net>
parents: 430
diff changeset
1227 # doesn't have a commit command, so interactive users can't commit...)
a28a80b714f9 Eliminate database close method by using weakrefs.
Richard Jones <richard@users.sourceforge.net>
parents: 430
diff changeset
1228 # . Fixed login/registration forwarding the user to the right page (or not,
a28a80b714f9 Eliminate database close method by using weakrefs.
Richard Jones <richard@users.sourceforge.net>
parents: 430
diff changeset
1229 # on a failure)
a28a80b714f9 Eliminate database close method by using weakrefs.
Richard Jones <richard@users.sourceforge.net>
parents: 430
diff changeset
1230 #
430
350685601f37 Database transactions.
Richard Jones <richard@users.sourceforge.net>
parents: 419
diff changeset
1231 # Revision 1.37 2001/11/28 21:55:35 richard
350685601f37 Database transactions.
Richard Jones <richard@users.sourceforge.net>
parents: 419
diff changeset
1232 # . login_action and newuser_action return values were being ignored
350685601f37 Database transactions.
Richard Jones <richard@users.sourceforge.net>
parents: 419
diff changeset
1233 # . Woohoo! Found that bloody re-login bug that was killing the mail
350685601f37 Database transactions.
Richard Jones <richard@users.sourceforge.net>
parents: 419
diff changeset
1234 # gateway.
350685601f37 Database transactions.
Richard Jones <richard@users.sourceforge.net>
parents: 419
diff changeset
1235 # (also a minor cleanup in hyperdb)
350685601f37 Database transactions.
Richard Jones <richard@users.sourceforge.net>
parents: 419
diff changeset
1236 #
419
831e91e23963 login_action and newuser_action return values were being ignored
Richard Jones <richard@users.sourceforge.net>
parents: 415
diff changeset
1237 # Revision 1.36 2001/11/27 03:16:09 richard
831e91e23963 login_action and newuser_action return values were being ignored
Richard Jones <richard@users.sourceforge.net>
parents: 415
diff changeset
1238 # Another place that wasn't handling missing properties.
831e91e23963 login_action and newuser_action return values were being ignored
Richard Jones <richard@users.sourceforge.net>
parents: 415
diff changeset
1239 #
415
105a052508a0 Another place that wasn't handling missing properties.
Richard Jones <richard@users.sourceforge.net>
parents: 406
diff changeset
1240 # Revision 1.35 2001/11/22 15:46:42 jhermann
105a052508a0 Another place that wasn't handling missing properties.
Richard Jones <richard@users.sourceforge.net>
parents: 406
diff changeset
1241 # Added module docstrings to all modules.
105a052508a0 Another place that wasn't handling missing properties.
Richard Jones <richard@users.sourceforge.net>
parents: 406
diff changeset
1242 #
406
bdc2ea127ae9 Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 398
diff changeset
1243 # Revision 1.34 2001/11/21 04:04:43 richard
bdc2ea127ae9 Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 398
diff changeset
1244 # *sigh* more missing value handling
bdc2ea127ae9 Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents: 398
diff changeset
1245 #
398
bbbcdee47762 *sigh* more missing value handling
Richard Jones <richard@users.sourceforge.net>
parents: 397
diff changeset
1246 # Revision 1.33 2001/11/21 03:40:54 richard
bbbcdee47762 *sigh* more missing value handling
Richard Jones <richard@users.sourceforge.net>
parents: 397
diff changeset
1247 # more new property handling
bbbcdee47762 *sigh* more missing value handling
Richard Jones <richard@users.sourceforge.net>
parents: 397
diff changeset
1248 #
397
d47818b09265 more new property handling
Richard Jones <richard@users.sourceforge.net>
parents: 395
diff changeset
1249 # Revision 1.32 2001/11/21 03:11:28 richard
d47818b09265 more new property handling
Richard Jones <richard@users.sourceforge.net>
parents: 395
diff changeset
1250 # Better handling of new properties.
d47818b09265 more new property handling
Richard Jones <richard@users.sourceforge.net>
parents: 395
diff changeset
1251 #
395
d4b19c2ee740 Better handling of new properties.
Richard Jones <richard@users.sourceforge.net>
parents: 380
diff changeset
1252 # Revision 1.31 2001/11/12 22:01:06 richard
d4b19c2ee740 Better handling of new properties.
Richard Jones <richard@users.sourceforge.net>
parents: 380
diff changeset
1253 # Fixed issues with nosy reaction and author copies.
d4b19c2ee740 Better handling of new properties.
Richard Jones <richard@users.sourceforge.net>
parents: 380
diff changeset
1254 #
380
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 377
diff changeset
1255 # Revision 1.30 2001/11/09 10:11:08 richard
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 377
diff changeset
1256 # . roundup-admin now handles all hyperdb exceptions
a1331423eb93 Fixed issues with nosy reaction and author copies.
Richard Jones <richard@users.sourceforge.net>
parents: 377
diff changeset
1257 #
377
93dc08528ad9 roundup-admin now handles all hyperdb exceptions
Richard Jones <richard@users.sourceforge.net>
parents: 330
diff changeset
1258 # Revision 1.29 2001/10/27 00:17:41 richard
93dc08528ad9 roundup-admin now handles all hyperdb exceptions
Richard Jones <richard@users.sourceforge.net>
parents: 330
diff changeset
1259 # Made Class.stringFind() do caseless matching.
93dc08528ad9 roundup-admin now handles all hyperdb exceptions
Richard Jones <richard@users.sourceforge.net>
parents: 330
diff changeset
1260 #
330
62f899fb0c03 Made Class.stringFind() do caseless matching.
Richard Jones <richard@users.sourceforge.net>
parents: 312
diff changeset
1261 # Revision 1.28 2001/10/21 04:44:50 richard
62f899fb0c03 Made Class.stringFind() do caseless matching.
Richard Jones <richard@users.sourceforge.net>
parents: 312
diff changeset
1262 # bug #473124: UI inconsistency with Link fields.
62f899fb0c03 Made Class.stringFind() do caseless matching.
Richard Jones <richard@users.sourceforge.net>
parents: 312
diff changeset
1263 # This also prompted me to fix a fairly long-standing usability issue -
62f899fb0c03 Made Class.stringFind() do caseless matching.
Richard Jones <richard@users.sourceforge.net>
parents: 312
diff changeset
1264 # that of being able to turn off certain filters.
62f899fb0c03 Made Class.stringFind() do caseless matching.
Richard Jones <richard@users.sourceforge.net>
parents: 312
diff changeset
1265 #
312
5a2c43891c20 [SF#473124]: UI inconsistency with Link fields.
Richard Jones <richard@users.sourceforge.net>
parents: 305
diff changeset
1266 # Revision 1.27 2001/10/20 23:44:27 richard
5a2c43891c20 [SF#473124]: UI inconsistency with Link fields.
Richard Jones <richard@users.sourceforge.net>
parents: 305
diff changeset
1267 # Hyperdatabase sorts strings-that-look-like-numbers as numbers now.
5a2c43891c20 [SF#473124]: UI inconsistency with Link fields.
Richard Jones <richard@users.sourceforge.net>
parents: 305
diff changeset
1268 #
305
cb6d168b5aaa Hyperdatabase sorts strings-that-look-like-numbers as numbers now.
Richard Jones <richard@users.sourceforge.net>
parents: 294
diff changeset
1269 # Revision 1.26 2001/10/16 03:48:01 richard
cb6d168b5aaa Hyperdatabase sorts strings-that-look-like-numbers as numbers now.
Richard Jones <richard@users.sourceforge.net>
parents: 294
diff changeset
1270 # admin tool now complains if a "find" is attempted with a non-link property.
cb6d168b5aaa Hyperdatabase sorts strings-that-look-like-numbers as numbers now.
Richard Jones <richard@users.sourceforge.net>
parents: 294
diff changeset
1271 #
294
49be38bb6e9a admin tool now complains if a "find" is attempted with a non-link property.
Richard Jones <richard@users.sourceforge.net>
parents: 282
diff changeset
1272 # Revision 1.25 2001/10/11 00:17:51 richard
49be38bb6e9a admin tool now complains if a "find" is attempted with a non-link property.
Richard Jones <richard@users.sourceforge.net>
parents: 282
diff changeset
1273 # Reverted a change in hyperdb so the default value for missing property
49be38bb6e9a admin tool now complains if a "find" is attempted with a non-link property.
Richard Jones <richard@users.sourceforge.net>
parents: 282
diff changeset
1274 # values in a create() is None and not '' (the empty string.) This obviously
49be38bb6e9a admin tool now complains if a "find" is attempted with a non-link property.
Richard Jones <richard@users.sourceforge.net>
parents: 282
diff changeset
1275 # breaks CSV import/export - the string 'None' will be created in an
49be38bb6e9a admin tool now complains if a "find" is attempted with a non-link property.
Richard Jones <richard@users.sourceforge.net>
parents: 282
diff changeset
1276 # export/import operation.
49be38bb6e9a admin tool now complains if a "find" is attempted with a non-link property.
Richard Jones <richard@users.sourceforge.net>
parents: 282
diff changeset
1277 #
282
fb1b67a8fd98 Reverted a change in hyperdb...
Richard Jones <richard@users.sourceforge.net>
parents: 278
diff changeset
1278 # Revision 1.24 2001/10/10 03:54:57 richard
fb1b67a8fd98 Reverted a change in hyperdb...
Richard Jones <richard@users.sourceforge.net>
parents: 278
diff changeset
1279 # Added database importing and exporting through CSV files.
fb1b67a8fd98 Reverted a change in hyperdb...
Richard Jones <richard@users.sourceforge.net>
parents: 278
diff changeset
1280 # Uses the csv module from object-craft for exporting if it's available.
fb1b67a8fd98 Reverted a change in hyperdb...
Richard Jones <richard@users.sourceforge.net>
parents: 278
diff changeset
1281 # Requires the csv module for importing.
fb1b67a8fd98 Reverted a change in hyperdb...
Richard Jones <richard@users.sourceforge.net>
parents: 278
diff changeset
1282 #
278
a5dabf2430c5 Added database importing and exporting through CSV files.
Richard Jones <richard@users.sourceforge.net>
parents: 275
diff changeset
1283 # Revision 1.23 2001/10/09 23:58:10 richard
a5dabf2430c5 Added database importing and exporting through CSV files.
Richard Jones <richard@users.sourceforge.net>
parents: 275
diff changeset
1284 # Moved the data stringification up into the hyperdb.Class class' get, set
a5dabf2430c5 Added database importing and exporting through CSV files.
Richard Jones <richard@users.sourceforge.net>
parents: 275
diff changeset
1285 # and create methods. This means that the data is also stringified for the
a5dabf2430c5 Added database importing and exporting through CSV files.
Richard Jones <richard@users.sourceforge.net>
parents: 275
diff changeset
1286 # journal call, and removes duplication of code from the backends. The
a5dabf2430c5 Added database importing and exporting through CSV files.
Richard Jones <richard@users.sourceforge.net>
parents: 275
diff changeset
1287 # backend code now only sees strings.
a5dabf2430c5 Added database importing and exporting through CSV files.
Richard Jones <richard@users.sourceforge.net>
parents: 275
diff changeset
1288 #
275
1cc866cec608 Moved the data stringification up into the hyperdb.Class class's...
Richard Jones <richard@users.sourceforge.net>
parents: 270
diff changeset
1289 # Revision 1.22 2001/10/09 07:25:59 richard
1cc866cec608 Moved the data stringification up into the hyperdb.Class class's...
Richard Jones <richard@users.sourceforge.net>
parents: 270
diff changeset
1290 # Added the Password property type. See "pydoc roundup.password" for
1cc866cec608 Moved the data stringification up into the hyperdb.Class class's...
Richard Jones <richard@users.sourceforge.net>
parents: 270
diff changeset
1291 # implementation details. Have updated some of the documentation too.
1cc866cec608 Moved the data stringification up into the hyperdb.Class class's...
Richard Jones <richard@users.sourceforge.net>
parents: 270
diff changeset
1292 #
270
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
1293 # Revision 1.21 2001/10/05 02:23:24 richard
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
1294 # . roundup-admin create now prompts for property info if none is supplied
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
1295 # on the command-line.
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
1296 # . hyperdb Class getprops() method may now return only the mutable
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
1297 # properties.
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
1298 # . Login now uses cookies, which makes it a whole lot more flexible. We can
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
1299 # now support anonymous user access (read-only, unless there's an
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
1300 # "anonymous" user, in which case write access is permitted). Login
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
1301 # handling has been moved into cgi_client.Client.main()
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
1302 # . The "extended" schema is now the default in roundup init.
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
1303 # . The schemas have had their page headings modified to cope with the new
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
1304 # login handling. Existing installations should copy the interfaces.py
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
1305 # file from the roundup lib directory to their instance home.
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
1306 # . Incorrectly had a Bizar Software copyright on the cgitb.py module from
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
1307 # Ping - has been removed.
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
1308 # . Fixed a whole bunch of places in the CGI interface where we should have
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
1309 # been returning Not Found instead of throwing an exception.
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
1310 # . Fixed a deviation from the spec: trying to modify the 'id' property of
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
1311 # an item now throws an exception.
a4241ddd22d7 Added the Password property type.
Richard Jones <richard@users.sourceforge.net>
parents: 264
diff changeset
1312 #
264
a671e5917b33 Many features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 262
diff changeset
1313 # Revision 1.20 2001/10/04 02:12:42 richard
a671e5917b33 Many features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 262
diff changeset
1314 # Added nicer command-line item adding: passing no arguments will enter an
a671e5917b33 Many features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 262
diff changeset
1315 # interactive more which asks for each property in turn. While I was at it, I
a671e5917b33 Many features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 262
diff changeset
1316 # fixed an implementation problem WRT the spec - I wasn't raising a
a671e5917b33 Many features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 262
diff changeset
1317 # ValueError if the key property was missing from a create(). Also added a
a671e5917b33 Many features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 262
diff changeset
1318 # protected=boolean argument to getprops() so we can list only the mutable
a671e5917b33 Many features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 262
diff changeset
1319 # properties (defaults to yes, which lists the immutables).
a671e5917b33 Many features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 262
diff changeset
1320 #
262
ab921dc53ccd Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents: 236
diff changeset
1321 # Revision 1.19 2001/08/29 04:47:18 richard
ab921dc53ccd Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents: 236
diff changeset
1322 # Fixed CGI client change messages so they actually include the properties
ab921dc53ccd Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents: 236
diff changeset
1323 # changed (again).
ab921dc53ccd Added nicer command-line item adding:
Richard Jones <richard@users.sourceforge.net>
parents: 236
diff changeset
1324 #
236
8827f5931ea8 Fixed CGI client change messages...
Richard Jones <richard@users.sourceforge.net>
parents: 231
diff changeset
1325 # Revision 1.18 2001/08/16 07:34:59 richard
8827f5931ea8 Fixed CGI client change messages...
Richard Jones <richard@users.sourceforge.net>
parents: 231
diff changeset
1326 # better CGI text searching - but hidden filter fields are disappearing...
8827f5931ea8 Fixed CGI client change messages...
Richard Jones <richard@users.sourceforge.net>
parents: 231
diff changeset
1327 #
231
afd428ba6523 better CGI text searching - but hidden filter fields are disappearing...
Richard Jones <richard@users.sourceforge.net>
parents: 230
diff changeset
1328 # Revision 1.17 2001/08/16 06:59:58 richard
afd428ba6523 better CGI text searching - but hidden filter fields are disappearing...
Richard Jones <richard@users.sourceforge.net>
parents: 230
diff changeset
1329 # all searches use re now - and they're all case insensitive
afd428ba6523 better CGI text searching - but hidden filter fields are disappearing...
Richard Jones <richard@users.sourceforge.net>
parents: 230
diff changeset
1330 #
230
e17a43d2c0d0 all searches use re now - and they're all case insensitive
Richard Jones <richard@users.sourceforge.net>
parents: 228
diff changeset
1331 # Revision 1.16 2001/08/15 23:43:18 richard
e17a43d2c0d0 all searches use re now - and they're all case insensitive
Richard Jones <richard@users.sourceforge.net>
parents: 228
diff changeset
1332 # Fixed some isFooTypes that I missed.
e17a43d2c0d0 all searches use re now - and they're all case insensitive
Richard Jones <richard@users.sourceforge.net>
parents: 228
diff changeset
1333 # Refactored some code in the CGI code.
e17a43d2c0d0 all searches use re now - and they're all case insensitive
Richard Jones <richard@users.sourceforge.net>
parents: 228
diff changeset
1334 #
228
1d1848c99abe Fixed some isFooTypes that I missed.
Richard Jones <richard@users.sourceforge.net>
parents: 224
diff changeset
1335 # Revision 1.15 2001/08/12 06:32:36 richard
1d1848c99abe Fixed some isFooTypes that I missed.
Richard Jones <richard@users.sourceforge.net>
parents: 224
diff changeset
1336 # using isinstance(blah, Foo) now instead of isFooType
1d1848c99abe Fixed some isFooTypes that I missed.
Richard Jones <richard@users.sourceforge.net>
parents: 224
diff changeset
1337 #
224
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
1338 # Revision 1.14 2001/08/07 00:24:42 richard
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
1339 # stupid typo
ad2c98faec97 using isinstance(blah, Foo) now instead of isFooType
Richard Jones <richard@users.sourceforge.net>
parents: 214
diff changeset
1340 #
214
18134bffab37 stupid typo
Richard Jones <richard@users.sourceforge.net>
parents: 213
diff changeset
1341 # Revision 1.13 2001/08/07 00:15:51 richard
18134bffab37 stupid typo
Richard Jones <richard@users.sourceforge.net>
parents: 213
diff changeset
1342 # Added the copyright/license notice to (nearly) all files at request of
18134bffab37 stupid typo
Richard Jones <richard@users.sourceforge.net>
parents: 213
diff changeset
1343 # Bizar Software.
18134bffab37 stupid typo
Richard Jones <richard@users.sourceforge.net>
parents: 213
diff changeset
1344 #
213
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
1345 # Revision 1.12 2001/08/02 06:38:17 richard
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
1346 # Roundupdb now appends "mailing list" information to its messages which
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
1347 # include the e-mail address and web interface address. Templates may
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
1348 # override this in their db classes to include specific information (support
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
1349 # instructions, etc).
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 188
diff changeset
1350 #
188
1536be43d2fa Roundupdb now appends "mailing list" information to its messages...
Richard Jones <richard@users.sourceforge.net>
parents: 172
diff changeset
1351 # Revision 1.11 2001/08/01 04:24:21 richard
1536be43d2fa Roundupdb now appends "mailing list" information to its messages...
Richard Jones <richard@users.sourceforge.net>
parents: 172
diff changeset
1352 # mailgw was assuming certain properties existed on the issues being created.
1536be43d2fa Roundupdb now appends "mailing list" information to its messages...
Richard Jones <richard@users.sourceforge.net>
parents: 172
diff changeset
1353 #
172
c580555a6508 mailgw was assuming certain properties existed on the issues being created.
Richard Jones <richard@users.sourceforge.net>
parents: 156
diff changeset
1354 # Revision 1.10 2001/07/30 02:38:31 richard
c580555a6508 mailgw was assuming certain properties existed on the issues being created.
Richard Jones <richard@users.sourceforge.net>
parents: 156
diff changeset
1355 # get() now has a default arg - for migration only.
c580555a6508 mailgw was assuming certain properties existed on the issues being created.
Richard Jones <richard@users.sourceforge.net>
parents: 156
diff changeset
1356 #
156
9c5ddad06430 get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents: 130
diff changeset
1357 # Revision 1.9 2001/07/29 09:28:23 richard
9c5ddad06430 get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents: 130
diff changeset
1358 # Fixed sorting by clicking on column headings.
9c5ddad06430 get() now has a default arg - for migration only.
Richard Jones <richard@users.sourceforge.net>
parents: 130
diff changeset
1359 #
130
204f99944de0 Fixed sorting by clicking on column headings.
Richard Jones <richard@users.sourceforge.net>
parents: 128
diff changeset
1360 # Revision 1.8 2001/07/29 08:27:40 richard
204f99944de0 Fixed sorting by clicking on column headings.
Richard Jones <richard@users.sourceforge.net>
parents: 128
diff changeset
1361 # Fixed handling of passed-in values in form elements (ie. during a
204f99944de0 Fixed sorting by clicking on column headings.
Richard Jones <richard@users.sourceforge.net>
parents: 128
diff changeset
1362 # drill-down)
204f99944de0 Fixed sorting by clicking on column headings.
Richard Jones <richard@users.sourceforge.net>
parents: 128
diff changeset
1363 #
128
ce36f2962b94 Fixed handling of passed-in values in form elements (ie. during a drill-down)
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
1364 # Revision 1.7 2001/07/29 07:01:39 richard
ce36f2962b94 Fixed handling of passed-in values in form elements (ie. during a drill-down)
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
1365 # Added vim command to all source so that we don't get no steenkin' tabs :)
ce36f2962b94 Fixed handling of passed-in values in form elements (ie. during a drill-down)
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
1366 #
127
0791d13baea7 Added vim command to all source so that we don't get no steenkin' tabs :)
Richard Jones <richard@users.sourceforge.net>
parents: 123
diff changeset
1367 # Revision 1.6 2001/07/29 05:36:14 richard
0791d13baea7 Added vim command to all source so that we don't get no steenkin' tabs :)
Richard Jones <richard@users.sourceforge.net>
parents: 123
diff changeset
1368 # Cleanup of the link label generation.
0791d13baea7 Added vim command to all source so that we don't get no steenkin' tabs :)
Richard Jones <richard@users.sourceforge.net>
parents: 123
diff changeset
1369 #
123
51cce9671db0 Cleanup of the link label generation.
Richard Jones <richard@users.sourceforge.net>
parents: 118
diff changeset
1370 # Revision 1.5 2001/07/29 04:05:37 richard
51cce9671db0 Cleanup of the link label generation.
Richard Jones <richard@users.sourceforge.net>
parents: 118
diff changeset
1371 # Added the fabricated property "id".
51cce9671db0 Cleanup of the link label generation.
Richard Jones <richard@users.sourceforge.net>
parents: 118
diff changeset
1372 #
118
a55c1301ba1f Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents: 89
diff changeset
1373 # Revision 1.4 2001/07/27 06:25:35 richard
a55c1301ba1f Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents: 89
diff changeset
1374 # Fixed some of the exceptions so they're the right type.
a55c1301ba1f Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents: 89
diff changeset
1375 # Removed the str()-ification of node ids so we don't mask oopsy errors any
a55c1301ba1f Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents: 89
diff changeset
1376 # more.
a55c1301ba1f Added the fabricated property "id".
Richard Jones <richard@users.sourceforge.net>
parents: 89
diff changeset
1377 #
89
b6b30ba53986 Fixed some of the exceptions so they're the right type.
Richard Jones <richard@users.sourceforge.net>
parents: 86
diff changeset
1378 # Revision 1.3 2001/07/27 05:17:14 richard
b6b30ba53986 Fixed some of the exceptions so they're the right type.
Richard Jones <richard@users.sourceforge.net>
parents: 86
diff changeset
1379 # just some comments
b6b30ba53986 Fixed some of the exceptions so they're the right type.
Richard Jones <richard@users.sourceforge.net>
parents: 86
diff changeset
1380 #
86
b89712288636 just some comments
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
1381 # Revision 1.2 2001/07/22 12:09:32 richard
b89712288636 just some comments
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
1382 # Final commit of Grande Splite
b89712288636 just some comments
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
1383 #
26
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents: 25
diff changeset
1384 # Revision 1.1 2001/07/22 11:58:35 richard
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents: 25
diff changeset
1385 # More Grande Splite
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1386 #
127
0791d13baea7 Added vim command to all source so that we don't get no steenkin' tabs :)
Richard Jones <richard@users.sourceforge.net>
parents: 123
diff changeset
1387 #
0791d13baea7 Added vim command to all source so that we don't get no steenkin' tabs :)
Richard Jones <richard@users.sourceforge.net>
parents: 123
diff changeset
1388 # vim: set filetype=python ts=4 sw=4 et si

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