changeset 192:da2a2e9a8f71

Fix target platform management under mod_python. Closes #44. Also, refactor the code in question to get rid of some duplication.
author cmlenz
date Sun, 11 Sep 2005 12:07:48 +0000
parents cf642b0d991b
children 5238e94c9fd1
files bitten/trac_ext/templates/bitten_config.cs bitten/trac_ext/web_ui.py
diffstat 2 files changed, 22 insertions(+), 43 deletions(-) [+]
line wrap: on
line diff
--- a/bitten/trac_ext/templates/bitten_config.cs
+++ b/bitten/trac_ext/templates/bitten_config.cs
@@ -167,9 +167,9 @@
        var:rule.property ?>" /></td>
       <td><input type="text" name="pattern_<?cs var:name(rule) ?>" value="<?cs
        var:rule.pattern ?>" /></td>
-      <td><input type="submit" name="rm_rule_<?cs
-        var:name(rule) ?>" value="-" /><input type="submit" name="add_rule_<?cs
-        var:name(rule) ?>" value="+" />
+      <td><input type="submit" name="add_rule_<?cs
+        var:name(rule) ?>" value="+" /><input type="submit" name="rm_rule_<?cs
+        var:name(rule) ?>" value="-" />
       </td>
      </tr><?cs /each ?>
     </tbody></table>
--- a/bitten/trac_ext/web_ui.py
+++ b/bitten/trac_ext/web_ui.py
@@ -202,35 +202,10 @@
         if 'cancel' in req.args:
             req.redirect(self.env.href.build(config_name, action='edit'))
 
-        platform = TargetPlatform(self.env, config=config_name,
-                                  name=req.args.get('name'))
-
-        properties = [int(key[9:]) for key in req.args
-                      if key.startswith('property_')]
-        properties.sort()
-        patterns = [int(key[8:]) for key in req.args
-                    if key.startswith('pattern_')]
-        patterns.sort()
-        platform.rules = [(req.args.get('property_%d' % property),
-                           req.args.get('pattern_%d' % pattern))
-                          for property, pattern in zip(properties, patterns)]
-
-        add_rules = [int(key[9:]) for key in req.args
-                     if key.startswith('add_rule_')]
-        if add_rules:
-            platform.rules.insert(add_rules[0] + 1, ('', ''))
-            self._render_platform_form(req, platform)
-            return
-        rm_rules = [int(key[8:]) for key in req.args
-                     if key.startswith('rm_rule_')]
-        if rm_rules:
-            del platform.rules[rm_rules[0]]
-            self._render_platform_form(req, platform)
-            return
-
-        platform.insert()
-
-        req.redirect(self.env.href.build(config_name, action='edit'))
+        platform = TargetPlatform(self.env, config=config_name)
+        if self._process_platform(req, platform):
+            platform.insert()
+            req.redirect(self.env.href.build(config_name, action='edit'))
 
     def _do_delete_platforms(self, req):
         """Delete selected target platforms."""
@@ -253,34 +228,38 @@
             req.redirect(self.env.href.build(config_name, action='edit'))
 
         platform = TargetPlatform.fetch(self.env, platform_id)
+        if self._process_platform(req, platform):
+            platform.update()
+            req.redirect(self.env.href.build(config_name, action='edit'))
+
+    def _process_platform(self, req, platform):
         platform.name = req.args.get('name')
 
-        properties = [int(key[9:]) for key in req.args
+        properties = [int(key[9:]) for key in req.args.keys()
                       if key.startswith('property_')]
         properties.sort()
-        patterns = [int(key[8:]) for key in req.args
+        patterns = [int(key[8:]) for key in req.args.keys()
                     if key.startswith('pattern_')]
         patterns.sort()
         platform.rules = [(req.args.get('property_%d' % property),
                            req.args.get('pattern_%d' % pattern))
-                          for property, pattern in zip(properties, patterns)]
+                          for property, pattern in zip(properties, patterns)
+                          if req.args.get('property_%d' % property)]
 
-        add_rules = [int(key[9:]) for key in req.args
+        add_rules = [int(key[9:]) for key in req.args.keys()
                      if key.startswith('add_rule_')]
         if add_rules:
             platform.rules.insert(add_rules[0] + 1, ('', ''))
             self._render_platform_form(req, platform)
-            return
-        rm_rules = [int(key[8:]) for key in req.args
-                     if key.startswith('rm_rule_')]
+            return False
+        rm_rules = [int(key[8:]) for key in req.args.keys()
+                    if key.startswith('rm_rule_')]
         if rm_rules:
             del platform.rules[rm_rules[0]]
             self._render_platform_form(req, platform)
-            return
+            return False
 
-        platform.update()
-
-        req.redirect(self.env.href.build(config_name, action='edit'))
+        return True
 
     def _render_overview(self, req):
         req.hdf['title'] = 'Build Status'
Copyright (C) 2012-2017 Edgewall Software