Source code for ecosound.detection.detector_builder

# -*- coding: utf-8 -*-
"""
Created on Thu Feb 20 10:02:51 2020

@author: xavier.mouy
"""


[docs] class BaseClass(object): """ Base class for all detectors. All detectors need to inheritate from this BaseClass in order to be built by the DetectorFactory. """ def __init__(self, detector_name): self.detector_name = detector_name
[docs] @classmethod def is_detector_for(cls, detector_name): """ Check detector name. Compare the requested detector_name with each detector classe available. Parameters ---------- detector_name : str Name of the detector class. Returns ------- bool """ return detector_name == cls.__name__
[docs] def DetectorFactory(detector_name, *args, **kwargs): """ Detector Factory. Loads the detector class defined by detector_name. Each detector class must be added to the __init__.py file. For example : from .detector1 import Detector1 where Detector1 is the name of the detector class to load from teh .py file detection1 Parameters ---------- detector_name : str Name of the detector class. *args : any Input arguments for the detector selected. **kwargs : any Keyword arguments for the detector selected. Raises ------ ValueError If detector_name doesn't correspond to any of the detectors available. Returns ------- Detector object """ detec_list = [] for cls in BaseClass.__subclasses__(): detec_list.append(cls.__name__) if cls.is_detector_for(detector_name): return cls(detector_name, *args, **kwargs) raise ValueError("Invalid detector name. Detectors available: " + str(detec_list))