diff roundup/cgi/templating.py @ 4804:bc4144417861

More fixes for form TypeError
author Ralf Schlatterbeck <rsc@runtux.com>
date Mon, 08 Jul 2013 16:58:21 +0200
parents 140d4c2469db
children c317147fd891
line wrap: on
line diff
--- a/roundup/cgi/templating.py	Mon Jul 08 16:55:20 2013 +0200
+++ b/roundup/cgi/templating.py	Mon Jul 08 16:58:21 2013 +0200
@@ -509,7 +509,6 @@
             raise KeyError, 'No such property "%s" on %s'%(item, self.classname)
 
         # look up the correct HTMLProperty class
-        form = self._client.form
         for klass, htmlklass in propclasses:
             if not isinstance(prop, klass):
                 continue
@@ -1225,7 +1224,11 @@
         # If no value is already present for this property, see if one
         # is specified in the current form.
         form = self._client.form
-        if not self._value and form.has_key(self._formname):
+        try:
+            is_in = form.has_key(self._formname)
+        except TypeError:
+            is_in = False
+        if not self._value and is_in:
             if isinstance(prop, hyperdb.Multilink):
                 value = lookupIds(self._db, prop,
                                   handleListCGIValue(form[self._formname]),
@@ -2426,7 +2429,7 @@
         for special in '@:':
             idx = 0
             key = '%s%s%d'%(special, name, idx)
-            while key in self.form:
+            while self._form_has_key(key):
                 self.special_char = special
                 fields.append(self.form.getfirst(key))
                 dirkey = '%s%sdir%d'%(special, name, idx)
@@ -2439,7 +2442,7 @@
             # backward compatible (and query) URL format
             key = special + name
             dirkey = key + 'dir'
-            if key in self.form and not fields:
+            if self._form_has_key(key) and not fields:
                 fields = handleListCGIValue(self.form[key])
                 if dirkey in self.form:
                     dirs.append(self.form.getfirst(dirkey))
@@ -2453,13 +2456,20 @@
             else:
                 var.append(('+', f))
 
+    def _form_has_key(self, name):
+        try:
+            return self.form.has_key(name)
+        except TypeError:
+            pass
+        return False
+
     def _post_init(self):
         """ Set attributes based on self.form
         """
         # extract the index display information from the form
         self.columns = []
         for name in ':columns @columns'.split():
-            if self.form.has_key(name):
+            if self._form_has_key(name):
                 self.special_char = name[0]
                 self.columns = handleListCGIValue(self.form[name])
                 break
@@ -2478,7 +2488,7 @@
         # filtering
         self.filter = []
         for name in ':filter @filter'.split():
-            if self.form.has_key(name):
+            if self._form_has_key(name):
                 self.special_char = name[0]
                 self.filter = handleListCGIValue(self.form[name])
 
@@ -2487,7 +2497,7 @@
         if self.classname is not None:
             cls = db.getclass (self.classname)
             for name in self.filter:
-                if not self.form.has_key(name):
+                if not self._form_has_key(name):
                     continue
                 prop = cls.get_transitive_prop (name)
                 fv = self.form[name]
@@ -2509,7 +2519,7 @@
         # full-text search argument
         self.search_text = None
         for name in ':search_text @search_text'.split():
-            if self.form.has_key(name):
+            if self._form_has_key(name):
                 self.special_char = name[0]
                 self.search_text = self.form.getfirst(name)
 
@@ -2517,7 +2527,7 @@
         # figure batch args
         self.pagesize = 50
         for name in ':pagesize @pagesize'.split():
-            if self.form.has_key(name):
+            if self._form_has_key(name):
                 self.special_char = name[0]
                 try:
                     self.pagesize = int(self.form.getfirst(name))
@@ -2527,7 +2537,7 @@
 
         self.startwith = 0
         for name in ':startwith @startwith'.split():
-            if self.form.has_key(name):
+            if self._form_has_key(name):
                 self.special_char = name[0]
                 try:
                     self.startwith = int(self.form.getfirst(name))
@@ -2536,7 +2546,7 @@
                     pass
 
         # dispname
-        if self.form.has_key('@dispname'):
+        if self._form_has_key('@dispname'):
             self.dispname = self.form.getfirst('@dispname')
         else:
             self.dispname = None

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