Source code for ecosound.visualization.grapher_builder

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

@author: xavier.mouy
"""


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