Source code for sigfeat.base.parameter

"""This module implements the Parameter and it's mixin class.

Purpose is, to distinguish parameters of objects from other attributes.
Parameters of instances will be extracted into Sink.

"""


[docs]class Parameter(object): """Adds a Parameter to the class.""" def __init__(self, default=None): self._default = default
[docs] def validate(self, value): """You can override this method for validation of parameter values.""" return value
@property def default(self): """Returns the default value.""" return self._default @default.setter def default(self, value): """Sets the default value, validates value first.""" self._default = self.validate(value) def __repr__(self): return "{}(default={})".format( self.__class__.__name__, str(self.default))
[docs]class ParameterMixin: """ParameterMixin class Adds Parameter functionality to classes. """ _parameters = None def __init__(self, **parameters): self.unroll_parameters(parameters)
[docs] def unroll_parameters(self, parameters): """This method must be called to collect all parameters and provide them as attributes. By calling this function defined parameters will become attributes with values not beeing of type Parameter anymore. But all parameters will be placed in self._parameters as well. """ self._parameters = tuple(self._gen_param_values(parameters)) for pname, pval in self._parameters: self._set_param_as_attr(pname, pval)
@property def parameters(self): """Returns all parameters.""" if self._parameters: return self._parameters else: return tuple(self._gen_parameters()) def _set_param_as_attr(self, name, value): """Sets key value pair as attribut of self.""" return setattr(self, name, value) @classmethod def get_class_parameters(cls): return tuple(cls._gen_parameters()) @classmethod def _gen_parameters(cls): """Yields parameters form cls.""" for name in dir(cls): obj = getattr(cls, name) if isinstance(obj, Parameter): yield name, obj @classmethod def _gen_param_values(cls, parametersd): for pname, pobj in cls._gen_parameters(): if pname in parametersd: yield pname, pobj.validate(parametersd[pname]) else: yield pname, pobj.default