diff --git a/examples/foo.csv b/examples/foo.csv new file mode 100644 index 0000000000000000000000000000000000000000..41d7a2fcd3cdd14b2434317ce46d6621c549b633 --- /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 0000000000000000000000000000000000000000..e17077c8be518c502cde9c4baf1d48ecc836aca6 --- /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 57051c180ce7336c08107185668d2b9b54d2345b..a7775b50758fd9df7757f87b413c050667c90b32 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 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 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 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 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 0000000000000000000000000000000000000000..708123d5fd5cefdfc54f36df0ea8b7acee9cf9de --- /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): + pass + + 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 0000000000000000000000000000000000000000..f01f35554a5d2530935e560d29f6afc8da06c568 --- /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 0000000000000000000000000000000000000000..220a64df857ca0f90966502568dfb55a7524aa1e --- /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 0000000000000000000000000000000000000000..8f10341086f0a315270f63734855aa8ad4e18289 --- /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 0c1ce48e5907a3478cee704bf147b05ce19dee7d..72880920d6e67cd62ee52293f2b6f23426ff55e6 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(),