Source code for ecosound.measurements.measurer_builder

# -*- coding: utf-8 -*-
"""
Created on Thu Apr 22 10:02:51 2020

@author: xavier.mouy
"""


class BaseClass(object):
    """
    Base class for all measurers.

    All measurers need to inheritate from this BaseClass in order to be built
    by the MeasurerFactory.
    """

    def __init__(self, measurer_name):
        self.measurer_name = measurer_name

    @classmethod
    def is_measurer_for(cls, measurer_name):
        """
        Check measurer name.

        Compare the requested measurer_name with each measurer class
        available.

        Parameters
        ----------
        measurer_name : str
        Name of the detector class.

        Returns
        -------
        bool
        """
        return measurer_name == cls.__name__


[docs] def MeasurerFactory(measurer_name, *args, **kwargs): """ Measurer Factory. Loads the measurer class defined by measurer_name. Each measurer class must be added to the __init__.py file. For example : from .measurer1 import Measurer1 where Measurer1 is the name of the measurer class to load from the .py file measurer1 Parameters ---------- measurer_name : str Name of the measurer class. *args : any Input arguments for the measurer selected. **kwargs : any Keyword arguments for the measurer selected. Raises ------ ValueError If measurer_name doesn't correspond to any of the measurers available. Returns ------- Measurer object """ meas_list = [] for cls in BaseClass.__subclasses__(): meas_list.append(cls.__name__) if cls.is_measurer_for(measurer_name): return cls(measurer_name, *args, **kwargs) raise ValueError("Invalid measurer name. Measurers available: " + str(meas_list))