diff options
author | 2015-11-24 01:35:18 -0800 | |
---|---|---|
committer | 2015-11-24 01:35:18 -0800 | |
commit | a7f8202e77db600354d89cf15c4d5636bffb0415 (patch) | |
tree | 7323ee4817f1d1b4adf863204f14a10710724266 /utils/dispatcher/func.py | |
parent | 68e74fd78b2485e5914ce34a5b30f4485029e021 (diff) |
dispathcer to transfer test result into DB
JIRA: BOTTLENECK-30
Change-Id: I5be6641512eb0c2b1e4e3ea92a5dea720e97f770
Signed-off-by: MatthewLi <matthew.lijun@huawei.com>
Diffstat (limited to 'utils/dispatcher/func.py')
-rw-r--r-- | utils/dispatcher/func.py | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/utils/dispatcher/func.py b/utils/dispatcher/func.py new file mode 100644 index 00000000..71830bf2 --- /dev/null +++ b/utils/dispatcher/func.py @@ -0,0 +1,70 @@ +#Copyright 2013: 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. + +# bottlenecks comment: this is a modified copy of rally/rally/common/utils.py + +import os +import sys +from oslo_utils import importutils + +import utils + + +# Decorator for cli-args +def cliargs(*args, **kwargs): + def _decorator(func): + func.__dict__.setdefault('arguments', []).insert(0, (args, kwargs)) + return func + return _decorator + + +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 sub in itersubclasses(sub, _seen): + yield sub + + +def try_append_module(name, modules): + if name not in modules: + modules[name] = importutils.import_module(name) + + +def import_modules_from_package(package): + """Import modules from package and append into sys.modules + + :param: package - Full package name. For example: rally.deploy.engines + """ + path = [os.path.dirname(utils.__file__), ".."] + package.split(".") + path = os.path.join(*path) + for root, dirs, 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_append_module(module_name, sys.modules) |