From e091b60d35ea6ab9e5f5062650d92afa509abf37 Mon Sep 17 00:00:00 2001
From: Stefano Borini <sborini@enthought.com>
Date: Thu, 13 Jul 2017 22:53:17 +0100
Subject: [PATCH] Added stevedore plugin installation

---
 force_bdss/cli/__init__.py       |  0
 force_bdss/cli/force_bdss.py     | 22 ++++++++++++++++------
 force_bdss/workspecs/__init__.py |  0
 setup.py                         | 15 ++++++++++++---
 4 files changed, 28 insertions(+), 9 deletions(-)
 create mode 100644 force_bdss/cli/__init__.py
 create mode 100644 force_bdss/workspecs/__init__.py

diff --git a/force_bdss/cli/__init__.py b/force_bdss/cli/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/force_bdss/cli/force_bdss.py b/force_bdss/cli/force_bdss.py
index 79a7920..c4a26d1 100644
--- a/force_bdss/cli/force_bdss.py
+++ b/force_bdss/cli/force_bdss.py
@@ -1,12 +1,10 @@
 import click
+from stevedore import extension
+from stevedore.exception import NoMatches
 from envisage.core_plugin import CorePlugin
 
 from force_bdss.bdss_application import BDSSApplication
 from force_bdss.core_mco_driver import CoreMCODriver
-from force_bdss.data_sources.data_sources_plugin import \
-    DataSourcesPlugin
-from force_bdss.mco.multi_criteria_optimizers_plugin import \
-    MultiCriteriaOptimizersPlugin
 
 
 @click.command()
@@ -17,10 +15,22 @@ def run(evaluate, workflow_filepath):
     plugins = [
         CorePlugin(),
         CoreMCODriver(),
-        DataSourcesPlugin(),
-        MultiCriteriaOptimizersPlugin(),
     ]
 
+    mgr = extension.ExtensionManager(
+        namespace='force.bdss.extensions',
+        invoke_on_load=True
+    )
+
+    def import_extensions(ext):
+        print("Found extension {}".format(ext.name))
+        plugins.append(ext.obj)
+
+    try:
+        mgr.map(import_extensions)
+    except NoMatches:
+        print("No extensions found")
+
     application = BDSSApplication(
         plugins=plugins,
         evaluate=evaluate,
diff --git a/force_bdss/workspecs/__init__.py b/force_bdss/workspecs/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/setup.py b/setup.py
index c544f17..2087e06 100644
--- a/setup.py
+++ b/setup.py
@@ -1,4 +1,4 @@
-from setuptools import setup
+from setuptools import setup, find_packages
 
 VERSION = "0.1.0.dev0"
 
@@ -8,9 +8,18 @@ setup(
     entry_points={
         'console_scripts': [
             'force_bdss = force_bdss.cli.force_bdss:run',
-        ]},
+        ],
+        "force.bdss.extensions": [
+            "mco = force_bdss.mco.multi_criteria_optimizers_plugin:"
+                   "MultiCriteriaOptimizersPlugin",
+            "data_source = force_bdss.data_sources.data_sources_plugin:"
+            "DataSourcesPlugin",
+        ]
+    },
+    packages=find_packages(),
     install_requires=[
         "envisage >= 4.6.0",
-        "click >= 6.7"
+        "click >= 6.7",
+        "stevedore >= 1.24.0"
     ]
 )
-- 
GitLab