From 348951704bf024cf6aee7baf475eb6d7cf7a4894 Mon Sep 17 00:00:00 2001
From: Alexander Schlemmer <alexander@mail-schlemmer.de>
Date: Thu, 18 Nov 2021 10:53:05 +0100
Subject: [PATCH] FIX: records are now put into variable store and correctly
 replaced as values

---
 src/newcrawler/crawl.py |  5 +++--
 tests/test_tool.py      | 19 ++++++++++---------
 2 files changed, 13 insertions(+), 11 deletions(-)

diff --git a/src/newcrawler/crawl.py b/src/newcrawler/crawl.py
index 2655313c..0a3eaafa 100644
--- a/src/newcrawler/crawl.py
+++ b/src/newcrawler/crawl.py
@@ -270,6 +270,7 @@ class Converter(object):
                 c_record = db.Record()
                 records.storage[name] = c_record
             c_record = records.storage[name]
+            values.storage[name] = c_record
 
             if "parents" in record:
                 for parent in record["parents"]:
@@ -282,8 +283,8 @@ class Converter(object):
                     continue
                 propvalue = value
 
-                for varname, varvalue in values.storage.items():
-                    propvalue = propvalue.replace("$" + varname, varvalue)
+                if propvalue.startswith("$"):
+                    propvalue = values[propvalue[1:]]
                 c_record.add_property(name=key, value=propvalue)
 
     @abstractmethod
diff --git a/tests/test_tool.py b/tests/test_tool.py
index 35a4ae44..67269731 100755
--- a/tests/test_tool.py
+++ b/tests/test_tool.py
@@ -5,7 +5,7 @@
 
 from newcrawler import Crawler
 from os.path import join, dirname, basename
-import yaml
+import caosdb as db
 
 def rfp(*pathcomponents):
     """
@@ -24,12 +24,7 @@ def test_crawler():
     crawler = Crawler(debug=True)
     crawler.crawl_directory(rfp("test_directories", "examples_article"),
               rfp("scifolder_cfood.yml"))
-
-    # debug_variables = dict()
-    # for k, v in crawler.debug_tree.items():
-    #     debug_variables[k] = v[0]
-    # print(yaml.dump(debug_variables))
-
+    
     subd = crawler.debug_tree[dircheckstr("DataAnalysis")]
     assert len(subd) == 2
     assert len(subd[0]) == 0
@@ -43,17 +38,21 @@ def test_crawler():
     assert subd[1]["Project"].get_property("date").value == "2020"
     assert subd[1]["Project"].get_property("identifier").value == "climate-model-predict"
     
-    assert len(subd[0]) == 2
+    assert len(subd[0]) == 3
     assert subd[0]["date"] == "2020"
     assert subd[0]["identifier"] == "climate-model-predict"
 
+    assert subd[0]["Project"].__class__ == db.Record
+
     subd = crawler.debug_tree[dircheckstr("DataAnalysis",
                                           "2020_climate-model-predict",
                                           "2020-02-08_prediction-errors")]
     print(subd)
-    assert len(subd[0]) == 2
+    assert len(subd[0]) == 4
     assert subd[0]["date"] == "2020-02-08"
     assert subd[0]["identifier"] == "prediction-errors"
+    assert subd[0]["Project"].__class__ == db.Record
+    assert subd[0]["Measurement"].__class__ == db.Record
 
     assert len(subd[1]) == 2
     
@@ -67,3 +66,5 @@ def test_crawler():
     assert subd[1]["Measurement"].get_property("date").value == "2020-02-08"
     assert subd[1]["Measurement"].get_property("identifier").value == "prediction-errors"
     assert subd[1]["Measurement"].get_property("project").value != "$Project"
+    assert subd[1]["Measurement"].get_property("project").value.__class__ == db.Record
+    assert subd[1]["Measurement"].get_property("project").value == subd[0]["Project"]
-- 
GitLab