Source code for pycif.utils.classes.datastreams

from types import MethodType

from .baseclass import Plugin


[docs] class DataStream(Plugin): """Plugin type for data streams (meteo, flux, background, field). Provides ``read``, ``write`` and optionally ``fetch`` methods for reading and writing model input/output data to and from files. Concrete implementations live in ``pycif/plugins/datastreams/``. """
[docs] @classmethod def register_plugin(cls, name, version, module, subtype="", **kwargs): """Register a module for a plugin and version with possibly options Args: name (str): name of the plugin version (str): version of the plugin module (types.ModuleType): module defining the interface between pyCIF and the plugin plugin_type (str): type of plugin **kwargs (dictionary): default options for module """ super(DataStream, cls).register_plugin( name, version, module, plugin_type="datastream", subtype=subtype )
[docs] def initiate_template(self): """Initialise the DataStream plugin template. Loads the registered data-stream module and attaches ``write`` and ``read`` as bound methods, and ``fetch`` as a static function on this instance. """ super(DataStream, self).initiate_template( plg_type="datastream", default_functions={"write": True, "read": True, "fetch": False} )
# def initiate_template(self): # module = super(DataStream, self).initiate(plg_type="datastream") # # # Replacing auxiliary functions: # if hasattr(module, "write"): # self.write = MethodType(module.write, self) # # if hasattr(module, "read"): # self.read = MethodType(module.read, self) # # if hasattr(module, "fetch") and not hasattr(self, "fetch"): # self.fetch = MethodType(module.fetch, self)