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/common | |
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/common')
-rw-r--r-- | functest/api/common/__init__.py | 0 | ||||
-rw-r--r-- | functest/api/common/api_utils.py | 91 | ||||
-rw-r--r-- | functest/api/common/error.py | 24 |
3 files changed, 115 insertions, 0 deletions
diff --git a/functest/api/common/__init__.py b/functest/api/common/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/functest/api/common/__init__.py diff --git a/functest/api/common/api_utils.py b/functest/api/common/api_utils.py new file mode 100644 index 00000000..f518e777 --- /dev/null +++ b/functest/api/common/api_utils.py @@ -0,0 +1,91 @@ +#!/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 + +""" +Utils for functest restapi + +""" + +import collections +import logging +import os +import sys +from oslo_utils import importutils + +import six + +import functest + +LOGGER = logging.getLogger(__name__) + + +def change_to_str_in_dict(obj): + """ + Return a dict with key and value both in string if they are in Unicode + """ + if isinstance(obj, collections.Mapping): + return {str(k): change_to_str_in_dict(v) for k, v in obj.items()} + elif isinstance(obj, list): + return [change_to_str_in_dict(ele) for ele in obj] + elif isinstance(obj, six.text_type): + return str(obj) + return obj + + +def itersubclasses(cls, _seen=None): + """ Generator over all subclasses of a given class in depth first order """ + + if not isinstance(cls, type): + raise TypeError("itersubclasses must be called with " + "new-style classes, not %.100r" % cls) + _seen = _seen or set() + try: + subs = cls.__subclasses__() + except TypeError: # fails only when cls is type + subs = cls.__subclasses__(cls) + for sub in subs: + if sub not in _seen: + _seen.add(sub) + yield sub + for itersub in itersubclasses(sub, _seen): + yield itersub + + +def import_modules_from_package(package): + """ + Import modules from package and append into sys.modules + :param: package - Full package name. For example: functest.api.resources + """ + path = [os.path.dirname(functest.__file__), ".."] + package.split(".") + path = os.path.join(*path) + for root, _, files in os.walk(path): + for filename in files: + if filename.startswith("__") or not filename.endswith(".py"): + continue + new_package = ".".join(root.split(os.sep)).split("....")[1] + module_name = "%s.%s" % (new_package, filename[:-3]) + try: + try_append_module(module_name, sys.modules) + except ImportError: + LOGGER.exception("unable to import %s", module_name) + + +def try_append_module(name, modules): + """ Append the module into specified module system """ + + if name not in modules: + modules[name] = importutils.import_module(name) + + +def change_obj_to_dict(obj): + """ Transfer the object into dict """ + dic = {} + for key, value in vars(obj).items(): + dic.update({key: value}) + return dic diff --git a/functest/api/common/error.py b/functest/api/common/error.py new file mode 100644 index 00000000..d0045225 --- /dev/null +++ b/functest/api/common/error.py @@ -0,0 +1,24 @@ +#!/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 + +""" +Used to handle results + +""" + +from flask import jsonify + + +def result_handler(status, data): + """ Return the json format of result in dict """ + result = { + 'status': status, + 'result': data + } + return jsonify(result) |