From a1cd45a7f933e67d50d946d8a8c9c7d65ced37d8 Mon Sep 17 00:00:00 2001
From: leufen1 <l.leufen@fz-juelich.de>
Date: Thu, 4 Feb 2021 15:34:43 +0100
Subject: [PATCH] IntelliO3 reference model is downloaded during preprocessing
 if required, IntelliO3 is now fully available as reference model!

---
 mlair/run_modules/pre_processing.py | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/mlair/run_modules/pre_processing.py b/mlair/run_modules/pre_processing.py
index 21aebd62..4888a60b 100644
--- a/mlair/run_modules/pre_processing.py
+++ b/mlair/run_modules/pre_processing.py
@@ -65,6 +65,7 @@ class PreProcessing(RunEnvironment):
         self.data_store.set("stations", valid_stations)
         self.split_train_val_test()
         self.report_pre_processing()
+        self.prepare_competitors()
 
     def report_pre_processing(self):
         """Log some metrics on data and create latex report."""
@@ -325,6 +326,25 @@ class PreProcessing(RunEnvironment):
             if transformation_dict is not None:
                 self.data_store.set("transformation", transformation_dict)
 
+    def prepare_competitors(self):
+        """
+        Prepare competitor models already in the preprocessing stage. This is performed here, because some models might
+        need to have internet access, which is depending on the operating system not possible during postprocessing.
+        This method checks currently only, if the Intelli03-ts-v1 model is requested as competitor and downloads the
+        data if required.
+        """
+        logging.info("Searching for competitors to be prepared for use.")
+        competitors = self.data_store.get_default("competitors", default=None)
+        if competitors is not None:
+            for competitor_name in competitors:
+                if competitor_name.lower() == "IntelliO3-ts-v1".lower():
+                    logging.info("Prepare IntelliO3-ts-v1 model")
+                    from mlair.reference_models.reference_model_intellio3_v1 import IntelliO3_ts_v1
+                    path = os.path.join(self.data_store.get("competitor_path"), competitor_name)
+                    IntelliO3_ts_v1("IntelliO3-ts-v1", path).make_reference_available_locally(remove_tmp_dir=False)
+        else:
+            logging.info("No preparation required because no competitor was provided to the workflow.")
+
 
 def f_proc(data_handler, station, name_affix, store, **kwargs):
     """
-- 
GitLab