From 51b51edaaaea56e18fa0882d701ecf4ed17e40c9 Mon Sep 17 00:00:00 2001
From: Martin Lange <martin.lange@ufz.de>
Date: Sat, 29 Oct 2022 22:06:32 +0200
Subject: [PATCH] use the transfer rules in the TimeTrigger component

---
 src/finam/modules/control.py | 62 ++++++++++++------------------------
 1 file changed, 21 insertions(+), 41 deletions(-)

diff --git a/src/finam/modules/control.py b/src/finam/modules/control.py
index 5bb5228c..83fa1edd 100644
--- a/src/finam/modules/control.py
+++ b/src/finam/modules/control.py
@@ -3,6 +3,7 @@
 from ..data.tools import strip_data
 from ..errors import FinamMetaDataError
 from ..sdk import TimeComponent
+from ..tools.connect_helper import FromInput, FromOutput
 from ..tools.log_helper import ErrorLogger
 
 
@@ -75,9 +76,6 @@ class TimeTrigger(TimeComponent):
         self._ini_in_info = in_info
         self._ini_out_info = out_info
 
-        self._in_info = None
-        self._out_info = None
-
         self._start = start
         if self._start is not None:
             self.time = self._start
@@ -106,53 +104,33 @@ class TimeTrigger(TimeComponent):
         if self._ini_out_info is not None:
             self._ini_out_info.time = self._start
 
+        in_info_rules = {}
+        out_info_rules = {}
+
         if self._start is None:
             if self._start_from_input:
                 self.inputs.add(name="In", info=self._ini_in_info)
                 self.outputs.add(name="Out")
+                out_info_rules["Out"] = [FromInput("In")]
             else:
                 self.inputs.add(name="In")
                 self.outputs.add(name="Out", info=self._ini_out_info)
+                in_info_rules["In"] = [FromOutput("Out")]
         else:
             self.inputs.add(name="In", info=self._ini_in_info)
             self.outputs.add(name="Out", info=self._ini_out_info)
-
-        self.create_connector(pull_data=["In"])
+            if self._ini_out_info is None:
+                out_info_rules["Out"] = [FromInput("In")]
+            if self._ini_in_info is None:
+                in_info_rules["In"] = [FromOutput("Out")]
+
+        self.create_connector(
+            pull_data=["In"],
+            in_info_rules=in_info_rules,
+            out_info_rules=out_info_rules,
+        )
 
     def _connect(self):
-        in_infos = {}
-        out_infos = {}
-
-        if self._ini_out_info is None or (
-            self._start is None and self._start_from_input
-        ):
-            in_info = self.connector.in_infos["In"]
-            if in_info is not None:
-                self._in_info = in_info
-                if self._start is None:
-                    self.time = in_info.time
-                if self._ini_out_info is None:
-                    self._out_info = in_info
-                else:
-                    self._ini_out_info.time = in_info.time
-                    self._out_info = self._ini_out_info
-                out_infos["Out"] = self._out_info
-
-        if self._ini_in_info is None or (
-            self._start is None and not self._start_from_input
-        ):
-            out_info = self.connector.out_infos["Out"]
-            if out_info is not None:
-                self._out_info = out_info
-                if self._start is None:
-                    self.time = out_info.time
-                if self._ini_in_info is None:
-                    self._in_info = out_info
-                else:
-                    self._ini_in_info.time = out_info.time
-                    self._in_info = self._ini_in_info
-                in_infos["In"] = self._in_info
-
         out_data = {}
         if (
             not self.connector.data_pushed["Out"]
@@ -160,9 +138,11 @@ class TimeTrigger(TimeComponent):
         ):
             out_data["Out"] = self.connector.in_data["In"]
 
-        self.try_connect(
-            exchange_infos=in_infos, push_infos=out_infos, push_data=out_data
-        )
+        self.try_connect(push_data=out_data)
+
+        in_info = self.connector.in_infos["In"]
+        if in_info is not None:
+            self.time = in_info.time
 
     def _validate(self):
         pass
-- 
GitLab