You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by jo...@apache.org on 2012/10/26 22:56:57 UTC

[5/15] git commit: [#5145] Fixed validation for new project tools

[#5145] Fixed validation for new project tools

Signed-off-by: Cory Johns <jo...@geek.net>


Project: http://git-wip-us.apache.org/repos/asf/incubator-allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-allura/commit/88c64df9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-allura/tree/88c64df9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-allura/diff/88c64df9

Branch: refs/heads/master
Commit: 88c64df98e22a3559629af036975426fc29731a0
Parents: ac80a0d
Author: Cory Johns <jo...@geek.net>
Authored: Wed Oct 24 16:51:11 2012 +0000
Committer: Cory Johns <jo...@geek.net>
Committed: Fri Oct 26 20:32:09 2012 +0000

----------------------------------------------------------------------
 Allura/allura/lib/plugin.py                        |   10 +++++-
 Allura/allura/lib/utils.py                         |    9 ++++++
 .../widgets/neighborhood_add_project.html          |   21 +++++++--------
 3 files changed, 27 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/88c64df9/Allura/allura/lib/plugin.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/plugin.py b/Allura/allura/lib/plugin.py
index cbbcb99..d6f4ee3 100644
--- a/Allura/allura/lib/plugin.py
+++ b/Allura/allura/lib/plugin.py
@@ -30,6 +30,7 @@ from ming.orm import state
 from ming.orm import ThreadLocalORMSession
 
 from allura.lib import helpers as h
+from allura.lib import utils
 from allura.lib import security
 from allura.lib import exceptions as forge_exc
 
@@ -313,10 +314,15 @@ class ProjectRegistrationProvider(object):
         ## Dynamically generating CheckboxSet of installable tools
         self.add_project_widget.fields.tools = forms.ew.CheckboxSet(
             name="tools", options=[
-                forms.ew.Option(label=tool.tool_label, html_value=tool.tool_label) \
-                for tool in g.entry_points["tool"].itervalues() if tool.installable
+                forms.ew.Option(label=tool.tool_label, html_value=ep) \
+                for ep,tool in g.entry_points["tool"].iteritems() if tool.installable
             ], selected=True
         )
+        # have to update it via index as well because of crazy
+        # implementation of EasyWidget's NamedList "helper";
+        # otherwise, validation doesn't see the new options
+        tfi = utils.index_matching(lambda x: x.name == 'tools', self.add_project_widget.fields)
+        self.add_project_widget.fields[tfi] = self.add_project_widget.fields.tools
 
     @classmethod
     def get(cls):

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/88c64df9/Allura/allura/lib/utils.py
----------------------------------------------------------------------
diff --git a/Allura/allura/lib/utils.py b/Allura/allura/lib/utils.py
index c1b9f8c..285cbfb 100644
--- a/Allura/allura/lib/utils.py
+++ b/Allura/allura/lib/utils.py
@@ -456,3 +456,12 @@ def take_while_true(source):
     while x:
         yield x
         x = source()
+
+def index_matching(pred, seq):
+    '''Return the index of the first item from seq matching the predicate.
+
+    If no items match the predicate, None is returned instead.'''
+    for i,x in enumerate(seq):
+        if pred(x):
+            return i
+    return None

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/88c64df9/Allura/allura/templates/widgets/neighborhood_add_project.html
----------------------------------------------------------------------
diff --git a/Allura/allura/templates/widgets/neighborhood_add_project.html b/Allura/allura/templates/widgets/neighborhood_add_project.html
index 6efe0f8..78ab608 100644
--- a/Allura/allura/templates/widgets/neighborhood_add_project.html
+++ b/Allura/allura/templates/widgets/neighborhood_add_project.html
@@ -29,17 +29,16 @@
     </div>
 
     {% if not neighborhood.project_template %}
-    {% for tool in g.entry_points["tool"].itervalues() %}
-        {% if tool.installable %}
-            <div class="tool">
-                <img src="{{ g.theme.app_icon_url(tool, 48) }}" alt="{{ tool.tool_label}} icon">
-                <input checked type="checkbox" value="{{ tool.tool_label }}"
-                       name="{{ widget.context_for(widget.fields.tools)['rendered_name'] }}"
-                       id="{{ widget.context_for(widget.fields.tools)['rendered_name'] }}_{{ tool.tool_label }}">
-                <h1><label for="{{ widget.context_for(widget.fields.tools)['rendered_name'] }}_{{ tool.tool_label }}">{{ tool.tool_label }}</label></h1>
-                <p>{{ tool.tool_description }}</p>
-            </div>
-        {% endif %}
+    {% for opt in widget.fields.tools.options %}
+        {% set tool = g.entry_points["tool"][opt.html_value] %}
+        <div class="tool">
+            <img src="{{ g.theme.app_icon_url(tool, 48) }}" alt="{{ opt.label }} icon">
+            <input checked type="checkbox" value="{{ opt.html_value }}"
+                   name="{{ widget.context_for(widget.fields.tools)['rendered_name'] }}"
+                   id="{{ widget.context_for(widget.fields.tools)['rendered_name'] }}_{{ opt.html_value }}">
+            <h1><label for="{{ widget.context_for(widget.fields.tools)['rendered_name'] }}_{{ opt.html_value }}">{{ opt.label }}</label></h1>
+            <p>{{ tool.tool_description }}</p>
+        </div>
     {% endfor %}
     {% endif %}
     {% if h.has_access(neighborhood, 'admin') and not neighborhood.project_template and neighborhood.features['private_projects'] %}