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/'),