def find_policy(target_name, policy_name): policy = None paths = MICROPROBE_RC["architecture_paths"] \ + MICROPROBE_RC["default_paths"] policyfiles = findfiles(paths, "policies/.*.py$", full=True) for policyfile in policyfiles: name = (os.path.basename(policyfile).replace(".py", "")) module = load_source("%s_test" % name, policyfile) pdef = dict(inspect.getmembers(module)) if len( [elem for elem in pdef if elem in _POLICY_ATTRIBUTES] ) != len(_POLICY_ATTRIBUTES): continue if (target_name not in pdef['SUPPORTED_TARGETS'] and "all" not in pdef['SUPPORTED_TARGETS']): continue if pdef['NAME'] != policy_name: continue if policy is not None: raise MicroprobePolicyError( "Multiple policies found for '%s' in target '%s'" % (policy_name, target_name) ) # Reload source for good policy with correct module # name module = load_source("%s" % name, policyfile) pdef = dict(inspect.getmembers(module)) policy = Policy( pdef['NAME'], pdef['DESCRIPTION'], pdef['policy'], pdef['SUPPORTED_TARGETS'], pdef ) if policy is None: raise MicroprobePolicyError( "No policies found for '%s' in target '%s'" % (policy_name, target_name) ) return policy
def _import_default_wrappers(): modules = [] LOG.debug('Wrapper paths: %s', MICROPROBE_RC['wrapper_paths']) for path in MICROPROBE_RC['wrapper_paths']: for module in findfiles([path], r"wrappers/.+\.py$", full=True): module = os.path.realpath(module) if module not in modules: modules.append(module) lmodules = -1 while lmodules != len(modules): lmodules = len(modules) for module_file in modules[:]: name = (os.path.basename(module_file).replace(".py", "")) if name == "__init__": continue if name in microprobe.code.wrapper.__dict__: raise MicroprobeError( "Wrapper module name '%s' in '%s' already loaded. " % (name, module_file) ) try: module = load_source(name, module_file) except MicroprobeValueError: continue microprobe.code.wrapper.__dict__[name] = module modules.remove(module_file) current_wrappers = \ [elem.__name__ for elem in get_all_subclasses(microprobe.code.wrapper.Wrapper) ] if len(current_wrappers) != len(set(current_wrappers)): for elem in set(current_wrappers): current_wrappers.remove(elem) overwrapper = list(set(current_wrappers))[0] raise MicroprobeError( "Module name '%s' in '%s' overrides an existing wrapper " "with name '%s'" % (name, module_file, overwrapper) )