99 lines
3.2 KiB
Python
99 lines
3.2 KiB
Python
# Copyright (c) 2015 Mirantis, Inc.
|
|
# 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.
|
|
|
|
"""Defcore guidelines controller."""
|
|
|
|
import pecan
|
|
from pecan import rest
|
|
|
|
from refstack.api import constants as const
|
|
from refstack.api import guidelines
|
|
from refstack.api import utils as api_utils
|
|
|
|
|
|
class TestsController(rest.RestController):
|
|
"""v1/guidelines/<version>/tests handler.
|
|
|
|
This will allow users to retrieve specific test lists from specific
|
|
guidelines for use with refstack-client.
|
|
"""
|
|
|
|
@pecan.expose(content_type='text/plain')
|
|
def get(self, version):
|
|
"""Get the plain-text test list of the specified guideline version."""
|
|
# Remove the .json from version if it is there.
|
|
version.replace('.json', '')
|
|
g = guidelines.Guidelines()
|
|
json = g.get_guideline_contents(version)
|
|
|
|
if not json:
|
|
return 'Error getting JSON content for version: ' + version
|
|
|
|
if pecan.request.GET.get(const.TYPE):
|
|
types = pecan.request.GET.get(const.TYPE).split(',')
|
|
else:
|
|
types = None
|
|
|
|
if pecan.request.GET.get('alias'):
|
|
alias = api_utils.str_to_bool(pecan.request.GET.get('alias'))
|
|
else:
|
|
alias = True
|
|
|
|
if pecan.request.GET.get('flag'):
|
|
flag = api_utils.str_to_bool(pecan.request.GET.get('flag'))
|
|
else:
|
|
flag = True
|
|
|
|
target = pecan.request.GET.get('target', 'platform')
|
|
try:
|
|
target_caps = g.get_target_capabilities(json, types, target)
|
|
test_list = g.get_test_list(json, target_caps, alias, flag)
|
|
except KeyError:
|
|
return 'Invalid target: ' + target
|
|
|
|
return '\n'.join(test_list)
|
|
|
|
|
|
class GuidelinesController(rest.RestController):
|
|
"""/v1/guidelines handler.
|
|
|
|
This acts as a proxy for retrieving guideline files
|
|
from the openstack/defcore Github repository.
|
|
"""
|
|
|
|
tests = TestsController()
|
|
|
|
@pecan.expose('json')
|
|
def get(self):
|
|
"""Get a list of all available guidelines."""
|
|
g = guidelines.Guidelines()
|
|
version_list = g.get_guideline_list()
|
|
if version_list is None:
|
|
pecan.abort(500, 'The server was unable to get a list of '
|
|
'guidelines from the external source.')
|
|
else:
|
|
return version_list
|
|
|
|
@pecan.expose('json')
|
|
def get_one(self, file_name):
|
|
"""Handler for getting contents of specific guideline file."""
|
|
g = guidelines.Guidelines()
|
|
json = g.get_guideline_contents(file_name)
|
|
if json:
|
|
return json
|
|
else:
|
|
pecan.abort(500, 'The server was unable to get the JSON '
|
|
'content for the specified guideline file.')
|