neutron/neutron/pecan_wsgi/controllers/extensions.py
tonytan4ever ebc7e1fb2f Pecan: Get loaded by paste deploy
This sets up the factory methods needed to have paste deploy create the
pecan app and return it.  It also changes the legacy factory methods to
conditionally use the pecan factory methods if the web_framework config
option is set to 'pecan'.  This way, all deployments of neutron will not
need to change their api-paste.ini files to get pecan toggled on.  It
should just happen without notice once pecan becomes the default.

Also, by moving this to be loaded by paste deploy, there is a good chunk of
code that has been removed because it is no longer necessary.

Co-Authored-By: Brandon Logan <brandon.logan@rackspace.com>
Change-Id: I8b1bbea8d90fdc62715cd8b6738ad955df53d7cd
2017-02-17 14:54:27 -06:00

70 lines
2.3 KiB
Python

# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import pecan
from neutron._i18n import _
from neutron.api import extensions
from neutron.pecan_wsgi.controllers import utils
class ExtensionsController(object):
@utils.expose()
def _lookup(self, alias, *remainder):
return ExtensionController(alias), remainder
@utils.expose(generic=True)
def index(self):
ext_mgr = extensions.PluginAwareExtensionManager.get_instance()
exts = [extensions.ExtensionController._translate(ext)
for ext in ext_mgr.extensions.values()]
return {'extensions': exts}
@utils.when(index, method='POST')
@utils.when(index, method='PUT')
@utils.when(index, method='DELETE')
@utils.when(index, method='HEAD')
@utils.when(index, method='PATCH')
def not_supported(self):
# NOTE(blogan): Normally we'd return 405 but the legacy extensions
# controller returned 404.
pecan.abort(404)
class ExtensionController(object):
def __init__(self, alias):
self.alias = alias
@utils.expose(generic=True)
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)}
@utils.when(index, method='POST')
@utils.when(index, method='PUT')
@utils.when(index, method='DELETE')
@utils.when(index, method='HEAD')
@utils.when(index, method='PATCH')
def not_supported(self):
# NOTE(blogan): Normally we'd return 405 but the legacy extensions
# controller returned 404.
pecan.abort(404)