From dd72565d49cbd74835b06af0d5407e838be8ccb8 Mon Sep 17 00:00:00 2001 From: Stefano Borini <sborini@enthought.com> Date: Fri, 14 Jul 2017 15:01:02 +0100 Subject: [PATCH] Added CSV extractor --- examples/foo.csv | 10 +++++++++ examples/test_csv.json | 18 ++++++++++++++++ force_bdss/core_mco_driver.py | 2 +- .../core_plugins/csv_extractor/__init__.py | 0 .../csv_extractor/csv_extractor/__init__.py | 0 .../csv_extractor/csv_extractor_bundle.py | 21 +++++++++++++++++++ .../csv_extractor_data_source.py | 19 +++++++++++++++++ .../csv_extractor/csv_extractor_model.py | 17 +++++++++++++++ .../csv_extractor/csv_extractor_plugin.py | 18 ++++++++++++++++ setup.py | 2 ++ 10 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 examples/foo.csv create mode 100644 examples/test_csv.json create mode 100644 force_bdss/core_plugins/csv_extractor/__init__.py create mode 100644 force_bdss/core_plugins/csv_extractor/csv_extractor/__init__.py create mode 100644 force_bdss/core_plugins/csv_extractor/csv_extractor/csv_extractor_bundle.py create mode 100644 force_bdss/core_plugins/csv_extractor/csv_extractor/csv_extractor_data_source.py create mode 100644 force_bdss/core_plugins/csv_extractor/csv_extractor/csv_extractor_model.py create mode 100644 force_bdss/core_plugins/csv_extractor/csv_extractor_plugin.py diff --git a/examples/foo.csv b/examples/foo.csv new file mode 100644 index 0000000..41d7a2f --- /dev/null +++ b/examples/foo.csv @@ -0,0 +1,10 @@ +0,1,2,3,4,5,6,7 +0,1,2,3,4,5,6,7 +0,1,2,3,4,5,6,7 +0,1,2,3,4,42,6,7 +0,1,2,3,4,5,6,7 +0,1,2,3,4,5,6,7 +0,1,2,3,4,5,6,7 +0,1,2,3,4,5,6,7 +0,1,2,3,4,5,6,7 +0,1,2,3,4,5,6,7 diff --git a/examples/test_csv.json b/examples/test_csv.json new file mode 100644 index 0000000..e17077c --- /dev/null +++ b/examples/test_csv.json @@ -0,0 +1,18 @@ +{ + "multi_criteria_optimizer": { + "name": "basic", + "model_data": {} + }, + "data_sources": [ + { + "name": "csv_extractor", + "model_data": { + "filename": "foo.csv", + "row": 3, + "column": 5, + "cuba_type": "PRESSURE" + } + } + ] +} + diff --git a/force_bdss/core_mco_driver.py b/force_bdss/core_mco_driver.py index 57051c1..a7775b5 100644 --- a/force_bdss/core_mco_driver.py +++ b/force_bdss/core_mco_driver.py @@ -42,7 +42,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) - data_source.run() + print(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/__init__.py b/force_bdss/core_plugins/csv_extractor/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/force_bdss/core_plugins/csv_extractor/csv_extractor/__init__.py b/force_bdss/core_plugins/csv_extractor/csv_extractor/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/force_bdss/core_plugins/csv_extractor/csv_extractor/csv_extractor_bundle.py b/force_bdss/core_plugins/csv_extractor/csv_extractor/csv_extractor_bundle.py new file mode 100644 index 0000000..ac30500 --- /dev/null +++ b/force_bdss/core_plugins/csv_extractor/csv_extractor/csv_extractor_bundle.py @@ -0,0 +1,21 @@ +from traits.api import provides, HasStrictTraits +from traits.trait_types import String + +from force_bdss.data_sources.i_data_source_bundle import IDataSourceBundle + +from .csv_extractor_model import CSVExtractorModel +from .csv_extractor_data_source import CSVExtractorDataSource + + +@provides(IDataSourceBundle) +class CSVExtractorBundle(HasStrictTraits): + name = String("csv_extractor") + + def create_model(self, model_data): + return CSVExtractorModel.from_json(model_data) + + def create_ui(self, model): + return model.configure_traits() + + def create_data_source(self, application, model): + return CSVExtractorDataSource(self, application, model) 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 new file mode 100644 index 0000000..f01f355 --- /dev/null +++ b/force_bdss/core_plugins/csv_extractor/csv_extractor/csv_extractor_data_source.py @@ -0,0 +1,19 @@ +import csv +from force_bdss.data_sources.base_data_source import BaseDataSource + + +class CSVExtractorDataSource(BaseDataSource): + def run(self): + with open(self.model.filename) as csvfile: + reader = csv.reader(csvfile) + for rowindex, row in enumerate(reader): + if rowindex < self.model.row: + continue + + if rowindex == self.model.row: + return { + self.model.cuba_type: row[self.model.column] + } + + return None + return None diff --git a/force_bdss/core_plugins/csv_extractor/csv_extractor/csv_extractor_model.py b/force_bdss/core_plugins/csv_extractor/csv_extractor/csv_extractor_model.py new file mode 100644 index 0000000..220a64d --- /dev/null +++ b/force_bdss/core_plugins/csv_extractor/csv_extractor/csv_extractor_model.py @@ -0,0 +1,17 @@ +from traits.api import HasStrictTraits, Int, String + + +class CSVExtractorModel(HasStrictTraits): + filename = String() + row = Int() + column = Int() + cuba_type = String() + + @classmethod + def from_json(cls, json_data): + return cls( + filename=json_data["filename"], + row=json_data["row"], + column=json_data["column"], + cuba_type=json_data["cuba_type"] + ) diff --git a/force_bdss/core_plugins/csv_extractor/csv_extractor_plugin.py b/force_bdss/core_plugins/csv_extractor/csv_extractor_plugin.py new file mode 100644 index 0000000..8f10341 --- /dev/null +++ b/force_bdss/core_plugins/csv_extractor/csv_extractor_plugin.py @@ -0,0 +1,18 @@ +from envisage.plugin import Plugin +from traits.api import List + +from force_bdss.data_sources.i_data_source_bundle import IDataSourceBundle + +from .csv_extractor.csv_extractor_bundle import CSVExtractorBundle + + +class CSVExtractorPlugin(Plugin): + id = "force.bdss.data_sources.csv_extractor" + + data_sources = List( + IDataSourceBundle, + contributes_to='force.bdss.data_sources.bundles' + ) + + def _data_sources_default(self): + return [CSVExtractorBundle()] diff --git a/setup.py b/setup.py index 0c1ce48..7288092 100644 --- a/setup.py +++ b/setup.py @@ -14,6 +14,8 @@ setup( "multi_criteria_optimizers_plugin:MultiCriteriaOptimizersPlugin", "data_source = force_bdss.core_plugins.test_data_sources." "data_sources_plugin:DataSourcesPlugin", + "csv_extractor = force_bdss.core_plugins.csv_extractor" + ".csv_extractor_plugin:CSVExtractorPlugin", ] }, packages=find_packages(), -- GitLab