annotate roundup/cgi_client.py @ 186:61355a9483f4

Web edit messages aren't sent to the person who did the edit any more. No message is generated if they are the only person on the nosy list.
author Richard Jones <richard@users.sourceforge.net>
date Thu, 02 Aug 2001 05:55:25 +0000
parents 817750ead8d5
children 1536be43d2fa
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
186
61355a9483f4 Web edit messages aren't sent to the person who did the edit any more.
Richard Jones <richard@users.sourceforge.net>
parents: 181
diff changeset
1 # $Id: cgi_client.py,v 1.16 2001-08-02 05:55:25 richard Exp $
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2
167
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
3 import os, cgi, pprint, StringIO, urlparse, re, traceback, mimetypes
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
4
31
6eebdf2bf262 oops, missed a config removal
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
5 import roundupdb, htmltemplate, date
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
6
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
7 class Unauthorised(ValueError):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
8 pass
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
9
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
10 class Client:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
11 def __init__(self, out, db, env, user):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
12 self.out = out
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
13 self.db = db
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
14 self.env = env
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
15 self.user = user
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
16 self.path = env['PATH_INFO']
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
17 self.split_path = self.path.split('/')
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
18
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
19 self.headers_done = 0
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
20 self.form = cgi.FieldStorage(environ=env)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
21 self.headers_done = 0
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
22 self.debug = 0
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
23
186
61355a9483f4 Web edit messages aren't sent to the person who did the edit any more.
Richard Jones <richard@users.sourceforge.net>
parents: 181
diff changeset
24 def getuid(self):
61355a9483f4 Web edit messages aren't sent to the person who did the edit any more.
Richard Jones <richard@users.sourceforge.net>
parents: 181
diff changeset
25 return self.db.user.lookup(self.user)
61355a9483f4 Web edit messages aren't sent to the person who did the edit any more.
Richard Jones <richard@users.sourceforge.net>
parents: 181
diff changeset
26
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
27 def header(self, headers={'Content-Type':'text/html'}):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
28 if not headers.has_key('Content-Type'):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
29 headers['Content-Type'] = 'text/html'
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
30 for entry in headers.items():
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
31 self.out.write('%s: %s\n'%entry)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
32 self.out.write('\n')
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
33 self.headers_done = 1
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
34
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
35 def pagehead(self, title, message=None):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
36 url = self.env['SCRIPT_NAME'] + '/' #self.env.get('PATH_INFO', '/')
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
37 machine = self.env['SERVER_NAME']
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
38 port = self.env['SERVER_PORT']
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
39 if port != '80': machine = machine + ':' + port
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
40 base = urlparse.urlunparse(('http', machine, url, None, None, None))
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
41 if message is not None:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
42 message = '<div class="system-msg">%s</div>'%message
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
43 else:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
44 message = ''
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
45 style = open(os.path.join(self.TEMPLATES, 'style.css')).read()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
46 userid = self.db.user.lookup(self.user)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
47 self.write('''<html><head>
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
48 <title>%s</title>
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
49 <style type="text/css">%s</style>
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
50 </head>
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
51 <body bgcolor=#ffffff>
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
52 %s
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
53 <table width=100%% border=0 cellspacing=0 cellpadding=2>
142
664faa54d672 Default implementation is now "classic"...
Richard Jones <richard@users.sourceforge.net>
parents: 128
diff changeset
54 <tr class="location-bar"><td><big><strong>%s</strong></big>
664faa54d672 Default implementation is now "classic"...
Richard Jones <richard@users.sourceforge.net>
parents: 128
diff changeset
55 (login: <a href="user%s">%s</a>)</td></tr>
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
56 </table>
142
664faa54d672 Default implementation is now "classic"...
Richard Jones <richard@users.sourceforge.net>
parents: 128
diff changeset
57 '''%(title, style, message, title, userid, self.user))
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
58
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
59 def pagefoot(self):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
60 if self.debug:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
61 self.write('<hr><small><dl>')
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
62 self.write('<dt><b>Path</b></dt>')
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
63 self.write('<dd>%s</dd>'%(', '.join(map(repr, self.split_path))))
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
64 keys = self.form.keys()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
65 keys.sort()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
66 if keys:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
67 self.write('<dt><b>Form entries</b></dt>')
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
68 for k in self.form.keys():
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
69 v = str(self.form[k].value)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
70 self.write('<dd><em>%s</em>:%s</dd>'%(k, cgi.escape(v)))
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
71 keys = self.env.keys()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
72 keys.sort()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
73 self.write('<dt><b>CGI environment</b></dt>')
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
74 for k in keys:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
75 v = self.env[k]
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
76 self.write('<dd><em>%s</em>:%s</dd>'%(k, cgi.escape(v)))
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
77 self.write('</dl></small>')
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
78 self.write('</body></html>')
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
79
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
80 def write(self, content):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
81 if not self.headers_done:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
82 self.header()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
83 self.out.write(content)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
84
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
85 def index_arg(self, arg):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
86 ''' handle the args to index - they might be a list from the form
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
87 (ie. submitted from a form) or they might be a command-separated
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
88 single string (ie. manually constructed GET args)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
89 '''
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
90 if self.form.has_key(arg):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
91 arg = self.form[arg]
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
92 if type(arg) == type([]):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
93 return [arg.value for arg in arg]
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
94 return arg.value.split(',')
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
95 return []
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
96
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
97 def index_filterspec(self):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
98 ''' pull the index filter spec from the form
128
ce36f2962b94 Fixed handling of passed-in values in form elements (ie. during a drill-down)
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
99
ce36f2962b94 Fixed handling of passed-in values in form elements (ie. during a drill-down)
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
100 Links and multilinks want to be lists - the rest are straight
ce36f2962b94 Fixed handling of passed-in values in form elements (ie. during a drill-down)
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
101 strings.
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
102 '''
128
ce36f2962b94 Fixed handling of passed-in values in form elements (ie. during a drill-down)
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
103 props = self.db.classes[self.classname].getprops()
ce36f2962b94 Fixed handling of passed-in values in form elements (ie. during a drill-down)
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
104 # all the form args not starting with ':' are filters
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
105 filterspec = {}
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
106 for key in self.form.keys():
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
107 if key[0] == ':': continue
128
ce36f2962b94 Fixed handling of passed-in values in form elements (ie. during a drill-down)
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
108 prop = props[key]
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
109 value = self.form[key]
128
ce36f2962b94 Fixed handling of passed-in values in form elements (ie. during a drill-down)
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
110 if prop.isLinkType or prop.isMultilinkType:
ce36f2962b94 Fixed handling of passed-in values in form elements (ie. during a drill-down)
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
111 if type(value) == type([]):
ce36f2962b94 Fixed handling of passed-in values in form elements (ie. during a drill-down)
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
112 value = [arg.value for arg in value]
ce36f2962b94 Fixed handling of passed-in values in form elements (ie. during a drill-down)
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
113 else:
ce36f2962b94 Fixed handling of passed-in values in form elements (ie. during a drill-down)
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
114 value = value.value.split(',')
ce36f2962b94 Fixed handling of passed-in values in form elements (ie. during a drill-down)
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
115 l = filterspec.get(key, [])
ce36f2962b94 Fixed handling of passed-in values in form elements (ie. during a drill-down)
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
116 l = l + value
ce36f2962b94 Fixed handling of passed-in values in form elements (ie. during a drill-down)
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
117 filterspec[key] = l
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
118 else:
128
ce36f2962b94 Fixed handling of passed-in values in form elements (ie. during a drill-down)
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
119 filterspec[key] = value.value
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
120 return filterspec
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
121
117
63de7e04c74d Moved some code around allowing for subclassing to change behaviour.
Richard Jones <richard@users.sourceforge.net>
parents: 115
diff changeset
122 default_index_sort = ['-activity']
63de7e04c74d Moved some code around allowing for subclassing to change behaviour.
Richard Jones <richard@users.sourceforge.net>
parents: 115
diff changeset
123 default_index_group = ['priority']
63de7e04c74d Moved some code around allowing for subclassing to change behaviour.
Richard Jones <richard@users.sourceforge.net>
parents: 115
diff changeset
124 default_index_filter = []
142
664faa54d672 Default implementation is now "classic"...
Richard Jones <richard@users.sourceforge.net>
parents: 128
diff changeset
125 default_index_columns = ['id','activity','title','status','assignedto']
117
63de7e04c74d Moved some code around allowing for subclassing to change behaviour.
Richard Jones <richard@users.sourceforge.net>
parents: 115
diff changeset
126 default_index_filterspec = {'status': ['1', '2', '3', '4', '5', '6', '7']}
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
127 def index(self):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
128 ''' put up an index
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
129 '''
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
130 self.classname = 'issue'
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
131 if self.form.has_key(':sort'): sort = self.index_arg(':sort')
117
63de7e04c74d Moved some code around allowing for subclassing to change behaviour.
Richard Jones <richard@users.sourceforge.net>
parents: 115
diff changeset
132 else: sort = self.default_index_sort
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
133 if self.form.has_key(':group'): group = self.index_arg(':group')
117
63de7e04c74d Moved some code around allowing for subclassing to change behaviour.
Richard Jones <richard@users.sourceforge.net>
parents: 115
diff changeset
134 else: group = self.default_index_group
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
135 if self.form.has_key(':filter'): filter = self.index_arg(':filter')
117
63de7e04c74d Moved some code around allowing for subclassing to change behaviour.
Richard Jones <richard@users.sourceforge.net>
parents: 115
diff changeset
136 else: filter = self.default_index_filter
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
137 if self.form.has_key(':columns'): columns = self.index_arg(':columns')
117
63de7e04c74d Moved some code around allowing for subclassing to change behaviour.
Richard Jones <richard@users.sourceforge.net>
parents: 115
diff changeset
138 else: columns = self.default_index_columns
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
139 filterspec = self.index_filterspec()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
140 if not filterspec:
117
63de7e04c74d Moved some code around allowing for subclassing to change behaviour.
Richard Jones <richard@users.sourceforge.net>
parents: 115
diff changeset
141 filterspec = self.default_index_filterspec
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
142 return self.list(columns=columns, filter=filter, group=group,
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
143 sort=sort, filterspec=filterspec)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
144
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
145 # XXX deviates from spec - loses the '+' (that's a reserved character
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
146 # in URLS
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
147 def list(self, sort=None, group=None, filter=None, columns=None,
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
148 filterspec=None):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
149 ''' call the template index with the args
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
150
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
151 :sort - sort by prop name, optionally preceeded with '-'
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
152 to give descending or nothing for ascending sorting.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
153 :group - group by prop name, optionally preceeded with '-' or
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
154 to sort in descending or nothing for ascending order.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
155 :filter - selects which props should be displayed in the filter
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
156 section. Default is all.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
157 :columns - selects the columns that should be displayed.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
158 Default is all.
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
159
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
160 '''
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
161 cn = self.classname
117
63de7e04c74d Moved some code around allowing for subclassing to change behaviour.
Richard Jones <richard@users.sourceforge.net>
parents: 115
diff changeset
162 self.pagehead('Index of %s'%cn)
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
163 if sort is None: sort = self.index_arg(':sort')
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
164 if group is None: group = self.index_arg(':group')
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
165 if filter is None: filter = self.index_arg(':filter')
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
166 if columns is None: columns = self.index_arg(':columns')
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
167 if filterspec is None: filterspec = self.index_filterspec()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
168
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
169 htmltemplate.index(self, self.TEMPLATES, self.db, cn, filterspec,
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
170 filter, columns, sort, group)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
171 self.pagefoot()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
172
163
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
173 def shownode(self, message=None):
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
174 ''' display an item
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
175 '''
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
176 cn = self.classname
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
177 cl = self.db.classes[cn]
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
178
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
179 # possibly perform an edit
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
180 keys = self.form.keys()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
181 num_re = re.compile('^\d+$')
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
182 if keys:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
183 changed = []
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
184 props = {}
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
185 try:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
186 keys = self.form.keys()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
187 for key in keys:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
188 if not cl.properties.has_key(key):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
189 continue
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
190 proptype = cl.properties[key]
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
191 if proptype.isStringType:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
192 value = str(self.form[key].value).strip()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
193 elif proptype.isDateType:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
194 value = date.Date(str(self.form[key].value))
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
195 elif proptype.isIntervalType:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
196 value = date.Interval(str(self.form[key].value))
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
197 elif proptype.isLinkType:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
198 value = str(self.form[key].value).strip()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
199 # handle key values
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
200 link = cl.properties[key].classname
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
201 if not num_re.match(value):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
202 try:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
203 value = self.db.classes[link].lookup(value)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
204 except:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
205 raise ValueError, 'property "%s": %s not a %s'%(
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
206 key, value, link)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
207 elif proptype.isMultilinkType:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
208 value = self.form[key]
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
209 if type(value) != type([]):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
210 value = [i.strip() for i in str(value.value).split(',')]
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
211 else:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
212 value = [str(i.value).strip() for i in value]
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
213 link = cl.properties[key].classname
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
214 l = []
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
215 for entry in map(str, value):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
216 if not num_re.match(entry):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
217 try:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
218 entry = self.db.classes[link].lookup(entry)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
219 except:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
220 raise ValueError, \
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
221 'property "%s": %s not a %s'%(key,
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
222 entry, link)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
223 l.append(entry)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
224 l.sort()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
225 value = l
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
226 # if changed, set it
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
227 if value != cl.get(self.nodeid, key):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
228 changed.append(key)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
229 props[key] = value
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
230 cl.set(self.nodeid, **props)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
231
167
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
232 self._post_editnode(self.nodeid)
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
233 # and some nice feedback for the user
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
234 message = '%s edited ok'%', '.join(changed)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
235 except:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
236 s = StringIO.StringIO()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
237 traceback.print_exc(None, s)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
238 message = '<pre>%s</pre>'%cgi.escape(s.getvalue())
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
239
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
240 # now the display
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
241 id = self.nodeid
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
242 if cl.getkey():
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
243 id = cl.get(id, cl.getkey())
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
244 self.pagehead('%s: %s'%(self.classname.capitalize(), id), message)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
245
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
246 nodeid = self.nodeid
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
247
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
248 # use the template to display the item
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
249 htmltemplate.item(self, self.TEMPLATES, self.db, self.classname, nodeid)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
250 self.pagefoot()
163
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
251 showissue = shownode
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
252 showmsg = shownode
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
253
167
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
254 def showuser(self, message=None):
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
255 ''' display an item
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
256 '''
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
257 if self.user in ('admin', self.db.user.get(self.nodeid, 'username')):
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
258 self.shownode(message)
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
259 else:
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
260 raise Unauthorised
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
261
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
262 def showfile(self):
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
263 ''' display a file
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
264 '''
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
265 nodeid = self.nodeid
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
266 cl = self.db.file
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
267 type = cl.get(nodeid, 'type')
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
268 if type == 'message/rfc822':
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
269 type = 'text/plain'
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
270 self.header(headers={'Content-Type': type})
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
271 self.write(cl.get(nodeid, 'content'))
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
272
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
273 def _createnode(self):
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
274 ''' create a node based on the contents of the form
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
275 '''
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
276 cn = self.classname
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
277 cl = self.db.classes[cn]
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
278 props = {}
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
279 keys = self.form.keys()
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
280 num_re = re.compile('^\d+$')
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
281 for key in keys:
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
282 if not cl.properties.has_key(key):
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
283 continue
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
284 proptype = cl.properties[key]
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
285 if proptype.isStringType:
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
286 value = self.form[key].value.strip()
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
287 elif proptype.isDateType:
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
288 value = date.Date(self.form[key].value.strip())
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
289 elif proptype.isIntervalType:
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
290 value = date.Interval(self.form[key].value.strip())
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
291 elif proptype.isLinkType:
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
292 value = self.form[key].value.strip()
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
293 # handle key values
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
294 link = cl.properties[key].classname
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
295 if not num_re.match(value):
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
296 try:
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
297 value = self.db.classes[link].lookup(value)
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
298 except:
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
299 raise ValueError, 'property "%s": %s not a %s'%(
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
300 key, value, link)
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
301 elif proptype.isMultilinkType:
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
302 value = self.form[key]
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
303 if type(value) != type([]):
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
304 value = [i.strip() for i in value.value.split(',')]
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
305 else:
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
306 value = [i.value.strip() for i in value]
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
307 link = cl.properties[key].classname
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
308 l = []
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
309 for entry in map(str, value):
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
310 if not num_re.match(entry):
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
311 try:
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
312 entry = self.db.classes[link].lookup(entry)
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
313 except:
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
314 raise ValueError, \
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
315 'property "%s": %s not a %s'%(key,
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
316 entry, link)
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
317 l.append(entry)
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
318 l.sort()
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
319 value = l
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
320 props[key] = value
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
321 return cl.create(**props)
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
322
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
323 def _post_editnode(self, nid):
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
324 ''' do the linking and message sending part of the node creation
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
325 '''
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
326 cn = self.classname
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
327 cl = self.db.classes[cn]
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
328 # link if necessary
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
329 keys = self.form.keys()
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
330 for key in keys:
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
331 if key == ':multilink':
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
332 value = self.form[key].value
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
333 if type(value) != type([]): value = [value]
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
334 for value in value:
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
335 designator, property = value.split(':')
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
336 link, nodeid = roundupdb.splitDesignator(designator)
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
337 link = self.db.classes[link]
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
338 value = link.get(nodeid, property)
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
339 value.append(nid)
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
340 link.set(nodeid, **{property: value})
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
341 elif key == ':link':
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
342 value = self.form[key].value
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
343 if type(value) != type([]): value = [value]
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
344 for value in value:
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
345 designator, property = value.split(':')
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
346 link, nodeid = roundupdb.splitDesignator(designator)
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
347 link = self.db.classes[link]
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
348 link.set(nodeid, **{property: nid})
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
349
186
61355a9483f4 Web edit messages aren't sent to the person who did the edit any more.
Richard Jones <richard@users.sourceforge.net>
parents: 181
diff changeset
350 # see if we want to send a message to the nosy list...
61355a9483f4 Web edit messages aren't sent to the person who did the edit any more.
Richard Jones <richard@users.sourceforge.net>
parents: 181
diff changeset
351 props = cl.getprops()
61355a9483f4 Web edit messages aren't sent to the person who did the edit any more.
Richard Jones <richard@users.sourceforge.net>
parents: 181
diff changeset
352 # don't do the message thing if there's no nosy list, or the editor
61355a9483f4 Web edit messages aren't sent to the person who did the edit any more.
Richard Jones <richard@users.sourceforge.net>
parents: 181
diff changeset
353 # of the node is the only person on the nosy list - they're already
61355a9483f4 Web edit messages aren't sent to the person who did the edit any more.
Richard Jones <richard@users.sourceforge.net>
parents: 181
diff changeset
354 # aware of the change.
61355a9483f4 Web edit messages aren't sent to the person who did the edit any more.
Richard Jones <richard@users.sourceforge.net>
parents: 181
diff changeset
355 nosy = 0
61355a9483f4 Web edit messages aren't sent to the person who did the edit any more.
Richard Jones <richard@users.sourceforge.net>
parents: 181
diff changeset
356 if props.has_key('nosy'):
61355a9483f4 Web edit messages aren't sent to the person who did the edit any more.
Richard Jones <richard@users.sourceforge.net>
parents: 181
diff changeset
357 nosy = cl.get(nid, 'nosy')
61355a9483f4 Web edit messages aren't sent to the person who did the edit any more.
Richard Jones <richard@users.sourceforge.net>
parents: 181
diff changeset
358 uid = self.getuid()
61355a9483f4 Web edit messages aren't sent to the person who did the edit any more.
Richard Jones <richard@users.sourceforge.net>
parents: 181
diff changeset
359 if len(nosy) == 1 and uid in nosy:
61355a9483f4 Web edit messages aren't sent to the person who did the edit any more.
Richard Jones <richard@users.sourceforge.net>
parents: 181
diff changeset
360 nosy = 0
61355a9483f4 Web edit messages aren't sent to the person who did the edit any more.
Richard Jones <richard@users.sourceforge.net>
parents: 181
diff changeset
361 if (nosy and props.has_key('messages') and
61355a9483f4 Web edit messages aren't sent to the person who did the edit any more.
Richard Jones <richard@users.sourceforge.net>
parents: 181
diff changeset
362 props['messages'].isMultilinkType and
61355a9483f4 Web edit messages aren't sent to the person who did the edit any more.
Richard Jones <richard@users.sourceforge.net>
parents: 181
diff changeset
363 props['messages'].classname == 'msg'):
61355a9483f4 Web edit messages aren't sent to the person who did the edit any more.
Richard Jones <richard@users.sourceforge.net>
parents: 181
diff changeset
364
178
1573a02b3254 Changed the order of the information in the message generated by web edits.
Richard Jones <richard@users.sourceforge.net>
parents: 167
diff changeset
365 # handle the note
1573a02b3254 Changed the order of the information in the message generated by web edits.
Richard Jones <richard@users.sourceforge.net>
parents: 167
diff changeset
366 note = None
1573a02b3254 Changed the order of the information in the message generated by web edits.
Richard Jones <richard@users.sourceforge.net>
parents: 167
diff changeset
367 if self.form.has_key('__note'):
1573a02b3254 Changed the order of the information in the message generated by web edits.
Richard Jones <richard@users.sourceforge.net>
parents: 167
diff changeset
368 note = self.form['__note']
1573a02b3254 Changed the order of the information in the message generated by web edits.
Richard Jones <richard@users.sourceforge.net>
parents: 167
diff changeset
369 if note is not None and note.value:
1573a02b3254 Changed the order of the information in the message generated by web edits.
Richard Jones <richard@users.sourceforge.net>
parents: 167
diff changeset
370 note = note.value
1573a02b3254 Changed the order of the information in the message generated by web edits.
Richard Jones <richard@users.sourceforge.net>
parents: 167
diff changeset
371 if '\n' in note:
1573a02b3254 Changed the order of the information in the message generated by web edits.
Richard Jones <richard@users.sourceforge.net>
parents: 167
diff changeset
372 summary = re.split(r'\n\r?', note)[0]
1573a02b3254 Changed the order of the information in the message generated by web edits.
Richard Jones <richard@users.sourceforge.net>
parents: 167
diff changeset
373 else:
1573a02b3254 Changed the order of the information in the message generated by web edits.
Richard Jones <richard@users.sourceforge.net>
parents: 167
diff changeset
374 summary = note
181
817750ead8d5 bleah syntax error
Richard Jones <richard@users.sourceforge.net>
parents: 178
diff changeset
375 m = ['%s\n'%note]
178
1573a02b3254 Changed the order of the information in the message generated by web edits.
Richard Jones <richard@users.sourceforge.net>
parents: 167
diff changeset
376 else:
1573a02b3254 Changed the order of the information in the message generated by web edits.
Richard Jones <richard@users.sourceforge.net>
parents: 167
diff changeset
377 summary = 'This %s has been created through the web.\n'%cn
1573a02b3254 Changed the order of the information in the message generated by web edits.
Richard Jones <richard@users.sourceforge.net>
parents: 167
diff changeset
378 m = [summary]
1573a02b3254 Changed the order of the information in the message generated by web edits.
Richard Jones <richard@users.sourceforge.net>
parents: 167
diff changeset
379 m.append('\n-------\n')
1573a02b3254 Changed the order of the information in the message generated by web edits.
Richard Jones <richard@users.sourceforge.net>
parents: 167
diff changeset
380
167
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
381 # generate an edit message - nosyreactor will send it
186
61355a9483f4 Web edit messages aren't sent to the person who did the edit any more.
Richard Jones <richard@users.sourceforge.net>
parents: 181
diff changeset
382 for name, prop in props.items():
61355a9483f4 Web edit messages aren't sent to the person who did the edit any more.
Richard Jones <richard@users.sourceforge.net>
parents: 181
diff changeset
383 value = cl.get(nid, name, None)
167
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
384 if prop.isLinkType:
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
385 link = self.db.classes[prop.classname]
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
386 key = link.getkey()
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
387 if value is not None and key:
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
388 value = link.get(value, key)
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
389 else:
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
390 value = '-'
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
391 elif prop.isMultilinkType:
186
61355a9483f4 Web edit messages aren't sent to the person who did the edit any more.
Richard Jones <richard@users.sourceforge.net>
parents: 181
diff changeset
392 if value is None: value = []
167
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
393 l = []
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
394 link = self.db.classes[prop.classname]
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
395 for entry in value:
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
396 key = link.getkey()
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
397 if key:
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
398 l.append(link.get(entry, link.getkey()))
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
399 else:
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
400 l.append(entry)
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
401 value = ', '.join(l)
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
402 m.append('%s: %s'%(name, value))
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
403
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
404 # now create the message
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
405 content = '\n'.join(m)
186
61355a9483f4 Web edit messages aren't sent to the person who did the edit any more.
Richard Jones <richard@users.sourceforge.net>
parents: 181
diff changeset
406 nosy.remove(self.getuid())
61355a9483f4 Web edit messages aren't sent to the person who did the edit any more.
Richard Jones <richard@users.sourceforge.net>
parents: 181
diff changeset
407 message_id = self.db.msg.create(author=self.getuid(),
61355a9483f4 Web edit messages aren't sent to the person who did the edit any more.
Richard Jones <richard@users.sourceforge.net>
parents: 181
diff changeset
408 recipients=nosy, date=date.Date('.'), summary=summary,
61355a9483f4 Web edit messages aren't sent to the person who did the edit any more.
Richard Jones <richard@users.sourceforge.net>
parents: 181
diff changeset
409 content=content)
167
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
410 messages = cl.get(nid, 'messages')
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
411 messages.append(message_id)
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
412 props = {'messages': messages}
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
413 cl.set(nid, **props)
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
414
163
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
415 def newnode(self, message=None):
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
416 ''' Add a new node to the database.
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
417
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
418 The form works in two modes: blank form and submission (that is,
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
419 the submission goes to the same URL). **Eventually this means that
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
420 the form will have previously entered information in it if
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
421 submission fails.
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
422
163
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
423 The new node will be created with the properties specified in the
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
424 form submission. For multilinks, multiple form entries are handled,
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
425 as are prop=value,value,value. You can't mix them though.
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
426
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
427 If the new node is to be referenced from somewhere else immediately
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
428 (ie. the new node is a file that is to be attached to a support
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
429 issue) then supply one of these arguments in addition to the usual
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
430 form entries:
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
431 :link=designator:property
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
432 :multilink=designator:property
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
433 ... which means that once the new node is created, the "property"
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
434 on the node given by "designator" should now reference the new
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
435 node's id. The node id will be appended to the multilink.
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
436 '''
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
437 cn = self.classname
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
438 cl = self.db.classes[cn]
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
439
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
440 # possibly perform a create
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
441 keys = self.form.keys()
162
717f12e6ccf2 Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 154
diff changeset
442 if [i for i in keys if i[0] != ':']:
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
443 props = {}
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
444 try:
167
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
445 nid = self._createnode()
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
446 self._post_editnode(nid)
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
447 # and some nice feedback for the user
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
448 message = '%s created ok'%cn
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
449 except:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
450 s = StringIO.StringIO()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
451 traceback.print_exc(None, s)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
452 message = '<pre>%s</pre>'%cgi.escape(s.getvalue())
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
453 self.pagehead('New %s'%self.classname.capitalize(), message)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
454 htmltemplate.newitem(self, self.TEMPLATES, self.db, self.classname,
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
455 self.form)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
456 self.pagefoot()
163
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
457 newissue = newnode
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
458 newuser = newnode
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
459
167
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
460 def newfile(self, message=None):
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
461 ''' Add a new file to the database.
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
462
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
463 This form works very much the same way as newnode - it just has a
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
464 file upload.
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
465 '''
167
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
466 cn = self.classname
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
467 cl = self.db.classes[cn]
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
468
167
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
469 # possibly perform a create
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
470 keys = self.form.keys()
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
471 if [i for i in keys if i[0] != ':']:
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
472 try:
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
473 file = self.form['content']
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
474 self._post_editnode(cl.create(content=file.file.read(),
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
475 type=mimetypes.guess_type(file.filename)[0],
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
476 name=file.filename))
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
477 # and some nice feedback for the user
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
478 message = '%s created ok'%cn
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
479 except:
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
480 s = StringIO.StringIO()
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
481 traceback.print_exc(None, s)
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
482 message = '<pre>%s</pre>'%cgi.escape(s.getvalue())
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
483
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
484 self.pagehead('New %s'%self.classname.capitalize(), message)
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
485 htmltemplate.newitem(self, self.TEMPLATES, self.db, self.classname,
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
486 self.form)
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
487 self.pagefoot()
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
488
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
489 def classes(self, message=None):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
490 ''' display a list of all the classes in the database
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
491 '''
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
492 if self.user == 'admin':
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
493 self.pagehead('Table of classes', message)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
494 classnames = self.db.classes.keys()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
495 classnames.sort()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
496 self.write('<table border=0 cellspacing=0 cellpadding=2>\n')
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
497 for cn in classnames:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
498 cl = self.db.getclass(cn)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
499 self.write('<tr class="list-header"><th colspan=2 align=left>%s</th></tr>'%cn.capitalize())
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
500 for key, value in cl.properties.items():
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
501 if value is None: value = ''
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
502 else: value = str(value)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
503 self.write('<tr><th align=left>%s</th><td>%s</td></tr>'%(
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
504 key, cgi.escape(value)))
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
505 self.write('</table>')
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
506 self.pagefoot()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
507 else:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
508 raise Unauthorised
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
509
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
510 def main(self, dre=re.compile(r'([^\d]+)(\d+)'), nre=re.compile(r'new(\w+)')):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
511 path = self.split_path
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
512 if not path or path[0] in ('', 'index'):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
513 self.index()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
514 elif len(path) == 1:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
515 if path[0] == 'list_classes':
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
516 self.classes()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
517 return
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
518 m = dre.match(path[0])
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
519 if m:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
520 self.classname = m.group(1)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
521 self.nodeid = m.group(2)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
522 getattr(self, 'show%s'%self.classname)()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
523 return
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
524 m = nre.match(path[0])
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
525 if m:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
526 self.classname = m.group(1)
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
527 getattr(self, 'new%s'%self.classname)()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
528 return
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
529 self.classname = path[0]
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
530 self.list()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
531 else:
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
532 raise 'ValueError', 'Path not understood'
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
533
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
534 def __del__(self):
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
535 self.db.close()
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
536
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
537 #
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
538 # $Log: not supported by cvs2svn $
186
61355a9483f4 Web edit messages aren't sent to the person who did the edit any more.
Richard Jones <richard@users.sourceforge.net>
parents: 181
diff changeset
539 # Revision 1.15 2001/08/02 00:34:10 richard
61355a9483f4 Web edit messages aren't sent to the person who did the edit any more.
Richard Jones <richard@users.sourceforge.net>
parents: 181
diff changeset
540 # bleah syntax error
61355a9483f4 Web edit messages aren't sent to the person who did the edit any more.
Richard Jones <richard@users.sourceforge.net>
parents: 181
diff changeset
541 #
181
817750ead8d5 bleah syntax error
Richard Jones <richard@users.sourceforge.net>
parents: 178
diff changeset
542 # Revision 1.14 2001/08/02 00:26:16 richard
817750ead8d5 bleah syntax error
Richard Jones <richard@users.sourceforge.net>
parents: 178
diff changeset
543 # Changed the order of the information in the message generated by web edits.
817750ead8d5 bleah syntax error
Richard Jones <richard@users.sourceforge.net>
parents: 178
diff changeset
544 #
178
1573a02b3254 Changed the order of the information in the message generated by web edits.
Richard Jones <richard@users.sourceforge.net>
parents: 167
diff changeset
545 # Revision 1.13 2001/07/30 08:12:17 richard
1573a02b3254 Changed the order of the information in the message generated by web edits.
Richard Jones <richard@users.sourceforge.net>
parents: 167
diff changeset
546 # Added time logging and file uploading to the templates.
1573a02b3254 Changed the order of the information in the message generated by web edits.
Richard Jones <richard@users.sourceforge.net>
parents: 167
diff changeset
547 #
167
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
548 # Revision 1.12 2001/07/30 06:26:31 richard
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
549 # Added some documentation on how the newblah works.
a49c8a2ddd26 Added time logging and file uploading to the templates.
Richard Jones <richard@users.sourceforge.net>
parents: 163
diff changeset
550 #
163
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
551 # Revision 1.11 2001/07/30 06:17:45 richard
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
552 # Features:
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
553 # . Added ability for cgi newblah forms to indicate that the new node
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
554 # should be linked somewhere.
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
555 # Fixed:
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
556 # . Fixed the agument handling for the roundup-admin find command.
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
557 # . Fixed handling of summary when no note supplied for newblah. Again.
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
558 # . Fixed detection of no form in htmltemplate Field display.
8f9a65510139 Added some documentation on how the newblah works.
Richard Jones <richard@users.sourceforge.net>
parents: 162
diff changeset
559 #
162
717f12e6ccf2 Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 154
diff changeset
560 # Revision 1.10 2001/07/30 02:37:34 richard
717f12e6ccf2 Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 154
diff changeset
561 # Temporary measure until we have decent schema migration...
717f12e6ccf2 Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 154
diff changeset
562 #
154
4fb5f59d8627 Temporary measure until we have decent schema migration...
Richard Jones <richard@users.sourceforge.net>
parents: 142
diff changeset
563 # Revision 1.9 2001/07/30 01:25:07 richard
4fb5f59d8627 Temporary measure until we have decent schema migration...
Richard Jones <richard@users.sourceforge.net>
parents: 142
diff changeset
564 # Default implementation is now "classic" rather than "extended" as one would
4fb5f59d8627 Temporary measure until we have decent schema migration...
Richard Jones <richard@users.sourceforge.net>
parents: 142
diff changeset
565 # expect.
4fb5f59d8627 Temporary measure until we have decent schema migration...
Richard Jones <richard@users.sourceforge.net>
parents: 142
diff changeset
566 #
142
664faa54d672 Default implementation is now "classic"...
Richard Jones <richard@users.sourceforge.net>
parents: 128
diff changeset
567 # Revision 1.8 2001/07/29 08:27:40 richard
664faa54d672 Default implementation is now "classic"...
Richard Jones <richard@users.sourceforge.net>
parents: 128
diff changeset
568 # Fixed handling of passed-in values in form elements (ie. during a
664faa54d672 Default implementation is now "classic"...
Richard Jones <richard@users.sourceforge.net>
parents: 128
diff changeset
569 # drill-down)
664faa54d672 Default implementation is now "classic"...
Richard Jones <richard@users.sourceforge.net>
parents: 128
diff changeset
570 #
128
ce36f2962b94 Fixed handling of passed-in values in form elements (ie. during a drill-down)
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
571 # Revision 1.7 2001/07/29 07:01:39 richard
ce36f2962b94 Fixed handling of passed-in values in form elements (ie. during a drill-down)
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
572 # Added vim command to all source so that we don't get no steenkin' tabs :)
ce36f2962b94 Fixed handling of passed-in values in form elements (ie. during a drill-down)
Richard Jones <richard@users.sourceforge.net>
parents: 127
diff changeset
573 #
127
0791d13baea7 Added vim command to all source so that we don't get no steenkin' tabs :)
Richard Jones <richard@users.sourceforge.net>
parents: 117
diff changeset
574 # Revision 1.6 2001/07/29 04:04:00 richard
0791d13baea7 Added vim command to all source so that we don't get no steenkin' tabs :)
Richard Jones <richard@users.sourceforge.net>
parents: 117
diff changeset
575 # Moved some code around allowing for subclassing to change behaviour.
0791d13baea7 Added vim command to all source so that we don't get no steenkin' tabs :)
Richard Jones <richard@users.sourceforge.net>
parents: 117
diff changeset
576 #
117
63de7e04c74d Moved some code around allowing for subclassing to change behaviour.
Richard Jones <richard@users.sourceforge.net>
parents: 115
diff changeset
577 # Revision 1.5 2001/07/28 08:16:52 richard
63de7e04c74d Moved some code around allowing for subclassing to change behaviour.
Richard Jones <richard@users.sourceforge.net>
parents: 115
diff changeset
578 # New issue form handles lack of note better now.
63de7e04c74d Moved some code around allowing for subclassing to change behaviour.
Richard Jones <richard@users.sourceforge.net>
parents: 115
diff changeset
579 #
115
8775d545f41e New issue form handles lack of note better now.
Richard Jones <richard@users.sourceforge.net>
parents: 103
diff changeset
580 # Revision 1.4 2001/07/28 00:34:34 richard
8775d545f41e New issue form handles lack of note better now.
Richard Jones <richard@users.sourceforge.net>
parents: 103
diff changeset
581 # Fixed some non-string node ids.
8775d545f41e New issue form handles lack of note better now.
Richard Jones <richard@users.sourceforge.net>
parents: 103
diff changeset
582 #
103
381016730332 Fixed some non-string node ids.
Richard Jones <richard@users.sourceforge.net>
parents: 31
diff changeset
583 # Revision 1.3 2001/07/23 03:56:30 richard
381016730332 Fixed some non-string node ids.
Richard Jones <richard@users.sourceforge.net>
parents: 31
diff changeset
584 # oops, missed a config removal
381016730332 Fixed some non-string node ids.
Richard Jones <richard@users.sourceforge.net>
parents: 31
diff changeset
585 #
31
6eebdf2bf262 oops, missed a config removal
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
586 # Revision 1.2 2001/07/22 12:09:32 richard
6eebdf2bf262 oops, missed a config removal
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
587 # Final commit of Grande Splite
6eebdf2bf262 oops, missed a config removal
Richard Jones <richard@users.sourceforge.net>
parents: 26
diff changeset
588 #
26
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents: 25
diff changeset
589 # Revision 1.1 2001/07/22 11:58:35 richard
c7c14960f413 Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents: 25
diff changeset
590 # More Grande Splite
25
4cf1daf2f2eb More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
591 #
127
0791d13baea7 Added vim command to all source so that we don't get no steenkin' tabs :)
Richard Jones <richard@users.sourceforge.net>
parents: 117
diff changeset
592 #
0791d13baea7 Added vim command to all source so that we don't get no steenkin' tabs :)
Richard Jones <richard@users.sourceforge.net>
parents: 117
diff changeset
593 # vim: set filetype=python ts=4 sw=4 et si

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