def __init__(self, extension_manager):
self.extension_manager = extension_manager
- def _translate(self, ext):
+ @staticmethod
+ def _translate(ext):
ext_data = {}
ext_data['name'] = ext.get_name()
ext_data['alias'] = ext.get_alias()
import pecan
+from neutron.api import extensions
+
def expose(*args, **kwargs):
"""Helper function so we don't have to specify json for everything."""
@expose()
def _lookup(self, endpoint, *remainder):
+ if endpoint == 'extensions':
+ return ExtensionsController(), remainder
return GeneralController(endpoint), remainder
+class ExtensionsController(object):
+
+ @expose()
+ def _lookup(self, alias, *remainder):
+ return ExtensionController(alias), remainder
+
+ @expose()
+ def index(self):
+ ext_mgr = extensions.PluginAwareExtensionManager.get_instance()
+ exts = [extensions.ExtensionController._translate(ext)
+ for ext in ext_mgr.extensions.values()]
+ return {'extensions': exts}
+
+
+class ExtensionController(object):
+
+ def __init__(self, alias):
+ self.alias = alias
+
+ @expose()
+ def index(self):
+ ext_mgr = extensions.PluginAwareExtensionManager.get_instance()
+ ext = ext_mgr.extensions.get(self.alias, None)
+ if not ext:
+ pecan.abort(
+ 404, detail=_("Extension with alias %s "
+ "does not exist") % self.alias)
+ return {'extension': extensions.ExtensionController._translate(ext)}
+
+
class GeneralController(object):
def __init__(self, token):
def test_plugin_initialized(self):
self.assertIsNotNone(manager.NeutronManager._instance)
+ def test_get_extensions(self):
+ response = self.app.get('/v2.0/extensions.json')
+ self.assertEqual(response.status_int, 200)
+
+ def test_get_specific_extension(self):
+ response = self.app.get('/v2.0/extensions/allowed-address-pairs.json')
+ self.assertEqual(response.status_int, 200)
+
class TestErrors(PecanFunctionalTest):