Mercurial > p > roundup > code
diff roundup/cgi_client.py @ 228:1d1848c99abe
Fixed some isFooTypes that I missed.
Refactored some code in the CGI code.
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Wed, 15 Aug 2001 23:43:18 +0000 |
| parents | ad2c98faec97 |
| children | d3edb94047a5 |
line wrap: on
line diff
--- a/roundup/cgi_client.py Mon Aug 13 23:04:12 2001 +0000 +++ b/roundup/cgi_client.py Wed Aug 15 23:43:18 2001 +0000 @@ -15,11 +15,11 @@ # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. # -# $Id: cgi_client.py,v 1.20 2001-08-12 06:32:36 richard Exp $ +# $Id: cgi_client.py,v 1.21 2001-08-15 23:43:18 richard Exp $ import os, cgi, pprint, StringIO, urlparse, re, traceback, mimetypes -import roundupdb, htmltemplate, date +import roundupdb, htmltemplate, date, hyperdb class Unauthorised(ValueError): pass @@ -124,7 +124,8 @@ if key[0] == ':': continue prop = props[key] value = self.form[key] - if isinstance(prop.isLinkType or prop, hyperdb.Multilink): + if (isinstance(prop, hyperdb.Link) or + isinstance(prop, hyperdb.Multilink)): if type(value) == type([]): value = [arg.value for arg in value] else: @@ -197,55 +198,9 @@ keys = self.form.keys() num_re = re.compile('^\d+$') if keys: - changed = [] - props = {} try: - keys = self.form.keys() - for key in keys: - if not cl.properties.has_key(key): - continue - proptype = cl.properties[key] - if isinstance(proptype, hyperdb.String): - value = str(self.form[key].value).strip() - elif isinstance(proptype, hyperdb.Date): - value = date.Date(str(self.form[key].value)) - elif isinstance(proptype, hyperdb.Interval): - value = date.Interval(str(self.form[key].value)) - elif isinstance(proptype, hyperdb.Link): - value = str(self.form[key].value).strip() - # handle key values - link = cl.properties[key].classname - if not num_re.match(value): - try: - value = self.db.classes[link].lookup(value) - except: - raise ValueError, 'property "%s": %s not a %s'%( - key, value, link) - elif isinstance(proptype, hyperdb.Multilink): - value = self.form[key] - if type(value) != type([]): - value = [i.strip() for i in str(value.value).split(',')] - else: - value = [str(i.value).strip() for i in value] - link = cl.properties[key].classname - l = [] - for entry in map(str, value): - if not num_re.match(entry): - try: - entry = self.db.classes[link].lookup(entry) - except: - raise ValueError, \ - 'property "%s": %s not a %s'%(key, - entry, link) - l.append(entry) - l.sort() - value = l - # if changed, set it - if value != cl.get(self.nodeid, key): - changed.append(key) - props[key] = value + props, changed = parsePropsFromForm(cl, self.form) cl.set(self.nodeid, **props) - self._post_editnode(self.nodeid, changed) # and some nice feedback for the user message = '%s edited ok'%', '.join(changed) @@ -290,51 +245,8 @@ def _createnode(self): ''' create a node based on the contents of the form ''' - cn = self.classname - cl = self.db.classes[cn] - props = {} - keys = self.form.keys() - num_re = re.compile('^\d+$') - for key in keys: - if not cl.properties.has_key(key): - continue - proptype = cl.properties[key] - if isinstance(proptype, hyperdb.String): - value = self.form[key].value.strip() - elif isinstance(proptype, hyperdb.Date): - value = date.Date(self.form[key].value.strip()) - elif isinstance(proptype, hyperdb.Interval): - value = date.Interval(self.form[key].value.strip()) - elif isinstance(proptype, hyperdb.Link): - value = self.form[key].value.strip() - # handle key values - link = cl.properties[key].classname - if not num_re.match(value): - try: - value = self.db.classes[link].lookup(value) - except: - raise ValueError, 'property "%s": %s not a %s'%( - key, value, link) - elif isinstance(proptype, hyperdb.Multilink): - value = self.form[key] - if type(value) != type([]): - value = [i.strip() for i in value.value.split(',')] - else: - value = [i.value.strip() for i in value] - link = cl.properties[key].classname - l = [] - for entry in map(str, value): - if not num_re.match(entry): - try: - entry = self.db.classes[link].lookup(entry) - except: - raise ValueError, \ - 'property "%s": %s not a %s'%(key, - entry, link) - l.append(entry) - l.sort() - value = l - props[key] = value + cl = self.db.classes[self.classname] + props, dummy = parsePropsFromForm(cl, self.form) return cl.create(**props) def _post_editnode(self, nid, changes=None): @@ -376,7 +288,7 @@ if len(nosy) == 1 and uid in nosy: nosy = 0 if (nosy and props.has_key('messages') and - props['messages'].isMultilinkType and + isinstance(props['messages'], hyperdb.Multilink) and props['messages'].classname == 'msg'): # handle the note @@ -554,8 +466,64 @@ def __del__(self): self.db.close() +def parsePropsFromForm(cl, form, note_changed=0): + '''Pull properties for the given class out of the form. + ''' + props = {} + changed = [] + keys = form.keys() + num_re = re.compile('^\d+$') + for key in keys: + if not cl.properties.has_key(key): + continue + proptype = cl.properties[key] + if isinstance(proptype, hyperdb.String): + value = form[key].value.strip() + elif isinstance(proptype, hyperdb.Date): + value = date.Date(form[key].value.strip()) + elif isinstance(proptype, hyperdb.Interval): + value = date.Interval(form[key].value.strip()) + elif isinstance(proptype, hyperdb.Link): + value = form[key].value.strip() + # handle key values + link = cl.properties[key].classname + if not num_re.match(value): + try: + value = self.db.classes[link].lookup(value) + except: + raise ValueError, 'property "%s": %s not a %s'%( + key, value, link) + elif isinstance(proptype, hyperdb.Multilink): + value = form[key] + if type(value) != type([]): + value = [i.strip() for i in value.value.split(',')] + else: + value = [i.value.strip() for i in value] + link = cl.properties[key].classname + l = [] + for entry in map(str, value): + if not num_re.match(entry): + try: + entry = self.db.classes[link].lookup(entry) + except: + raise ValueError, \ + 'property "%s": %s not a %s'%(key, + entry, link) + l.append(entry) + l.sort() + value = l + props[key] = value + # if changed, set it + if note_changed and value != cl.get(self.nodeid, key): + changed.append(key) + props[key] = value + return props, changed + # # $Log: not supported by cvs2svn $ +# Revision 1.20 2001/08/12 06:32:36 richard +# using isinstance(blah, Foo) now instead of isFooType +# # Revision 1.19 2001/08/07 00:24:42 richard # stupid typo #
