From 049776f4d688a874a945a8846665b97e2b06d2b4 Mon Sep 17 00:00:00 2001 From: fspreck <f.spreckelsen@indiscale.com> Date: Tue, 29 Mar 2022 17:09:26 +0200 Subject: [PATCH] ENH: Allow internal properties in the extern keyword of yaml models --- src/caosadvancedtools/models/data_model.py | 15 +++++++++++++-- src/caosadvancedtools/models/parser.py | 5 ++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/caosadvancedtools/models/data_model.py b/src/caosadvancedtools/models/data_model.py index e198d15c..47ca5f1e 100644 --- a/src/caosadvancedtools/models/data_model.py +++ b/src/caosadvancedtools/models/data_model.py @@ -33,6 +33,12 @@ import caosdb as db from caosdb.apiutils import compare_entities, describe_diff +CAOSDB_INTERNAL_PROPERTIES = [ + "name", + "unit", +] + + class DataModel(dict): """Provides tools for managing a data model. @@ -129,8 +135,13 @@ class DataModel(dict): any_change = False for ent in existing_entities: - q = db.Query("FIND * with id={}".format(ent.id)) - ref = q.execute(unique=True) + if ent.name in CAOSDB_INTERNAL_PROPERTIES: + # Workaround for the usage of internal properties like name + # in via the extern keyword: + ref = db.Property(name=ent.name).retrieve() + else: + q = db.Query("FIND * with id={}".format(ent.id)) + ref = q.execute(unique=True) diff = (describe_diff(*compare_entities(ent, ref ), name=ent.name)) diff --git a/src/caosadvancedtools/models/parser.py b/src/caosadvancedtools/models/parser.py index 41dcc3cd..5770bb48 100644 --- a/src/caosadvancedtools/models/parser.py +++ b/src/caosadvancedtools/models/parser.py @@ -22,7 +22,7 @@ import sys import caosdb as db import yaml -from .data_model import DataModel +from .data_model import CAOSDB_INTERNAL_PROPERTIES, DataModel # Keywords which are allowed in data model descriptions. KEYWORDS = ["parent", # deprecated, use inherit_from_* instead: @@ -186,6 +186,9 @@ class Parser(object): ymlmodel["extern"] = [] for name in ymlmodel["extern"]: + if name in CAOSDB_INTERNAL_PROPERTIES: + self.model[name] = db.Property(name=name).retrieve() + continue for role in ("Property", "RecordType", "Record", "File"): if db.execute_query("COUNT {} {}".format(role, name)) > 0: self.model[name] = db.execute_query( -- GitLab