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 2013/07/23 00:54:18 UTC

[11/15] git commit: [#6456] Changed target_app to allow list and added by_app to ToolImporter

[#6456] Changed target_app to allow list and added by_app to ToolImporter

Signed-off-by: Cory Johns <cj...@slashdotmedia.com>


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

Branch: refs/heads/cj/6456
Commit: b12e82ebf833b680b77a76eb29f8dbdef9b0784d
Parents: f091124
Author: Cory Johns <cj...@slashdotmedia.com>
Authored: Mon Jul 22 21:43:49 2013 +0000
Committer: Cory Johns <cj...@slashdotmedia.com>
Committed: Mon Jul 22 21:43:49 2013 +0000

----------------------------------------------------------------------
 ForgeImporters/forgeimporters/base.py           | 14 +++++-
 .../forgeimporters/tests/test_base.py           | 48 ++++++++++++++++----
 2 files changed, 50 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/b12e82eb/ForgeImporters/forgeimporters/base.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/base.py b/ForgeImporters/forgeimporters/base.py
index 01e614a..6632f37 100644
--- a/ForgeImporters/forgeimporters/base.py
+++ b/ForgeImporters/forgeimporters/base.py
@@ -18,6 +18,7 @@
 from pkg_resources import iter_entry_points
 
 from tg import expose
+from paste.deploy.converters import aslist
 from formencode import validators as fev
 
 from ming.utils import LazyProperty
@@ -77,6 +78,15 @@ class ToolImporter(object):
         for ep in iter_entry_points('allura.importers', name):
             return ep.load()()
 
+    @classmethod
+    def by_app(self, app):
+        importers = {}
+        for ep in iter_entry_points('allura.importers'):
+            importer = ep.load()
+            if app in aslist(importer.target_app):
+                importers[ep.name] = importer()
+        return importers
+
     def import_tool(self, project=None, mount_point=None):
         """
         Override this method to perform the tool import.
@@ -85,11 +95,11 @@ class ToolImporter(object):
 
     @property
     def tool_label(self):
-        return getattr(self.target_app, 'tool_label', None)
+        return getattr(aslist(self.target_app)[0], 'tool_label', None)
 
     @property
     def tool_description(self):
-        return getattr(self.target_app, 'tool_description', None)
+        return getattr(aslist(self.target_app)[0], 'tool_description', None)
 
 
 class ToolsValidator(fev.Set):

http://git-wip-us.apache.org/repos/asf/incubator-allura/blob/b12e82eb/ForgeImporters/forgeimporters/tests/test_base.py
----------------------------------------------------------------------
diff --git a/ForgeImporters/forgeimporters/tests/test_base.py b/ForgeImporters/forgeimporters/tests/test_base.py
index a6a4d18..64096fd 100644
--- a/ForgeImporters/forgeimporters/tests/test_base.py
+++ b/ForgeImporters/forgeimporters/tests/test_base.py
@@ -23,17 +23,20 @@ import mock
 from .. import base
 
 
-def ep(name, source=None):
-    mep = mock.Mock(name='mock_ep')
+def ep(name, source=None, importer=None, **kw):
+    mep = mock.Mock(name='mock_ep', **kw)
     mep.name = name
-    mep.load.return_value.source = source
-    mep.lv = mep.load.return_value.return_value
-    mep.lv.source = source
+    if importer is not None:
+        mep.load.return_value = importer
+    else:
+        mep.load.return_value.source = source
+        mep.lv = mep.load.return_value.return_value
+        mep.lv.source = source
     return mep
 
 
 class TestProjectImporterDispatcher(TestCase):
-    @mock.patch('forgeimporters.base.iter_entry_points')
+    @mock.patch.object(base, 'iter_entry_points')
     def test_lookup(self, iep):
         eps = iep.return_value = [ep('ep1', 'first'), ep('ep2', 'second')]
         result = base.ProjectImporterDispatcher()._lookup('source', 'rest1', 'rest2')
@@ -42,7 +45,7 @@ class TestProjectImporterDispatcher(TestCase):
 
 
 class TestProjectImporter(TestCase):
-    @mock.patch('forgeimporters.base.iter_entry_points')
+    @mock.patch.object(base, 'iter_entry_points')
     def test_tool_importers(self, iep):
         eps = iep.return_value = [ep('ep1', 'foo'), ep('ep2', 'bar'), ep('ep3', 'foo')]
         pi = base.ProjectImporter()
@@ -51,16 +54,24 @@ class TestProjectImporter(TestCase):
         iep.assert_called_once_with('allura.importers')
 
 
+
+TA1 = mock.Mock(tool_label='foo', tool_description='foo_desc')
+TA2 = mock.Mock(tool_label='qux', tool_description='qux_desc')
+TA3 = mock.Mock(tool_label='baz', tool_description='baz_desc')
+
 class TestToolImporter(TestCase):
     class TI1(base.ToolImporter):
-        target_app = mock.Mock(tool_label='foo', tool_description='foo_desc')
+        target_app = TA1
 
     class TI2(base.ToolImporter):
-        target_app = mock.Mock(tool_label='foo', tool_description='foo_desc')
+        target_app = TA2
         tool_label = 'bar'
         tool_description = 'bar_desc'
 
-    @mock.patch('forgeimporters.base.iter_entry_points')
+    class TI3(base.ToolImporter):
+        target_app = [TA2, TA2]
+
+    @mock.patch.object(base, 'iter_entry_points')
     def test_by_name(self, iep):
         eps = iep.return_value = [ep('my-name', 'my-source')]
         importer = base.ToolImporter.by_name('my-name')
@@ -73,13 +84,30 @@ class TestToolImporter(TestCase):
         iep.assert_called_once_with('allura.importers', 'other-name')
         self.assertEqual(importer, None)
 
+    @mock.patch.object(base, 'iter_entry_points')
+    def test_by_app(self, iep):
+        eps = iep.return_value = [
+                ep('importer1', importer=self.TI1),
+                ep('importer2', importer=self.TI2),
+                ep('importer3', importer=self.TI3),
+            ]
+        importers = base.ToolImporter.by_app(TA2)
+        self.assertEqual(set(importers.keys()), set([
+                'importer2',
+                'importer3',
+            ]))
+        self.assertIsInstance(importers['importer2'], self.TI2)
+        self.assertIsInstance(importers['importer3'], self.TI3)
+
     def test_tool_label(self):
         self.assertEqual(self.TI1().tool_label, 'foo')
         self.assertEqual(self.TI2().tool_label, 'bar')
+        self.assertEqual(self.TI3().tool_label, 'qux')
 
     def test_tool_description(self):
         self.assertEqual(self.TI1().tool_description, 'foo_desc')
         self.assertEqual(self.TI2().tool_description, 'bar_desc')
+        self.assertEqual(self.TI3().tool_description, 'qux_desc')
 
 
 class TestToolsValidator(TestCase):