From ecaecd74a20e4845fb748077b759a5697ba86f1c Mon Sep 17 00:00:00 2001 From: Linda Wang Date: Thu, 29 Jun 2017 07:12:29 +0000 Subject: 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 --- functest/api/base.py | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 functest/api/base.py (limited to 'functest/api/base.py') 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") -- cgit 1.2.3-korg