diff --git a/nodescraper/interfaces/dataplugin.py b/nodescraper/interfaces/dataplugin.py index d81f3dc4..6604d3fe 100644 --- a/nodescraper/interfaces/dataplugin.py +++ b/nodescraper/interfaces/dataplugin.py @@ -63,6 +63,9 @@ dict[str, Type[CollectorArgs]], ] +NO_TASK_STR = "No {task_name} configured for {plugin_name}" +TASK_NOT_RAN_STR = "Data {task_name} not ran for {plugin_name}" + class DataPlugin( PluginInterface, @@ -119,13 +122,26 @@ def __init__( **kwargs, ) self._validate_class_var() + collector = self.get_collector_classes() self.collection_result: TaskResult = TaskResult( status=ExecutionStatus.NOT_RAN, - message=f"Data collection not ran for {self.__class__.__name__}", + message=( + TASK_NOT_RAN_STR.format(task_name="collection", plugin_name=self.__class__.__name__) + if collector + else NO_TASK_STR.format(task_name="collection", plugin_name=self.__class__.__name__) + ), + parent=self.__class__.__name__, + task=collector[0].__name__ if collector else None, ) self.analysis_result: TaskResult = TaskResult( status=ExecutionStatus.NOT_RAN, - message=f"Data analysis not ran for {self.__class__.__name__}", + message=( + TASK_NOT_RAN_STR.format(task_name="analysis", plugin_name=self.__class__.__name__) + if self.ANALYZER is not None + else NO_TASK_STR.format(task_name="analysis", plugin_name=self.__class__.__name__) + ), + parent=self.__class__.__name__, + task=self.ANALYZER.__name__ if self.ANALYZER is not None else None, ) self._data: Optional[TDataModel] = None diff --git a/test/unit/framework/test_dataplugin.py b/test/unit/framework/test_dataplugin.py index ac17b6ad..108d3a09 100644 --- a/test/unit/framework/test_dataplugin.py +++ b/test/unit/framework/test_dataplugin.py @@ -125,6 +125,20 @@ def test_data_property(self, plugin): assert isinstance(plugin.data, StandardDataModel) assert plugin.data.value == "dict_value" + def test_default_analysis_result_is_poplulated(self, plugin): + assert plugin.analysis_result.status == ExecutionStatus.NOT_RAN + assert "not ran" in plugin.analysis_result.message + assert "analysis" in plugin.analysis_result.message + assert plugin.analysis_result.parent is not None + assert plugin.analysis_result.task is not None + + def test_default_collection_result_is_poplulated(self, plugin): + assert plugin.collection_result.status == ExecutionStatus.NOT_RAN + assert "not ran" in plugin.collection_result.message + assert "collection" in plugin.collection_result.message + assert plugin.collection_result.parent is not None + assert plugin.collection_result.task is not None + def test_data_setter_error_names_expected_model(self, plugin): """Invalid data should report the expected DATA_MODEL name, not its metaclass.""" with pytest.raises(ValueError) as exc_info: