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
69 lines
2.2 KiB
Python
69 lines
2.2 KiB
Python
# Copyright 2011 Citrix Systems.
|
|
# 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.
|
|
|
|
from oslo_config import cfg
|
|
import oslo_i18n
|
|
import webob.dec
|
|
|
|
from neutron._i18n import _
|
|
from neutron.api.views import versions as versions_view
|
|
from neutron.pecan_wsgi import app as pecan_app
|
|
from neutron import wsgi
|
|
|
|
|
|
class Versions(object):
|
|
|
|
@classmethod
|
|
def factory(cls, global_config, **local_config):
|
|
if cfg.CONF.web_framework == 'pecan':
|
|
return pecan_app.versions_factory(global_config, **local_config)
|
|
return cls(app=None)
|
|
|
|
@webob.dec.wsgify(RequestClass=wsgi.Request)
|
|
def __call__(self, req):
|
|
"""Respond to a request for all Neutron API versions."""
|
|
version_objs = [
|
|
{
|
|
"id": "v2.0",
|
|
"status": "CURRENT",
|
|
},
|
|
]
|
|
|
|
if req.path != '/':
|
|
if self.app:
|
|
return req.get_response(self.app)
|
|
language = req.best_match_language()
|
|
msg = _('Unknown API version specified')
|
|
msg = oslo_i18n.translate(msg, language)
|
|
return webob.exc.HTTPNotFound(explanation=msg)
|
|
|
|
builder = versions_view.get_view_builder(req)
|
|
versions = [builder.build(version) for version in version_objs]
|
|
response = dict(versions=versions)
|
|
metadata = {}
|
|
|
|
content_type = req.best_match_content_type()
|
|
body = (wsgi.Serializer(metadata=metadata).
|
|
serialize(response, content_type))
|
|
|
|
response = webob.Response()
|
|
response.content_type = content_type
|
|
response.body = wsgi.encode_body(body)
|
|
|
|
return response
|
|
|
|
def __init__(self, app):
|
|
self.app = app
|