[#6706] Added config to hide importers from table without disabling them
Signed-off-by: Cory Johns <cjohns@slashdotmedia.com>
diff --git a/ForgeImporters/forgeimporters/base.py b/ForgeImporters/forgeimporters/base.py
index ea01968..a556ec2 100644
--- a/ForgeImporters/forgeimporters/base.py
+++ b/ForgeImporters/forgeimporters/base.py
@@ -441,7 +441,9 @@
def index(self, *a, **kw):
importer_matrix = defaultdict(dict)
tools_with_importers = set()
- for ep in h.iter_entry_points('allura.importers'):
+ hidden = set(aslist(config.get('hidden_importers'), sep=','))
+ visible = lambda ep: ep.name not in hidden
+ for ep in filter(visible, h.iter_entry_points('allura.importers')):
importer = ep.load()
for tool in aslist(importer.target_app):
tools_with_importers.add(tool.tool_label)
diff --git a/ForgeImporters/forgeimporters/tests/test_base.py b/ForgeImporters/forgeimporters/tests/test_base.py
index f9a373b..b38548d 100644
--- a/ForgeImporters/forgeimporters/tests/test_base.py
+++ b/ForgeImporters/forgeimporters/tests/test_base.py
@@ -21,7 +21,7 @@
from formencode import Invalid
import mock
from tg import expose, config
-from nose.tools import assert_equal, assert_raises
+from nose.tools import assert_equal, assert_raises, assert_in, assert_not_in
from webob.exc import HTTPUnauthorized
from alluratest.controller import TestController
@@ -283,6 +283,20 @@
assert url.endswith('/admin/ext/import/importer1'), url
assert_equal(import1_page.body, 'test importer 1 controller webpage')
+ @mock.patch.object(base.h, 'iter_entry_points')
+ def test_hidden(self, iep):
+ iep.return_value = [
+ ep('importer1', importer=TI1),
+ ep('importer2', importer=TI2),
+ ]
+ admin_page = self.app.get('/admin/')
+ with h.push_config(config, hidden_importers='importer1'):
+ import_main_page = admin_page.click('Import')
+ url = import_main_page.environ['PATH_INFO']
+ assert url.endswith('/admin/ext/import/'), url
+ assert not import_main_page.html.find('a', href='importer1')
+ assert import_main_page.html.find('a', href='importer2')
+
def test_get_importer_upload_path():
project = mock.Mock(