You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by je...@apache.org on 2015/11/04 10:32:48 UTC

allura git commit: Omit children Sitemaps from default main_menu implementation

Repository: allura
Updated Branches:
  refs/heads/master 6ec9d3395 -> 9fa2bc09a


Omit children Sitemaps from default main_menu implementation

This fixes behavior in the Pastebin app, and protects from other
apps that might not define their own main_menu.  The problem with
Pastebin is that Icon() is not json-serializable so when visiting
/p/test/_nav.json (when Pastebin is installed) you'd get an error.
Now we won't.


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

Branch: refs/heads/master
Commit: 9fa2bc09adf8c570f6e03d9b1e89a2142807e428
Parents: 6ec9d33
Author: Dave Brondsema <da...@brondsema.net>
Authored: Thu Oct 29 11:36:23 2015 -0400
Committer: Dave Brondsema <da...@brondsema.net>
Committed: Tue Nov 3 16:07:53 2015 -0500

----------------------------------------------------------------------
 Allura/allura/app.py            | 10 ++++++++--
 Allura/allura/tests/test_app.py | 16 ++++++++++++++++
 2 files changed, 24 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/9fa2bc09/Allura/allura/app.py
----------------------------------------------------------------------
diff --git a/Allura/allura/app.py b/Allura/allura/app.py
index 4cc47b1..5e85e85 100644
--- a/Allura/allura/app.py
+++ b/Allura/allura/app.py
@@ -21,6 +21,7 @@ from urllib import basejoin
 from cStringIO import StringIO
 from collections import defaultdict
 from xml.etree import ElementTree as ET
+from copy import copy
 
 import pkg_resources
 from tg import expose, redirect, flash, validate
@@ -564,10 +565,15 @@ class Application(object):
         """Return a list of :class:`SitemapEntries <allura.app.SitemapEntry>`
         to display in the main project nav for this Application.
 
-        Default implementation returns :attr:`sitemap`.
+        Default implementation returns :attr:`sitemap` without any children.
 
         """
-        return self.sitemap
+        sitemap_without_children = []
+        for sm in self.sitemap:
+            sm_copy = copy(sm)
+            sm_copy.children = []
+            sitemap_without_children.append(sm_copy)
+        return sitemap_without_children
 
     def sidebar_menu(self):
         """Return a list of :class:`SitemapEntries <allura.app.SitemapEntry>`

http://git-wip-us.apache.org/repos/asf/allura/blob/9fa2bc09/Allura/allura/tests/test_app.py
----------------------------------------------------------------------
diff --git a/Allura/allura/tests/test_app.py b/Allura/allura/tests/test_app.py
index 230b5f9..0e20905 100644
--- a/Allura/allura/tests/test_app.py
+++ b/Allura/allura/tests/test_app.py
@@ -23,6 +23,7 @@ from formencode import validators as fev
 
 from alluratest.controller import setup_unit_test
 from allura import app
+from allura.lib.app_globals import Icon
 
 
 def setUp():
@@ -92,6 +93,21 @@ def test_options_on_install():
     assert_equal(a.options_on_install(), opts)
 
 
+def test_main_menu():
+    class TestApp(app.Application):
+        @property
+        def sitemap(self):
+            children = [app.SitemapEntry('New', 'new', ui_icon=Icon('some-icon')),
+                        app.SitemapEntry('Recent', 'recent'),
+                        ]
+            return [app.SitemapEntry('My Tool', '.')[children]]
+
+    a = TestApp(c.project, c.app.config)
+    main_menu = a.main_menu()
+    assert_equal(len(main_menu), 1)
+    assert_equal(main_menu[0].children, [])  # default main_menu implementation should drop the children from sitemap()
+
+
 def test_sitemap():
     sm = app.SitemapEntry('test', '')[
         app.SitemapEntry('a', 'a/'),