From 8909f28db6d4ab251b9af9af4483867fc7dddeaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20tom=20W=C3=B6rden?= <h.tomwoerden@indiscale.com> Date: Sat, 17 Jul 2021 17:21:35 +0200 Subject: [PATCH] add conversion --- src/caosadvancedtools/models/parser.py | 18 +++++++++++++++--- unittests/test_parser.py | 7 ++++++- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/caosadvancedtools/models/parser.py b/src/caosadvancedtools/models/parser.py index 84abc315..cd10d971 100644 --- a/src/caosadvancedtools/models/parser.py +++ b/src/caosadvancedtools/models/parser.py @@ -192,7 +192,7 @@ class Parser(object): self._add_entity_to_model(name, entity) # initialize recordtypes self._set_recordtypes() - self._check_datatypes() + self._check_and_convert_datatypes() for name, entity in ymlmodel.items(): self._treat_entity(name, entity, line=ymlmodel["__line__"]) @@ -384,7 +384,7 @@ class Parser(object): raise e self.treated.append(name) - def _check_datatypes(self): + def _check_and_convert_datatypes(self): """ checks if datatype is valid. datatype of properties is simply initialized with string. Here, we iterate over properties and check whether it is a base datatype of a @@ -395,13 +395,19 @@ class Parser(object): if isinstance(value, db.Property): dtype = value.datatype + is_list = False if _get_listdatatype(value.datatype) is not None: dtype = _get_listdatatype(value.datatype) + is_list = True if dtype in self.model: + if is_list: + value.datatype = db.LIST(self.model[dtype]) + else: + value.datatype = self.model[dtype] + continue - # get the datatype if dtype in [db.DOUBLE, db.REFERENCE, @@ -411,7 +417,13 @@ class Parser(object): db.FILE, db.BOOLEAN]: + if is_list: + value.datatype = db.LIST(db.__getattribute__(dtype)) + else: + value.datatype = db.__getattribute__(dtype) + continue + raise ValueError("Unknown Datatype.") def _set_recordtypes(self): diff --git a/unittests/test_parser.py b/unittests/test_parser.py index 03b82809..620c9792 100644 --- a/unittests/test_parser.py +++ b/unittests/test_parser.py @@ -200,9 +200,14 @@ RT1: recommended_properties: a: datatype: LIST(RT2) + b: + datatype: LIST(TEXT) RT2: """ - parse_model_from_yaml(to_file(string)) + model = parse_model_from_yaml(to_file(string)) + + self.assertTrue(isinstance(model['b'], db.Property)) + self.assertEqual(model['b'].datatype, db.LIST(db.TEXT)) # This failed for an older version of caosdb-models string_list = """ -- GitLab