Source code for rook.utils.ops.base
"""Base class for operation execution."""
from clisops.parameter import collection_parameter
from . import consolidate, normalise
from .processor import process
[docs]
class Operation:
"""Base class for all operations."""
def __init__(
self,
collection,
file_namer="standard",
split_method="time:auto",
output_dir=None,
output_type="netcdf",
apply_fixes=True,
**params,
):
self._file_namer = file_namer
self._split_method = split_method
self._output_dir = output_dir
self._output_type = output_type
self._apply_fixes = apply_fixes
self._resolve_params(collection, **params)
self._consolidate_collection()
def _resolve_params(self, collection, **params):
self.collection = collection_parameter.CollectionParameter(collection)
self.params = params
def _consolidate_collection(self):
if "time" in self.params:
self.collection = consolidate.consolidate(
self.collection, time=self.params.get("time")
)
else:
self.collection = consolidate.consolidate(self.collection)
[docs]
def get_operation_callable(self):
raise NotImplementedError
[docs]
def calculate(self):
config = {
"output_type": self._output_type,
"output_dir": self._output_dir,
"split_method": self._split_method,
"file_namer": self._file_namer,
}
self.params.update(config)
norm_collection = normalise.normalise(self.collection, self._apply_fixes)
rs = normalise.ResultSet(vars())
for dset, collection in norm_collection.items():
rs.add(
dset,
process(self.get_operation_callable(), collection, **self.params),
)
return rs