Describe API versions
Adding json representation of the v2 REST API at the API root endpoint. Endpoint still requires authentication. Change-Id: I069644917f9a29e7ddfe7010695ad3a5aa5ca8c2 Partial-Bug: #1350076
This commit is contained in:
parent
d2b607b0be
commit
0af28cb95e
|
@ -19,12 +19,39 @@ import pecan
|
||||||
|
|
||||||
from ceilometer.api.controllers import v2
|
from ceilometer.api.controllers import v2
|
||||||
|
|
||||||
|
MEDIA_TYPE_JSON = 'application/vnd.openstack.telemetry-%s+json'
|
||||||
|
MEDIA_TYPE_XML = 'application/vnd.openstack.telemetry-%s+xml'
|
||||||
|
|
||||||
|
|
||||||
class RootController(object):
|
class RootController(object):
|
||||||
|
|
||||||
v2 = v2.V2Controller()
|
v2 = v2.V2Controller()
|
||||||
|
|
||||||
@pecan.expose(generic=True, template='index.html')
|
@pecan.expose('json')
|
||||||
def index(self):
|
def index(self):
|
||||||
# FIXME: Return version information
|
base_url = pecan.request.host_url
|
||||||
return dict()
|
available = [{'tag': 'v2', 'date': '2013-02-13T00:00:00Z', }]
|
||||||
|
collected = [version_descriptor(base_url, v['tag'], v['date'])
|
||||||
|
for v in available]
|
||||||
|
versions = {'versions': {'values': collected}}
|
||||||
|
return versions
|
||||||
|
|
||||||
|
|
||||||
|
def version_descriptor(base_url, version, released_on):
|
||||||
|
url = version_url(base_url, version)
|
||||||
|
return {
|
||||||
|
'id': version,
|
||||||
|
'links': [
|
||||||
|
{'href': url, 'rel': 'self', },
|
||||||
|
{'href': 'http://docs.openstack.org/',
|
||||||
|
'rel': 'describedby', 'type': 'text/html', }],
|
||||||
|
'media-types': [
|
||||||
|
{'base': 'application/json', 'type': MEDIA_TYPE_JSON % version, },
|
||||||
|
{'base': 'application/xml', 'type': MEDIA_TYPE_XML % version, }],
|
||||||
|
'status': 'stable',
|
||||||
|
'updated': released_on,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def version_url(base_url, version_number):
|
||||||
|
return '%s/%s' % (base_url, version_number)
|
||||||
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
# Copyright 2014 OpenStack Foundation
|
||||||
|
#
|
||||||
|
# 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 ceilometer.tests import api
|
||||||
|
|
||||||
|
V2_MEDIA_TYPES = [
|
||||||
|
{
|
||||||
|
'base': 'application/json',
|
||||||
|
'type': 'application/vnd.openstack.telemetry-v2+json'
|
||||||
|
}, {
|
||||||
|
'base': 'application/xml',
|
||||||
|
'type': 'application/vnd.openstack.telemetry-v2+xml'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
V2_HTML_DESCRIPTION = {
|
||||||
|
'href': 'http://docs.openstack.org/',
|
||||||
|
'rel': 'describedby',
|
||||||
|
'type': 'text/html',
|
||||||
|
}
|
||||||
|
|
||||||
|
V2_EXPECTED_RESPONSE = {
|
||||||
|
'id': 'v2',
|
||||||
|
'links': [
|
||||||
|
{
|
||||||
|
'rel': 'self',
|
||||||
|
'href': 'http://localhost/v2',
|
||||||
|
},
|
||||||
|
V2_HTML_DESCRIPTION
|
||||||
|
],
|
||||||
|
'media-types': V2_MEDIA_TYPES,
|
||||||
|
'status': 'stable',
|
||||||
|
'updated': '2013-02-13T00:00:00Z',
|
||||||
|
}
|
||||||
|
|
||||||
|
V2_VERSION_RESPONSE = {
|
||||||
|
"version": V2_EXPECTED_RESPONSE
|
||||||
|
}
|
||||||
|
|
||||||
|
VERSIONS_RESPONSE = {
|
||||||
|
"versions": {
|
||||||
|
"values": [
|
||||||
|
V2_EXPECTED_RESPONSE
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class TestVersions(api.FunctionalTest):
|
||||||
|
|
||||||
|
def test_versions(self):
|
||||||
|
data = self.get_json('/')
|
||||||
|
self.assertEqual(VERSIONS_RESPONSE, data)
|
Loading…
Reference in New Issue