# HG changeset patch # User cmlenz # Date 1126440468 0 # Node ID da2a2e9a8f719b3022c7fc4c52d94bd50ea0b045 # Parent cf642b0d991b33f88db7f9845ead011529573019 Fix target platform management under mod_python. Closes #44. Also, refactor the code in question to get rid of some duplication. diff --git a/bitten/trac_ext/templates/bitten_config.cs b/bitten/trac_ext/templates/bitten_config.cs --- a/bitten/trac_ext/templates/bitten_config.cs +++ b/bitten/trac_ext/templates/bitten_config.cs @@ -167,9 +167,9 @@ var:rule.property ?>" /> - + diff --git a/bitten/trac_ext/web_ui.py b/bitten/trac_ext/web_ui.py --- 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'