diff --git a/src/caosadvancedtools/models/data_model.py b/src/caosadvancedtools/models/data_model.py index e198d15ca2c56eceec29c356cabdf28ac44895b2..47ca5f1eefe6d057fbc004dcad9af89c75f1a300 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 41dcc3cdb76e307bace04f63748373d2d7f9741f..5770bb483df6bdb00743dd63cc01fe598e26514e 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(