ebc7e1fb2f
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
70 lines
2.3 KiB
Python
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)
|