diff options
author | Linda Wang <wangwulin@huawei.com> | 2017-06-29 07:12:29 +0000 |
---|---|---|
committer | Linda Wang <wangwulin@huawei.com> | 2017-08-17 09:24:49 +0000 |
commit | ecaecd74a20e4845fb748077b759a5697ba86f1c (patch) | |
tree | a26e7f5b5b456a78c29ab135f4862a9ca4b2ae25 /functest/api/base.py | |
parent | 94d1bddfdd97379e50e4c12f26116441e836d0f6 (diff) |
API proposal for functest
1. Propose a basic framework for API
2. And these functions have been realized:
1) Show environment
2) Prepare Environment
3) Show credentials
4) List all testcases
5) Show a testcase
6) List all tiers
7) Show a tier
8) List all testcases within given tier
JIRA: FUNCTEST-843
Change-Id: Ib961446708077b56465eda0052f6d38806b62594
Signed-off-by: Linda Wang <wangwulin@huawei.com>
Diffstat (limited to 'functest/api/base.py')
-rw-r--r-- | functest/api/base.py | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/functest/api/base.py b/functest/api/base.py new file mode 100644 index 00000000..efeab824 --- /dev/null +++ b/functest/api/base.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python + +# Copyright (c) 2017 Huawei Technologies Co.,Ltd and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 + +""" +The base class to dispatch request + +""" + +import logging + +from flask import request +from flask_restful import Resource + +from functest.api.common import api_utils, error + + +LOGGER = logging.getLogger(__name__) + + +class ApiResource(Resource): + """ API Resource class""" + + def __init__(self): + super(ApiResource, self).__init__() + + def _post_args(self): # pylint: disable=no-self-use + # pylint: disable=maybe-no-member + """ Return action and args after parsing request """ + + data = request.json if request.json else {} + params = api_utils.change_to_str_in_dict(data) + action = params.get('action', request.form.get('action', '')) + args = params.get('args', {}) + try: + args['file'] = request.files['file'] + except KeyError: + pass + LOGGER.debug('Input args are: action: %s, args: %s', action, args) + + return action, args + + def _dispatch_post(self): + """ Dispatch request """ + action, args = self._post_args() + return self._dispatch(args, action) + + def _dispatch(self, args, action): + """ + Dynamically load the classes with reflection and + obtain corresponding methods + """ + try: + return getattr(self, action)(args) + except AttributeError: + error.result_handler(status=1, data='No such action') + + +# Import modules from package "functest.api.resources" +# and append them into sys.modules +api_utils.import_modules_from_package("functest.api.resources") |