import logging from typing import Tuple, List, Mapping, Any from doit import get_var from ee.ds import DataSetManager logger = logging.getLogger(__name__) def configure_logging(): log_level = get_var("log-level", None) if log_level: ee_logger = logging.getLogger("ee") formatter = logging.Formatter("%(levelname)s: %(message)s") ch = logging.StreamHandler() ch.setFormatter(formatter) ee_logger.addHandler(ch) ee_logger.setLevel(log_level) class Report(object): def __init__(self, task): self.task = task class ReportCollection(object): def __init__(self): self._reports = [] # type: List[Report] def add_report(self, report: Report): self._reports.append(report) @property def reports(self) -> Tuple[Report]: return tuple(self._reports) # This should probably be called "DoItModuleConfig" since it is used once per module. The module is responsible for # instantiating it. class DoItConfig(object): def __init__(self): self._dsm = None # type: DataSetManager self._report_collection = None # type: ReportCollection self._extra_config = None # type: Mapping[str, Any] self._data_sets = {} self._reports = [] def configure(self, *, data_set_manager: DataSetManager, report_collection: ReportCollection = None, extra_config: Mapping[str, Any] = None): self._dsm = data_set_manager self._report_collection = report_collection if report_collection is not None else {} self._extra_config = extra_config @property def dsm(self) -> DataSetManager: if self._dsm is None: raise Exception("The data set manager has not been set") return self._dsm @property def report_collection(self): if self._report_collection is None: raise Exception("The report collection has not been set") return self._report_collection @property def extra_config(self): return self._extra_config def data_sets_for(self, task): try: return self._data_sets[task] except KeyError: raise KeyError("No such task registered in this module: {}".format(task)) def out_data_set_for(self, task): return self.data_sets_for(task)[0] def input_data_sets_for(self, task): return self.data_sets_for(task)[1] def set_data_sets_for(self, task, out_dataset: str, *in_datasets: str): self._data_sets[task] = [out_dataset, list(in_datasets)] def change_data_sets_for_task(self, task, _callable): ds = self._data_sets[task] ds[1] = _callable(ds[1]) def append_in_data_set_for_task(self, task, *data_sets: str): ds = self._data_sets[task] ds[1] = ds[1] + list(data_sets)