Mercurial > p > roundup > code
annotate doc/design.txt @ 907:38a74d1351c5
documentation updates
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Mon, 29 Jul 2002 00:54:41 +0000 |
| parents | |
| children | 299f4890427d |
| rev | line source |
|---|---|
|
907
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1 ======================================================== |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
2 Roundup - An Issue-Tracking System for Knowledge Workers |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
3 ======================================================== |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
4 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
5 :Authors: Ka-Ping Yee (original__), Richard Jones (implementation) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
6 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
7 __ spec.html |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
8 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
9 .. contents:: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
10 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
11 Introduction |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
12 --------------- |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
13 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
14 This document presents a description of the components |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
15 of the Roundup system and specifies their interfaces and |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
16 behaviour in sufficient detail to guide an implementation. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
17 For the philosophy and rationale behind the Roundup design, |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
18 see the first-round Software Carpentry submission for Roundup. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
19 This document fleshes out that design as well as specifying |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
20 interfaces so that the components can be developed separately. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
21 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
22 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
23 The Layer Cake |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
24 ----------------- |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
25 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
26 Lots of software design documents come with a picture of |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
27 a cake. Everybody seems to like them. I also like cakes |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
28 (i think they are tasty). So i, too, shall include |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
29 a picture of a cake here:: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
30 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
31 _________________________________________________________________________ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
32 | E-mail Client | Web Browser | Detector Scripts | Shell | |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
33 |------------------+-----------------+----------------------+-------------| |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
34 | E-mail User | Web User | Detector | Command | |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
35 |-------------------------------------------------------------------------| |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
36 | Roundup Database Layer | |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
37 |-------------------------------------------------------------------------| |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
38 | Hyperdatabase Layer | |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
39 |-------------------------------------------------------------------------| |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
40 | Storage Layer | |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
41 ------------------------------------------------------------------------- |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
42 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
43 The colourful parts of the cake are part of our system; |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
44 the faint grey parts of the cake are external components. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
45 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
46 I will now proceed to forgo all table manners and |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
47 eat from the bottom of the cake to the top. You may want |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
48 to stand back a bit so you don't get covered in crumbs. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
49 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
50 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
51 Hyperdatabase |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
52 ------------- |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
53 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
54 The lowest-level component to be implemented is the hyperdatabase. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
55 The hyperdatabase is intended to be |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
56 a flexible data store that can hold configurable data in |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
57 records which we call nodes. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
58 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
59 The hyperdatabase is implemented on top of the storage layer, |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
60 an external module for storing its data. The storage layer could |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
61 be a third-party RDBMS; for a "batteries-included" distribution, |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
62 implementing the hyperdatabase on the standard bsddb |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
63 module is suggested. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
64 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
65 Dates and Date Arithmetic |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
66 ~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
67 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
68 Before we get into the hyperdatabase itself, we need a |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
69 way of handling dates. The hyperdatabase module provides |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
70 Timestamp objects for |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
71 representing date-and-time stamps and Interval objects for |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
72 representing date-and-time intervals. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
73 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
74 As strings, date-and-time stamps are specified with |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
75 the date in international standard format |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
76 (``yyyy-mm-dd``) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
77 joined to the time (``hh:mm:ss``) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
78 by a period "``.``". Dates in |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
79 this form can be easily compared and are fairly readable |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
80 when printed. An example of a valid stamp is |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
81 "``2000-06-24.13:03:59``". |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
82 We'll call this the "full date format". When Timestamp objects are |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
83 printed as strings, they appear in the full date format with |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
84 the time always given in GMT. The full date format is always |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
85 exactly 19 characters long. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
86 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
87 For user input, some partial forms are also permitted: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
88 the whole time or just the seconds may be omitted; and the whole date |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
89 may be omitted or just the year may be omitted. If the time is given, |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
90 the time is interpreted in the user's local time zone. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
91 The Date constructor takes care of these conversions. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
92 In the following examples, suppose that ``yyyy`` is the current year, |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
93 ``mm`` is the current month, and ``dd`` is the current |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
94 day of the month; and suppose that the user is on Eastern Standard Time. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
95 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
96 - "2000-04-17" means <Date 2000-04-17.00:00:00> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
97 - "01-25" means <Date yyyy-01-25.00:00:00> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
98 - "2000-04-17.03:45" means <Date 2000-04-17.08:45:00> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
99 - "08-13.22:13" means <Date yyyy-08-14.03:13:00> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
100 - "11-07.09:32:43" means <Date yyyy-11-07.14:32:43> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
101 - "14:25" means |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
102 - <Date yyyy-mm-dd.19:25:00> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
103 - "8:47:11" means |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
104 - <Date yyyy-mm-dd.13:47:11> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
105 - the special date "." means "right now" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
106 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
107 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
108 Date intervals are specified using the suffixes |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
109 "y", "m", and "d". The suffix "w" (for "week") means 7 days. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
110 Time intervals are specified in hh:mm:ss format (the seconds |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
111 may be omitted, but the hours and minutes may not). |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
112 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
113 - "3y" means three years |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
114 - "2y 1m" means two years and one month |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
115 - "1m 25d" means one month and 25 days |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
116 - "2w 3d" means two weeks and three days |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
117 - "1d 2:50" means one day, two hours, and 50 minutes |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
118 - "14:00" means 14 hours |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
119 - "0:04:33" means four minutes and 33 seconds |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
120 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
121 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
122 The Date class should understand simple date expressions of the form |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
123 *stamp* ``+`` *interval* and *stamp* ``-`` *interval*. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
124 When adding or subtracting intervals involving months or years, the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
125 components are handled separately. For example, when evaluating |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
126 "``2000-06-25 + 1m 10d``", we first add one month to |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
127 get 2000-07-25, then add 10 days to get |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
128 2000-08-04 (rather than trying to decide whether |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
129 1m 10d means 38 or 40 or 41 days). |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
130 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
131 Here is an outline of the Date and Interval classes:: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
132 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
133 class Date: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
134 def __init__(self, spec, offset): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
135 """Construct a date given a specification and a time zone offset. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
136 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
137 'spec' is a full date or a partial form, with an optional |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
138 added or subtracted interval. 'offset' is the local time |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
139 zone offset from GMT in hours. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
140 """ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
141 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
142 def __add__(self, interval): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
143 """Add an interval to this date to produce another date.""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
144 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
145 def __sub__(self, interval): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
146 """Subtract an interval from this date to produce another date.""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
147 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
148 def __cmp__(self, other): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
149 """Compare this date to another date.""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
150 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
151 def __str__(self): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
152 """Return this date as a string in the yyyy-mm-dd.hh:mm:ss format.""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
153 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
154 def local(self, offset): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
155 """Return this date as yyyy-mm-dd.hh:mm:ss in a local time zone.""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
156 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
157 class Interval: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
158 def __init__(self, spec): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
159 """Construct an interval given a specification.""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
160 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
161 def __cmp__(self, other): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
162 """Compare this interval to another interval.""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
163 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
164 def __str__(self): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
165 """Return this interval as a string.""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
166 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
167 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
168 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
169 Here are some examples of how these classes would behave in practice. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
170 For the following examples, assume that we are on Eastern Standard |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
171 Time and the current local time is 19:34:02 on 25 June 2000:: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
172 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
173 >>> Date(".") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
174 <Date 2000-06-26.00:34:02> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
175 >>> _.local(-5) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
176 "2000-06-25.19:34:02" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
177 >>> Date(". + 2d") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
178 <Date 2000-06-28.00:34:02> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
179 >>> Date("1997-04-17", -5) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
180 <Date 1997-04-17.00:00:00> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
181 >>> Date("01-25", -5) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
182 <Date 2000-01-25.00:00:00> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
183 >>> Date("08-13.22:13", -5) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
184 <Date 2000-08-14.03:13:00> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
185 >>> Date("14:25", -5) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
186 <Date 2000-06-25.19:25:00> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
187 >>> Interval(" 3w 1 d 2:00") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
188 <Interval 22d 2:00> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
189 >>> Date(". + 2d") - Interval("3w") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
190 <Date 2000-06-07.00:34:02> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
191 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
192 Nodes and Classes |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
193 ~~~~~~~~~~~~~~~~~ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
194 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
195 Nodes contain data in properties. To Python, these |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
196 properties are presented as the key-value pairs of a dictionary. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
197 Each node belongs to a class which defines the names |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
198 and types of its properties. The database permits the creation |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
199 and modification of classes as well as nodes. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
200 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
201 Identifiers and Designators |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
202 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
203 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
204 Each node has a numeric identifier which is unique among |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
205 nodes in its class. The nodes are numbered sequentially |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
206 within each class in order of creation, starting from 1. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
207 The designator |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
208 for a node is a way to identify a node in the database, and |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
209 consists of the name of the node's class concatenated with |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
210 the node's numeric identifier. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
211 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
212 For example, if "spam" and "eggs" are classes, the first |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
213 node created in class "spam" has id 1 and designator "spam1". |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
214 The first node created in class "eggs" also has id 1 but has |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
215 the distinct designator "eggs1". Node designators are |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
216 conventionally enclosed in square brackets when mentioned |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
217 in plain text. This permits a casual mention of, say, |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
218 "[patch37]" in an e-mail message to be turned into an active |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
219 hyperlink. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
220 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
221 Property Names and Types |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
222 ~~~~~~~~~~~~~~~~~~~~~~~~ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
223 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
224 Property names must begin with a letter. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
225 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
226 A property may be one of five basic types: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
227 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
228 - String properties are for storing arbitrary-length strings. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
229 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
230 - Boolean properties are for storing true/false, or yes/no values. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
231 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
232 - Number properties are for storing numeric values. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
233 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
234 - Date properties store date-and-time stamps. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
235 Their values are Timestamp objects. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
236 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
237 - A Link property refers to a single other node |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
238 selected from a specified class. The class is part of the property; |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
239 the value is an integer, the id of the chosen node. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
240 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
241 - A Multilink property refers to possibly many nodes |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
242 in a specified class. The value is a list of integers. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
243 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
244 *None* is also a permitted value for any of these property |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
245 types. An attempt to store None into a Multilink property stores an empty list. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
246 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
247 A property that is not specified will return as None from a *get* |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
248 operation. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
249 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
250 Hyperdb Interface Specification |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
251 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
252 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
253 The hyperdb module provides property objects to designate |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
254 the different kinds of properties. These objects are used when |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
255 specifying what properties belong in classes:: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
256 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
257 class String: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
258 def __init__(self, indexme='no'): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
259 """An object designating a String property.""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
260 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
261 class Boolean: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
262 def __init__(self): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
263 """An object designating a Boolean property.""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
264 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
265 class Number: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
266 def __init__(self): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
267 """An object designating a Number property.""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
268 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
269 class Date: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
270 def __init__(self): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
271 """An object designating a Date property.""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
272 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
273 class Link: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
274 def __init__(self, classname, do_journal='yes'): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
275 """An object designating a Link property that links to |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
276 nodes in a specified class. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
277 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
278 If the do_journal argument is not 'yes' then changes to |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
279 the property are not journalled in the linked node. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
280 """ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
281 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
282 class Multilink: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
283 def __init__(self, classname, do_journal='yes'): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
284 """An object designating a Multilink property that links |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
285 to nodes in a specified class. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
286 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
287 If the do_journal argument is not 'yes' then changes to |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
288 the property are not journalled in the linked node(s). |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
289 """ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
290 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
291 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
292 Here is the interface provided by the hyperdatabase:: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
293 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
294 class Database: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
295 """A database for storing records containing flexible data types.""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
296 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
297 def __init__(self, storagelocator, journaltag): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
298 """Open a hyperdatabase given a specifier to some storage. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
299 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
300 The meaning of 'storagelocator' depends on the particular |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
301 implementation of the hyperdatabase. It could be a file name, |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
302 a directory path, a socket descriptor for a connection to a |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
303 database over the network, etc. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
304 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
305 The 'journaltag' is a token that will be attached to the journal |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
306 entries for any edits done on the database. If 'journaltag' is |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
307 None, the database is opened in read-only mode: the Class.create(), |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
308 Class.set(), and Class.retire() methods are disabled. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
309 """ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
310 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
311 def __getattr__(self, classname): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
312 """A convenient way of calling self.getclass(classname).""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
313 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
314 def getclasses(self): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
315 """Return a list of the names of all existing classes.""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
316 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
317 def getclass(self, classname): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
318 """Get the Class object representing a particular class. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
319 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
320 If 'classname' is not a valid class name, a KeyError is raised. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
321 """ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
322 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
323 class Class: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
324 """The handle to a particular class of nodes in a hyperdatabase.""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
325 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
326 def __init__(self, db, classname, **properties): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
327 """Create a new class with a given name and property specification. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
328 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
329 'classname' must not collide with the name of an existing class, |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
330 or a ValueError is raised. The keyword arguments in 'properties' |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
331 must map names to property objects, or a TypeError is raised. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
332 """ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
333 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
334 # Editing nodes: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
335 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
336 def create(self, **propvalues): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
337 """Create a new node of this class and return its id. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
338 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
339 The keyword arguments in 'propvalues' map property names to values. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
340 The values of arguments must be acceptable for the types of their |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
341 corresponding properties or a TypeError is raised. If this class |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
342 has a key property, it must be present and its value must not |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
343 collide with other key strings or a ValueError is raised. Any other |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
344 properties on this class that are missing from the 'propvalues' |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
345 dictionary are set to None. If an id in a link or multilink |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
346 property does not refer to a valid node, an IndexError is raised. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
347 """ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
348 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
349 def get(self, nodeid, propname): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
350 """Get the value of a property on an existing node of this class. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
351 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
352 'nodeid' must be the id of an existing node of this class or an |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
353 IndexError is raised. 'propname' must be the name of a property |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
354 of this class or a KeyError is raised. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
355 """ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
356 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
357 def set(self, nodeid, **propvalues): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
358 """Modify a property on an existing node of this class. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
359 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
360 'nodeid' must be the id of an existing node of this class or an |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
361 IndexError is raised. Each key in 'propvalues' must be the name |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
362 of a property of this class or a KeyError is raised. All values |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
363 in 'propvalues' must be acceptable types for their corresponding |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
364 properties or a TypeError is raised. If the value of the key |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
365 property is set, it must not collide with other key strings or a |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
366 ValueError is raised. If the value of a Link or Multilink |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
367 property contains an invalid node id, a ValueError is raised. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
368 """ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
369 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
370 def retire(self, nodeid): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
371 """Retire a node. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
372 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
373 The properties on the node remain available from the get() method, |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
374 and the node's id is never reused. Retired nodes are not returned |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
375 by the find(), list(), or lookup() methods, and other nodes may |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
376 reuse the values of their key properties. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
377 """ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
378 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
379 def history(self, nodeid): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
380 """Retrieve the journal of edits on a particular node. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
381 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
382 'nodeid' must be the id of an existing node of this class or an |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
383 IndexError is raised. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
384 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
385 The returned list contains tuples of the form |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
386 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
387 (date, tag, action, params) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
388 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
389 'date' is a Timestamp object specifying the time of the change and |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
390 'tag' is the journaltag specified when the database was opened. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
391 'action' may be: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
392 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
393 'create' or 'set' -- 'params' is a dictionary of property values |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
394 'link' or 'unlink' -- 'params' is (classname, nodeid, propname) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
395 'retire' -- 'params' is None |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
396 """ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
397 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
398 # Locating nodes: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
399 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
400 def setkey(self, propname): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
401 """Select a String property of this class to be the key property. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
402 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
403 'propname' must be the name of a String property of this class or |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
404 None, or a TypeError is raised. The values of the key property on |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
405 all existing nodes must be unique or a ValueError is raised. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
406 """ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
407 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
408 def getkey(self): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
409 """Return the name of the key property for this class or None.""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
410 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
411 def lookup(self, keyvalue): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
412 """Locate a particular node by its key property and return its id. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
413 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
414 If this class has no key property, a TypeError is raised. If the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
415 'keyvalue' matches one of the values for the key property among |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
416 the nodes in this class, the matching node's id is returned; |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
417 otherwise a KeyError is raised. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
418 """ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
419 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
420 def find(self, propname, nodeid): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
421 """Get the ids of nodes in this class which link to a given node. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
422 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
423 'propname' must be the name of a property in this class, or a |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
424 KeyError is raised. That property must be a Link or Multilink |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
425 property, or a TypeError is raised. 'nodeid' must be the id of |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
426 an existing node in the class linked to by the given property, |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
427 or an IndexError is raised. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
428 """ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
429 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
430 def list(self): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
431 """Return a list of the ids of the active nodes in this class.""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
432 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
433 def count(self): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
434 """Get the number of nodes in this class. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
435 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
436 If the returned integer is 'numnodes', the ids of all the nodes |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
437 in this class run from 1 to numnodes, and numnodes+1 will be the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
438 id of the next node to be created in this class. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
439 """ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
440 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
441 # Manipulating properties: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
442 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
443 def getprops(self): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
444 """Return a dictionary mapping property names to property objects.""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
445 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
446 def addprop(self, **properties): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
447 """Add properties to this class. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
448 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
449 The keyword arguments in 'properties' must map names to property |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
450 objects, or a TypeError is raised. None of the keys in 'properties' |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
451 may collide with the names of existing properties, or a ValueError |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
452 is raised before any properties have been added. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
453 """ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
454 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
455 TODO: additional methods |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
456 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
457 Hyperdatabase Implementations |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
458 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
459 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
460 Hyperdatabase implementations exist to create the interface described in the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
461 `hyperdb interface specification`_ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
462 over an existing storage mechanism. Examples are relational databases, |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
463 \*dbm key-value databases, and so on. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
464 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
465 TODO: finish |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
466 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
467 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
468 Application Example |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
469 ~~~~~~~~~~~~~~~~~~~ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
470 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
471 Here is an example of how the hyperdatabase module would work in practice:: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
472 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
473 >>> import hyperdb |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
474 >>> db = hyperdb.Database("foo.db", "ping") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
475 >>> db |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
476 <hyperdb.Database "foo.db" opened by "ping"> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
477 >>> hyperdb.Class(db, "status", name=hyperdb.String()) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
478 <hyperdb.Class "status"> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
479 >>> _.setkey("name") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
480 >>> db.status.create(name="unread") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
481 1 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
482 >>> db.status.create(name="in-progress") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
483 2 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
484 >>> db.status.create(name="testing") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
485 3 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
486 >>> db.status.create(name="resolved") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
487 4 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
488 >>> db.status.count() |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
489 4 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
490 >>> db.status.list() |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
491 [1, 2, 3, 4] |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
492 >>> db.status.lookup("in-progress") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
493 2 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
494 >>> db.status.retire(3) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
495 >>> db.status.list() |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
496 [1, 2, 4] |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
497 >>> hyperdb.Class(db, "issue", title=hyperdb.String(), status=hyperdb.Link("status")) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
498 <hyperdb.Class "issue"> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
499 >>> db.issue.create(title="spam", status=1) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
500 1 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
501 >>> db.issue.create(title="eggs", status=2) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
502 2 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
503 >>> db.issue.create(title="ham", status=4) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
504 3 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
505 >>> db.issue.create(title="arguments", status=2) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
506 4 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
507 >>> db.issue.create(title="abuse", status=1) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
508 5 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
509 >>> hyperdb.Class(db, "user", username=hyperdb.Key(), password=hyperdb.String()) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
510 <hyperdb.Class "user"> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
511 >>> db.issue.addprop(fixer=hyperdb.Link("user")) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
512 >>> db.issue.getprops() |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
513 {"title": <hyperdb.String>, "status": <hyperdb.Link to "status">, |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
514 "user": <hyperdb.Link to "user">} |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
515 >>> db.issue.set(5, status=2) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
516 >>> db.issue.get(5, "status") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
517 2 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
518 >>> db.status.get(2, "name") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
519 "in-progress" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
520 >>> db.issue.get(5, "title") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
521 "abuse" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
522 >>> db.issue.find("status", db.status.lookup("in-progress")) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
523 [2, 4, 5] |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
524 >>> db.issue.history(5) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
525 [(<Date 2000-06-28.19:09:43>, "ping", "create", {"title": "abuse", "status": 1}), |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
526 (<Date 2000-06-28.19:11:04>, "ping", "set", {"status": 2})] |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
527 >>> db.status.history(1) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
528 [(<Date 2000-06-28.19:09:43>, "ping", "link", ("issue", 5, "status")), |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
529 (<Date 2000-06-28.19:11:04>, "ping", "unlink", ("issue", 5, "status"))] |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
530 >>> db.status.history(2) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
531 [(<Date 2000-06-28.19:11:04>, "ping", "link", ("issue", 5, "status"))] |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
532 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
533 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
534 For the purposes of journalling, when a Multilink property is |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
535 set to a new list of nodes, the hyperdatabase compares the old |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
536 list to the new list. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
537 The journal records "unlink" events for all the nodes that appear |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
538 in the old list but not the new list, |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
539 and "link" events for |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
540 all the nodes that appear in the new list but not in the old list. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
541 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
542 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
543 Roundup Database |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
544 ---------------- |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
545 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
546 The Roundup database layer is implemented on top of the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
547 hyperdatabase and mediates calls to the database. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
548 Some of the classes in the Roundup database are considered |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
549 issue classes. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
550 The Roundup database layer adds detectors and user nodes, |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
551 and on issues it provides mail spools, nosy lists, and superseders. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
552 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
553 TODO: where functionality is implemented. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
554 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
555 Reserved Classes |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
556 ~~~~~~~~~~~~~~~~ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
557 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
558 Internal to this layer we reserve three special classes |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
559 of nodes that are not issues. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
560 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
561 Users |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
562 """""""""""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
563 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
564 Users are stored in the hyperdatabase as nodes of |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
565 class "user". The "user" class has the definition:: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
566 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
567 hyperdb.Class(db, "user", username=hyperdb.String(), |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
568 password=hyperdb.String(), |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
569 address=hyperdb.String()) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
570 db.user.setkey("username") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
571 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
572 Messages |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
573 """"""""""""""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
574 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
575 E-mail messages are represented by hyperdatabase nodes of class "msg". |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
576 The actual text content of the messages is stored in separate files. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
577 (There's no advantage to be gained by stuffing them into the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
578 hyperdatabase, and if messages are stored in ordinary text files, |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
579 they can be grepped from the command line.) The text of a message is |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
580 saved in a file named after the message node designator (e.g. "msg23") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
581 for the sake of the command interface (see below). Attachments are |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
582 stored separately and associated with "file" nodes. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
583 The "msg" class has the definition:: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
584 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
585 hyperdb.Class(db, "msg", author=hyperdb.Link("user"), |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
586 recipients=hyperdb.Multilink("user"), |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
587 date=hyperdb.Date(), |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
588 summary=hyperdb.String(), |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
589 files=hyperdb.Multilink("file")) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
590 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
591 The "author" property indicates the author of the message |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
592 (a "user" node must exist in the hyperdatabase for any messages |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
593 that are stored in the system). |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
594 The "summary" property contains a summary of the message for display |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
595 in a message index. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
596 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
597 Files |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
598 """""""""""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
599 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
600 Submitted files are represented by hyperdatabase |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
601 nodes of class "file". Like e-mail messages, the file content |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
602 is stored in files outside the database, |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
603 named after the file node designator (e.g. "file17"). |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
604 The "file" class has the definition:: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
605 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
606 hyperdb.Class(db, "file", user=hyperdb.Link("user"), |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
607 name=hyperdb.String(), |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
608 type=hyperdb.String()) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
609 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
610 The "user" property indicates the user who submitted the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
611 file, the "name" property holds the original name of the file, |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
612 and the "type" property holds the MIME type of the file as received. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
613 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
614 Issue Classes |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
615 ~~~~~~~~~~~~~ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
616 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
617 All issues have the following standard properties: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
618 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
619 =========== ========================== |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
620 Property Definition |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
621 =========== ========================== |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
622 title hyperdb.String() |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
623 messages hyperdb.Multilink("msg") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
624 files hyperdb.Multilink("file") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
625 nosy hyperdb.Multilink("user") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
626 superseder hyperdb.Multilink("issue") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
627 =========== ========================== |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
628 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
629 Also, two Date properties named "creation" and "activity" are |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
630 fabricated by the Roundup database layer. By "fabricated" we |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
631 mean that no such properties are actually stored in the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
632 hyperdatabase, but when properties on issues are requested, the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
633 "creation" and "activity" properties are made available. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
634 The value of the "creation" property is the date when an issue was |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
635 created, and the value of the "activity" property is the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
636 date when any property on the issue was last edited (equivalently, |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
637 these are the dates on the first and last records in the issue's journal). |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
638 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
639 Roundupdb Interface Specification |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
640 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
641 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
642 The interface to a Roundup database delegates most method |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
643 calls to the hyperdatabase, except for the following |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
644 changes and additional methods:: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
645 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
646 class Database: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
647 def getuid(self): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
648 """Return the id of the "user" node associated with the user |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
649 that owns this connection to the hyperdatabase.""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
650 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
651 class Class: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
652 # Overridden methods: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
653 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
654 def create(self, **propvalues): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
655 def set(self, **propvalues): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
656 def retire(self, nodeid): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
657 """These operations trigger detectors and can be vetoed. Attempts |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
658 to modify the "creation" or "activity" properties cause a KeyError. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
659 """ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
660 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
661 # New methods: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
662 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
663 def audit(self, event, detector): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
664 def react(self, event, detector): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
665 """Register a detector (see below for more details).""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
666 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
667 class IssueClass(Class): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
668 # Overridden methods: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
669 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
670 def __init__(self, db, classname, **properties): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
671 """The newly-created class automatically includes the "messages", |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
672 "files", "nosy", and "superseder" properties. If the 'properties' |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
673 dictionary attempts to specify any of these properties or a |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
674 "creation" or "activity" property, a ValueError is raised.""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
675 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
676 def get(self, nodeid, propname): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
677 def getprops(self): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
678 """In addition to the actual properties on the node, these |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
679 methods provide the "creation" and "activity" properties.""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
680 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
681 # New methods: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
682 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
683 def addmessage(self, nodeid, summary, text): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
684 """Add a message to an issue's mail spool. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
685 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
686 A new "msg" node is constructed using the current date, the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
687 user that owns the database connection as the author, and |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
688 the specified summary text. The "files" and "recipients" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
689 fields are left empty. The given text is saved as the body |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
690 of the message and the node is appended to the "messages" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
691 field of the specified issue. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
692 """ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
693 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
694 def sendmessage(self, nodeid, msgid): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
695 """Send a message to the members of an issue's nosy list. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
696 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
697 The message is sent only to users on the nosy list who are not |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
698 already on the "recipients" list for the message. These users |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
699 are then added to the message's "recipients" list. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
700 """ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
701 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
702 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
703 Default Schema |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
704 ~~~~~~~~~~~~~~ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
705 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
706 The default schema included with Roundup turns it into a |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
707 typical software bug tracker. The database is set up like this:: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
708 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
709 pri = Class(db, "priority", name=hyperdb.String(), order=hyperdb.String()) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
710 pri.setkey("name") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
711 pri.create(name="critical", order="1") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
712 pri.create(name="urgent", order="2") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
713 pri.create(name="bug", order="3") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
714 pri.create(name="feature", order="4") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
715 pri.create(name="wish", order="5") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
716 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
717 stat = Class(db, "status", name=hyperdb.String(), order=hyperdb.String()) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
718 stat.setkey("name") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
719 stat.create(name="unread", order="1") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
720 stat.create(name="deferred", order="2") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
721 stat.create(name="chatting", order="3") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
722 stat.create(name="need-eg", order="4") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
723 stat.create(name="in-progress", order="5") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
724 stat.create(name="testing", order="6") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
725 stat.create(name="done-cbb", order="7") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
726 stat.create(name="resolved", order="8") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
727 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
728 Class(db, "keyword", name=hyperdb.String()) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
729 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
730 Class(db, "issue", fixer=hyperdb.Multilink("user"), |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
731 topic=hyperdb.Multilink("keyword"), |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
732 priority=hyperdb.Link("priority"), |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
733 status=hyperdb.Link("status")) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
734 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
735 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
736 (The "order" property hasn't been explained yet. It |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
737 gets used by the Web user interface for sorting.) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
738 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
739 The above isn't as pretty-looking as the schema specification |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
740 in the first-stage submission, but it could be made just as easy |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
741 with the addition of a convenience function like Choice |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
742 for setting up the "priority" and "status" classes:: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
743 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
744 def Choice(name, *options): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
745 cl = Class(db, name, name=hyperdb.String(), order=hyperdb.String()) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
746 for i in range(len(options)): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
747 cl.create(name=option[i], order=i) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
748 return hyperdb.Link(name) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
749 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
750 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
751 Detector Interface |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
752 ------------------ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
753 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
754 Detectors are Python functions that are triggered on certain |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
755 kinds of events. The definitions of the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
756 functions live in Python modules placed in a directory set aside |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
757 for this purpose. Importing the Roundup database module also |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
758 imports all the modules in this directory, and the ``init()`` |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
759 function of each module is called when a database is opened to |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
760 provide it a chance to register its detectors. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
761 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
762 There are two kinds of detectors: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
763 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
764 1. an auditor is triggered just before modifying an node |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
765 2. a reactor is triggered just after an node has been modified |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
766 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
767 When the Roundup database is about to perform a |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
768 ``create()``, ``set()``, or ``retire()`` |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
769 operation, it first calls any *auditors* that |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
770 have been registered for that operation on that class. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
771 Any auditor may raise a *Reject* exception |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
772 to abort the operation. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
773 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
774 If none of the auditors raises an exception, the database |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
775 proceeds to carry out the operation. After it's done, it |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
776 then calls all of the *reactors* that have been registered |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
777 for the operation. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
778 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
779 Detector Interface Specification |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
780 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
781 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
782 The ``audit()`` and ``react()`` methods |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
783 register detectors on a given class of nodes:: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
784 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
785 class Class: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
786 def audit(self, event, detector): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
787 """Register an auditor on this class. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
788 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
789 'event' should be one of "create", "set", or "retire". |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
790 'detector' should be a function accepting four arguments. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
791 """ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
792 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
793 def react(self, event, detector): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
794 """Register a reactor on this class. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
795 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
796 'event' should be one of "create", "set", or "retire". |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
797 'detector' should be a function accepting four arguments. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
798 """ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
799 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
800 Auditors are called with the arguments:: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
801 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
802 audit(db, cl, nodeid, newdata) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
803 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
804 where ``db`` is the database, ``cl`` is an |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
805 instance of Class or IssueClass within the database, and ``newdata`` |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
806 is a dictionary mapping property names to values. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
807 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
808 For a ``create()`` |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
809 operation, the ``nodeid`` argument is None and newdata |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
810 contains all of the initial property values with which the node |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
811 is about to be created. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
812 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
813 For a ``set()`` operation, newdata |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
814 contains only the names and values of properties that are about |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
815 to be changed. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
816 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
817 For a ``retire()`` operation, newdata is None. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
818 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
819 Reactors are called with the arguments:: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
820 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
821 react(db, cl, nodeid, olddata) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
822 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
823 where ``db`` is the database, ``cl`` is an |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
824 instance of Class or IssueClass within the database, and ``olddata`` |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
825 is a dictionary mapping property names to values. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
826 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
827 For a ``create()`` |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
828 operation, the ``nodeid`` argument is the id of the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
829 newly-created node and ``olddata`` is None. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
830 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
831 For a ``set()`` operation, ``olddata`` |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
832 contains the names and previous values of properties that were changed. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
833 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
834 For a ``retire()`` operation, ``nodeid`` is the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
835 id of the retired node and ``olddata`` is None. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
836 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
837 Detector Example |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
838 ~~~~~~~~~~~~~~~~ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
839 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
840 Here is an example of detectors written for a hypothetical |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
841 project-management application, where users can signal approval |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
842 of a project by adding themselves to an "approvals" list, and |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
843 a project proceeds when it has three approvals:: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
844 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
845 # Permit users only to add themselves to the "approvals" list. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
846 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
847 def check_approvals(db, cl, id, newdata): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
848 if newdata.has_key("approvals"): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
849 if cl.get(id, "status") == db.status.lookup("approved"): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
850 raise Reject, "You can't modify the approvals list " \ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
851 "for a project that has already been approved." |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
852 old = cl.get(id, "approvals") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
853 new = newdata["approvals"] |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
854 for uid in old: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
855 if uid not in new and uid != db.getuid(): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
856 raise Reject, "You can't remove other users from the " |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
857 "approvals list; you can only remove yourself." |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
858 for uid in new: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
859 if uid not in old and uid != db.getuid(): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
860 raise Reject, "You can't add other users to the approvals " |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
861 "list; you can only add yourself." |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
862 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
863 # When three people have approved a project, change its |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
864 # status from "pending" to "approved". |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
865 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
866 def approve_project(db, cl, id, olddata): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
867 if olddata.has_key("approvals") and len(cl.get(id, "approvals")) == 3: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
868 if cl.get(id, "status") == db.status.lookup("pending"): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
869 cl.set(id, status=db.status.lookup("approved")) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
870 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
871 def init(db): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
872 db.project.audit("set", check_approval) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
873 db.project.react("set", approve_project) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
874 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
875 Here is another example of a detector that can allow or prevent |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
876 the creation of new nodes. In this scenario, patches for a software |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
877 project are submitted by sending in e-mail with an attached file, |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
878 and we want to ensure that there are text/plain attachments on |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
879 the message. The maintainer of the package can then apply the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
880 patch by setting its status to "applied":: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
881 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
882 # Only accept attempts to create new patches that come with patch files. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
883 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
884 def check_new_patch(db, cl, id, newdata): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
885 if not newdata["files"]: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
886 raise Reject, "You can't submit a new patch without " \ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
887 "attaching a patch file." |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
888 for fileid in newdata["files"]: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
889 if db.file.get(fileid, "type") != "text/plain": |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
890 raise Reject, "Submitted patch files must be text/plain." |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
891 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
892 # When the status is changed from "approved" to "applied", apply the patch. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
893 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
894 def apply_patch(db, cl, id, olddata): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
895 if cl.get(id, "status") == db.status.lookup("applied") and \ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
896 olddata["status"] == db.status.lookup("approved"): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
897 # ...apply the patch... |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
898 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
899 def init(db): |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
900 db.patch.audit("create", check_new_patch) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
901 db.patch.react("set", apply_patch) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
902 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
903 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
904 Command Interface |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
905 ----------------- |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
906 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
907 The command interface is a very simple and minimal interface, |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
908 intended only for quick searches and checks from the shell prompt. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
909 (Anything more interesting can simply be written in Python using |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
910 the Roundup database module.) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
911 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
912 Command Interface Specification |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
913 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
914 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
915 A single command, roundup, provides basic access to |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
916 the hyperdatabase from the command line:: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
917 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
918 roundup get [-list] designator[, designator,...] propname |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
919 roundup set designator[, designator,...] propname=value ... |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
920 roundup find [-list] classname propname=value ... |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
921 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
922 TODO: more stuff here |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
923 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
924 Property values are represented as strings in command arguments |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
925 and in the printed results: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
926 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
927 - Strings are, well, strings. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
928 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
929 - Numbers are displayed the same as strings. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
930 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
931 - Booleans are displayed as 'Yes' or 'No'. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
932 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
933 - Date values are printed in the full date format in the local |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
934 time zone, and accepted in the full format or any of the partial |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
935 formats explained above. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
936 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
937 - Link values are printed as node designators. When given as |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
938 an argument, node designators and key strings are both accepted. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
939 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
940 - Multilink values are printed as lists of node designators |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
941 joined by commas. When given as an argument, node designators |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
942 and key strings are both accepted; an empty string, a single node, |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
943 or a list of nodes joined by commas is accepted. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
944 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
945 When multiple nodes are specified to the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
946 roundup get or roundup set |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
947 commands, the specified properties are retrieved or set |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
948 on all the listed nodes. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
949 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
950 When multiple results are returned by the roundup get |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
951 or roundup find commands, they are printed one per |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
952 line (default) or joined by commas (with the -list) option. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
953 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
954 Usage Example |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
955 ~~~~~~~~~~~~~ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
956 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
957 To find all messages regarding in-progress issues that |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
958 contain the word "spam", for example, you could execute the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
959 following command from the directory where the database |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
960 dumps its files:: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
961 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
962 shell% for issue in `roundup find issue status=in-progress`; do |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
963 > grep -l spam `roundup get $issue messages` |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
964 > done |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
965 msg23 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
966 msg49 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
967 msg50 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
968 msg61 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
969 shell% |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
970 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
971 Or, using the -list option, this can be written as a single command:: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
972 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
973 shell% grep -l spam `roundup get \ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
974 \`roundup find -list issue status=in-progress\` messages` |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
975 msg23 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
976 msg49 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
977 msg50 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
978 msg61 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
979 shell% |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
980 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
981 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
982 E-mail User Interface |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
983 --------------------- |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
984 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
985 The Roundup system must be assigned an e-mail address |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
986 at which to receive mail. Messages should be piped to |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
987 the Roundup mail-handling script by the mail delivery |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
988 system (e.g. using an alias beginning with "|" for sendmail). |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
989 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
990 Message Processing |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
991 ~~~~~~~~~~~~~~~~~~ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
992 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
993 Incoming messages are examined for multiple parts. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
994 In a multipart/mixed message or part, each subpart is |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
995 extracted and examined. In a multipart/alternative |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
996 message or part, we look for a text/plain subpart and |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
997 ignore the other parts. The text/plain subparts are |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
998 assembled to form the textual body of the message, to |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
999 be stored in the file associated with a "msg" class node. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1000 Any parts of other types are each stored in separate |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1001 files and given "file" class nodes that are linked to |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1002 the "msg" node. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1003 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1004 The "summary" property on message nodes is taken from |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1005 the first non-quoting section in the message body. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1006 The message body is divided into sections by blank lines. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1007 Sections where the second and all subsequent lines begin |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1008 with a ">" or "|" character are considered "quoting |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1009 sections". The first line of the first non-quoting |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1010 section becomes the summary of the message. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1011 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1012 All of the addresses in the To: and Cc: headers of the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1013 incoming message are looked up among the user nodes, and |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1014 the corresponding users are placed in the "recipients" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1015 property on the new "msg" node. The address in the From: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1016 header similarly determines the "author" property of the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1017 new "msg" node. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1018 The default handling for |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1019 addresses that don't have corresponding users is to create |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1020 new users with no passwords and a username equal to the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1021 address. (The web interface does not permit logins for |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1022 users with no passwords.) If we prefer to reject mail from |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1023 outside sources, we can simply register an auditor on the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1024 "user" class that prevents the creation of user nodes with |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1025 no passwords. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1026 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1027 The subject line of the incoming message is examined to |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1028 determine whether the message is an attempt to create a new |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1029 issue or to discuss an existing issue. A designator enclosed |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1030 in square brackets is sought as the first thing on the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1031 subject line (after skipping any "Fwd:" or "Re:" prefixes). |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1032 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1033 If an issue designator (class name and id number) is found |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1034 there, the newly created "msg" node is added to the "messages" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1035 property for that issue, and any new "file" nodes are added to |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1036 the "files" property for the issue. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1037 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1038 If just an issue class name is found there, we attempt to |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1039 create a new issue of that class with its "messages" property |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1040 initialized to contain the new "msg" node and its "files" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1041 property initialized to contain any new "file" nodes. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1042 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1043 Both cases may trigger detectors (in the first case we |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1044 are calling the set() method to add the message to the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1045 issue's spool; in the second case we are calling the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1046 create() method to create a new node). If an auditor |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1047 raises an exception, the original message is bounced back to |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1048 the sender with the explanatory message given in the exception. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1049 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1050 Nosy Lists |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1051 ~~~~~~~~~~ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1052 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1053 A standard detector is provided that watches for additions |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1054 to the "messages" property. When a new message is added, the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1055 detector sends it to all the users on the "nosy" list for the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1056 issue that are not already on the "recipients" list of the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1057 message. Those users are then appended to the "recipients" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1058 property on the message, so multiple copies of a message |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1059 are never sent to the same user. The journal recorded by |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1060 the hyperdatabase on the "recipients" property then provides |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1061 a log of when the message was sent to whom. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1062 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1063 Setting Properties |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1064 ~~~~~~~~~~~~~~~~~~ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1065 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1066 The e-mail interface also provides a simple way to set |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1067 properties on issues. At the end of the subject line, |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1068 ``propname=value`` pairs can be |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1069 specified in square brackets, using the same conventions |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1070 as for the roundup ``set`` shell command. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1071 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1072 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1073 Web User Interface |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1074 ------------------ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1075 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1076 The web interface is provided by a CGI script that can be |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1077 run under any web server. A simple web server can easily be |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1078 built on the standard CGIHTTPServer module, and |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1079 should also be included in the distribution for quick |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1080 out-of-the-box deployment. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1081 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1082 The user interface is constructed from a number of template |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1083 files containing mostly HTML. Among the HTML tags in templates |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1084 are interspersed some nonstandard tags, which we use as |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1085 placeholders to be replaced by properties and their values. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1086 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1087 Views and View Specifiers |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1088 ~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1089 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1090 There are two main kinds of views: *index* views and *issue* views. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1091 An index view displays a list of issues of a particular class, |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1092 optionally sorted and filtered as requested. An issue view |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1093 presents the properties of a particular issue for editing |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1094 and displays the message spool for the issue. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1095 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1096 A view specifier is a string that specifies |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1097 all the options needed to construct a particular view. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1098 It goes after the URL to the Roundup CGI script or the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1099 web server to form the complete URL to a view. When the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1100 result of selecting a link or submitting a form takes |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1101 the user to a new view, the Web browser should be redirected |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1102 to a canonical location containing a complete view specifier |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1103 so that the view can be bookmarked. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1104 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1105 Displaying Properties |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1106 ~~~~~~~~~~~~~~~~~~~~~ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1107 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1108 Properties appear in the user interface in three contexts: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1109 in indices, in editors, and as filters. For each type of |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1110 property, there are several display possibilities. For example, |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1111 in an index view, a string property may just be printed as |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1112 a plain string, but in an editor view, that property should |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1113 be displayed in an editable field. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1114 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1115 The display of a property is handled by functions in |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1116 a displayers module. Each function accepts at |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1117 least three standard arguments -- the database, class name, |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1118 and node id -- and returns a chunk of HTML. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1119 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1120 Displayer functions are triggered by <display> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1121 tags in templates. The call attribute of the tag |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1122 provides a Python expression for calling the displayer |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1123 function. The three standard arguments are inserted in |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1124 front of the arguments given. For example, the occurrence of:: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1125 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1126 <display call="plain('status', max=30)"> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1127 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1128 in a template triggers a call to:: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1129 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1130 plain(db, "issue", 13, "status", max=30) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1131 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1132 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1133 when displaying issue 13 in the "issue" class. The displayer |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1134 functions can accept extra arguments to further specify |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1135 details about the widgets that should be generated. By defining new |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1136 displayer functions, the user interface can be highly customized. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1137 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1138 Some of the standard displayer functions include: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1139 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1140 ========= ==================================================================== |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1141 Function Description |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1142 ========= ==================================================================== |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1143 plain display a String property directly; |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1144 display a Date property in a specified time zone with an option |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1145 to omit the time from the date stamp; for a Link or Multilink |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1146 property, display the key strings of the linked nodes (or the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1147 ids if the linked class has no key property) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1148 field display a property like the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1149 plain displayer above, but in a text field |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1150 to be edited |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1151 menu for a Link property, display |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1152 a menu of the available choices |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1153 link for a Link or Multilink property, |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1154 display the names of the linked nodes, hyperlinked to the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1155 issue views on those nodes |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1156 count for a Multilink property, display |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1157 a count of the number of links in the list |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1158 reldate display a Date property in terms |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1159 of an interval relative to the current date (e.g. "+ 3w", "- 2d"). |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1160 download show a Link("file") or Multilink("file") |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1161 property using links that allow you to download files |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1162 checklist for a Link or Multilink property, |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1163 display checkboxes for the available choices to permit filtering |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1164 ========= ==================================================================== |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1165 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1166 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1167 Index Views |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1168 ~~~~~~~~~~~ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1169 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1170 An index view contains two sections: a filter section |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1171 and an index section. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1172 The filter section provides some widgets for selecting |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1173 which issues appear in the index. The index section is |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1174 a table of issues. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1175 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1176 Index View Specifiers |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1177 """"""""""""""""""""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1178 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1179 An index view specifier looks like this (whitespace |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1180 has been added for clarity):: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1181 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1182 /issue?status=unread,in-progress,resolved& |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1183 topic=security,ui& |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1184 :group=+priority& |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1185 :sort=-activity& |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1186 :filters=status,topic& |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1187 :columns=title,status,fixer |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1188 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1189 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1190 The index view is determined by two parts of the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1191 specifier: the layout part and the filter part. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1192 The layout part consists of the query parameters that |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1193 begin with colons, and it determines the way that the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1194 properties of selected nodes are displayed. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1195 The filter part consists of all the other query parameters, |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1196 and it determines the criteria by which nodes |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1197 are selected for display. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1198 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1199 The filter part is interactively manipulated with |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1200 the form widgets displayed in the filter section. The |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1201 layout part is interactively manipulated by clicking |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1202 on the column headings in the table. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1203 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1204 The filter part selects the union of the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1205 sets of issues with values matching any specified Link |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1206 properties and the intersection of the sets |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1207 of issues with values matching any specified Multilink |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1208 properties. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1209 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1210 The example specifies an index of "issue" nodes. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1211 Only issues with a "status" of either |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1212 "unread" or "in-progres" or "resolved" are displayed, |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1213 and only issues with "topic" values including both |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1214 "security" and "ui" are displayed. The issues |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1215 are grouped by priority, arranged in ascending order; |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1216 and within groups, sorted by activity, arranged in |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1217 descending order. The filter section shows filters |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1218 for the "status" and "topic" properties, and the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1219 table includes columns for the "title", "status", and |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1220 "fixer" properties. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1221 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1222 Associated with each issue class is a default |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1223 layout specifier. The layout specifier in the above |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1224 example is the default layout to be provided with |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1225 the default bug-tracker schema described above in |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1226 section 4.4. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1227 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1228 Filter Section |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1229 """""""""""""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1230 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1231 The template for a filter section provides the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1232 filtering widgets at the top of the index view. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1233 Fragments enclosed in ``<property>...</property>`` |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1234 tags are included or omitted depending on whether the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1235 view specifier requests a filter for a particular property. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1236 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1237 Here's a simple example of a filter template:: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1238 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1239 <property name=status> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1240 <display call="checklist('status')"> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1241 </property> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1242 <br> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1243 <property name=priority> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1244 <display call="checklist('priority')"> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1245 </property> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1246 <br> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1247 <property name=fixer> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1248 <display call="menu('fixer')"> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1249 </property> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1250 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1251 Index Section |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1252 """"""""""""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1253 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1254 The template for an index section describes one row of |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1255 the index table. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1256 Fragments enclosed in ``<property>...</property>`` |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1257 tags are included or omitted depending on whether the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1258 view specifier requests a column for a particular property. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1259 The table cells should contain <display> tags |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1260 to display the values of the issue's properties. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1261 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1262 Here's a simple example of an index template:: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1263 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1264 <tr> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1265 <property name=title> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1266 <td><display call="plain('title', max=50)"></td> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1267 </property> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1268 <property name=status> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1269 <td><display call="plain('status')"></td> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1270 </property> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1271 <property name=fixer> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1272 <td><display call="plain('fixer')"></td> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1273 </property> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1274 </tr> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1275 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1276 Sorting |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1277 """""""""""""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1278 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1279 String and Date values are sorted in the natural way. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1280 Link properties are sorted according to the value of the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1281 "order" property on the linked nodes if it is present; or |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1282 otherwise on the key string of the linked nodes; or |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1283 finally on the node ids. Multilink properties are |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1284 sorted according to how many links are present. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1285 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1286 Issue Views |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1287 ~~~~~~~~~~~ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1288 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1289 An issue view contains an editor section and a spool section. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1290 At the top of an issue view, links to superseding and superseded |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1291 issues are always displayed. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1292 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1293 Issue View Specifiers |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1294 """"""""""""""""""""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1295 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1296 An issue view specifier is simply the issue's designator:: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1297 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1298 /patch23 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1299 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1300 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1301 Editor Section |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1302 """""""""""""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1303 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1304 The editor section is generated from a template |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1305 containing <display> tags to insert |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1306 the appropriate widgets for editing properties. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1307 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1308 Here's an example of a basic editor template:: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1309 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1310 <table> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1311 <tr> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1312 <td colspan=2> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1313 <display call="field('title', size=60)"> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1314 </td> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1315 </tr> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1316 <tr> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1317 <td> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1318 <display call="field('fixer', size=30)"> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1319 </td> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1320 <td> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1321 <display call="menu('status')> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1322 </td> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1323 </tr> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1324 <tr> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1325 <td> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1326 <display call="field('nosy', size=30)"> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1327 </td> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1328 <td> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1329 <display call="menu('priority')> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1330 </td> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1331 </tr> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1332 <tr> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1333 <td colspan=2> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1334 <display call="note()"> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1335 </td> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1336 </tr> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1337 </table> |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1338 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1339 As shown in the example, the editor template can also |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1340 request the display of a "note" field, which is a |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1341 text area for entering a note to go along with a change. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1342 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1343 When a change is submitted, the system automatically |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1344 generates a message describing the changed properties. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1345 The message displays all of the property values on the |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1346 issue and indicates which ones have changed. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1347 An example of such a message might be this:: |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1348 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1349 title: Polly Parrot is dead |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1350 priority: critical |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1351 status: unread -> in-progress |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1352 fixer: (none) |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1353 keywords: parrot,plumage,perch,nailed,dead |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1354 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1355 If a note is given in the "note" field, the note is |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1356 appended to the description. The message is then added |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1357 to the issue's message spool (thus triggering the standard |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1358 detector to react by sending out this message to the nosy list). |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1359 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1360 Spool Section |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1361 """"""""""""" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1362 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1363 The spool section lists messages in the issue's "messages" |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1364 property. The index of messages displays the "date", "author", |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1365 and "summary" properties on the message nodes, and selecting a |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1366 message takes you to its content. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1367 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1368 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1369 Deployment Scenarios |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1370 -------------------- |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1371 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1372 The design described above should be general enough |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1373 to permit the use of Roundup for bug tracking, managing |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1374 projects, managing patches, or holding discussions. By |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1375 using nodes of multiple types, one could deploy a system |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1376 that maintains requirement specifications, catalogs bugs, |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1377 and manages submitted patches, where patches could be |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1378 linked to the bugs and requirements they address. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1379 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1380 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1381 Acknowledgements |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1382 ---------------- |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1383 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1384 My thanks are due to Christy Heyl for |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1385 reviewing and contributing suggestions to this paper |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1386 and motivating me to get it done, and to |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1387 Jesse Vincent, Mark Miller, Christopher Simons, |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1388 Jeff Dunmall, Wayne Gramlich, and Dean Tribble for |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1389 their assistance with the first-round submission. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1390 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1391 Changes to this document |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1392 ------------------------ |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1393 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1394 - Added Boolean and Number types |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1395 - Added section Hyperdatabase Implementations |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1396 - "Item" has been renamed to "Issue" to account for the more specific nature |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1397 of the Class. |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1398 |
|
38a74d1351c5
documentation updates
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1399 |
