Source code for selinonlib.selective_run_function

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# ######################################################################
# Copyright (C) 2016-2017  Fridolin Pokorny, fridolin.pokorny@gmail.com
# This file is part of Selinon project.
# ######################################################################
"""Function that is run on selective flow/task run."""

from .errors import ConfigurationError
from .helpers import check_conf_keys


[docs]class SelectiveRunFunction(object): """Function that is run on selective flow/task run to ensure whether task/flow should be run.""" _DEFAULT_IMPORT_PATH = 'selinonlib.routines' _DEFAULT_FUNCTION_NAME = 'always_run' def __init__(self, name, import_path): """Initialize selective function as stated in YAML configuration file. :param name: name of the selective run function :param import_path: import describing module from which the selective function should be imported """ self.name = name self.import_path = import_path @staticmethod
[docs] def construct_import_name(name, import_path): """Construct import name that will be used in generated config. :param name: name of the function that will be imported :param import_path: import that should be used to import function :return: string representation of function that will be used in generated config """ return "_{import_path}_{name}".format(import_path=import_path.replace(".", "_"), name=name)
[docs] def get_import_name(self): """Get import name that will be used in generated config. :return: string representation of function that will be used in generated config """ return self.construct_import_name(self.name, self.import_path)
@classmethod
[docs] def get_default(cls): """Get default selective run function. :return: default instance that will be used if user did not provided configuration """ return cls(cls._DEFAULT_FUNCTION_NAME, cls._DEFAULT_IMPORT_PATH)
@classmethod
[docs] def from_dict(cls, dict_): """Instantiate selective run function based on definition in a dictionary. :return: selective run function that will be used based on configuration :rtype: SelectiveRunFunction """ if not dict_: return cls.get_default() unknown_conf = check_conf_keys(dict_, known_conf_opts=('name', 'import')) if unknown_conf: raise ConfigurationError("Unknown configuration options for selective run function supplied: %s" % (unknown_conf.keys())) name = dict_.pop('name', cls._DEFAULT_FUNCTION_NAME) import_path = dict_.pop('import', cls._DEFAULT_IMPORT_PATH) return cls(name, import_path)