def get_invalid_cidoc_links() -> list[dict[str, str]]: from openatlas.models.entity import Entity from openatlas.util.util import link invalid_linking = [] for row in Db.get_cidoc_links(): property_ = g.properties[row['property_code']] domain_is_valid = property_.find_object('domain_class_code', row['domain_code']) range_is_valid = property_.find_object('range_class_code', row['range_code']) if not domain_is_valid or not range_is_valid: invalid_linking.append(row) invalid_links = [] for item in invalid_linking: for row in Db.get_invalid_links(item): domain = Entity.get_by_id(row['domain_id']) range_ = Entity.get_by_id(row['range_id']) invalid_links.append({ 'domain': f"{link(domain)} ({domain.cidoc_class.code})", 'property': link(g.properties[row['property_code']]), 'range': f"{link(range_)} ({range_.cidoc_class.code})" }) return invalid_links
def check_links() -> List[Dict[str, str]]: """ Check all existing links for CIDOC CRM validity and return the invalid ones.""" from openatlas.util.display import link from openatlas.models.entity import Entity invalid_links = [] for row in Db.get_cidoc_links(): property_ = g.properties[row['property']] domain_is_valid = property_.find_object('domain_class_code', row['domain']) range_is_valid = property_.find_object('range_class_code', row['range']) invalid_linking = [] if not domain_is_valid or not range_is_valid: invalid_linking.append(row) for item in invalid_linking: for row2 in Db.get_invalid_links(item): domain = Entity.get_by_id(row2['domain_id']) range_ = Entity.get_by_id(row2['range_id']) invalid_links.append({ 'domain': link(domain) + ' (' + domain.cidoc_class.code + ')', 'property': link(g.properties[row2['property_code']]), 'range': link(range_) + ' (' + range_.cidoc_class.code + ')' }) return invalid_links