From 2493cfe26c6a3f43ab2a4bc0e80c8d677237c65d Mon Sep 17 00:00:00 2001
From: Stefano Borini <sborini@enthought.com>
Date: Mon, 17 Jul 2017 13:09:53 +0100
Subject: [PATCH] Introduced result object and readapted interface for it.

---
 force_bdss/core_mco_driver.py                          |  3 ++-
 .../csv_extractor/csv_extractor_data_source.py         | 10 +++++++---
 force_bdss/data_sources/data_source_result.py          |  9 ++++-----
 requirements/requirements.txt                          |  1 +
 setup.py                                               |  3 ++-
 5 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/force_bdss/core_mco_driver.py b/force_bdss/core_mco_driver.py
index a7775b5..20a50ce 100644
--- a/force_bdss/core_mco_driver.py
+++ b/force_bdss/core_mco_driver.py
@@ -35,6 +35,7 @@ class CoreMCODriver(Plugin):
     def application_started(self):
         workflow = self.application.workflow
         if self.application.evaluate:
+            ds_results = []
             for requested_ds in workflow.data_sources:
                 ds_bundle = self._find_data_source_bundle_by_name(
                     requested_ds.name)
@@ -42,7 +43,7 @@ class CoreMCODriver(Plugin):
                     ds_model = ds_bundle.create_model(requested_ds.model_data)
                     data_source = ds_bundle.create_data_source(
                         self.application, ds_model)
-                    print(data_source.run())
+                    ds_results.append(data_source.run())
                 else:
                     raise Exception("Requested data source {} but don't know "
                                     "to find it.".format(requested_ds.name))
diff --git a/force_bdss/core_plugins/csv_extractor/csv_extractor/csv_extractor_data_source.py b/force_bdss/core_plugins/csv_extractor/csv_extractor/csv_extractor_data_source.py
index f01f355..93f8783 100644
--- a/force_bdss/core_plugins/csv_extractor/csv_extractor/csv_extractor_data_source.py
+++ b/force_bdss/core_plugins/csv_extractor/csv_extractor/csv_extractor_data_source.py
@@ -1,5 +1,7 @@
 import csv
+import numpy
 from force_bdss.data_sources.base_data_source import BaseDataSource
+from force_bdss.data_sources.data_source_result import DataSourceResult
 
 
 class CSVExtractorDataSource(BaseDataSource):
@@ -11,9 +13,11 @@ class CSVExtractorDataSource(BaseDataSource):
                     continue
 
                 if rowindex == self.model.row:
-                    return {
-                        self.model.cuba_type: row[self.model.column]
-                    }
+                    return DataSourceResult(
+                        originator=self,
+                        value_types = [self.model.cuba_type],
+                        values=numpy.array(row[self.model.column]).reshape(1,1)
+                    )
 
                 return None
             return None
diff --git a/force_bdss/data_sources/data_source_result.py b/force_bdss/data_sources/data_source_result.py
index 15d3986..29b063e 100644
--- a/force_bdss/data_sources/data_source_result.py
+++ b/force_bdss/data_sources/data_source_result.py
@@ -1,4 +1,4 @@
-from traits.api import HasTraits, Array, List, String, Instance
+from traits.api import HasTraits, Array, ArrayOrNone, List, String, Instance
 
 from .base_data_source import BaseDataSource
 
@@ -12,9 +12,8 @@ class DataSourceResult(HasTraits):
     quality is the level of accuracy of the (e.g.c omputational) method, as
     the importance and reliability of that value. It should be an enumeration
     value such as HIGH, MEDIUM, POOR"""
-
     originator = Instance(BaseDataSource)
     value_types = List(String)
-    results = Array(shape=(None, None))
-    accuracy = Array(shape=(None, None))
-    quality = Array(shape=(None, None))
+    values = Array(shape=(None, None))
+    accuracy = ArrayOrNone(shape=(None, None))
+    quality = ArrayOrNone(shape=(None, None))
diff --git a/requirements/requirements.txt b/requirements/requirements.txt
index cfc2705..c332850 100644
--- a/requirements/requirements.txt
+++ b/requirements/requirements.txt
@@ -2,3 +2,4 @@ envisage==4.6.0
 click==6.7
 six==1.10.0
 stevedore==1.24.0
+numpy=1.12.0
diff --git a/setup.py b/setup.py
index 3666512..ee92923 100644
--- a/setup.py
+++ b/setup.py
@@ -21,6 +21,7 @@ setup(
         "envisage >= 4.6.0",
         "click >= 6.7",
         "stevedore >= 1.24.0",
-        "six >= 1.10.0"
+        "six >= 1.10.0",
+        "numpy >= 1.12.0",
     ]
 )
-- 
GitLab