def insert(entity: Entity, property_code: str, range_: Union[Entity, list[Entity]], description: Optional[str] = None, inverse: bool = False, type_id: Optional[int] = None) -> list[int]: property_ = g.properties[property_code] entities = range_ if isinstance(range_, list) else [range_] new_link_ids = [] for linked_entity in entities: domain = linked_entity if inverse else entity range_ = entity if inverse else linked_entity domain_error = True range_error = True if property_.find_object('domain_class_code', domain.class_.cidoc_class.code): domain_error = False if property_.find_object('range_class_code', range_.class_.cidoc_class.code): range_error = False if domain_error or range_error: # pragma: no cover text = \ f"invalid CIDOC link {domain.class_.cidoc_class.code}" \ f" > {property_code} > {range_.class_.cidoc_class.code}" logger.log('error', 'model', text) abort(400, text) id_ = Db.insert({ 'property_code': property_code, 'domain_id': domain.id, 'range_id': range_.id, 'description': description, 'type_id': type_id }) new_link_ids.append(id_) return new_link_ids
def test_links(self) -> None: from openatlas.database.entity import Entity as DbEntity from openatlas.database.link import Link as DbLink with app.app_context(): with app.test_request_context(): app.preprocess_request() # type: ignore id_ = DbEntity.insert({ 'name': 'Invalid linked entity', 'openatlas_class_name': 'artifact', 'code': 'E13', 'description': ''}) DbLink.insert({ 'property_code': 'P86', 'domain_id': id_, 'range_id': id_, 'description': '', 'type_id': None}) rv = self.app.get(url_for('admin_check_links')) assert b'Invalid linked entity' in rv.data
def insert( entity: 'Entity', property_code: str, range_: Union['Entity', List['Entity']], description: Optional[str] = None, inverse: bool = False, type_id: Optional[int] = None) -> List[int]: property_ = g.properties[property_code] entities = range_ if isinstance(range_, list) else [range_] new_link_ids = [] for linked_entity in entities: domain = linked_entity if inverse else entity range_ = entity if inverse else linked_entity domain_error = True range_error = True if property_.find_object( 'domain_class_code', domain.class_.cidoc_class.code): domain_error = False if property_.find_object( 'range_class_code', range_.class_.cidoc_class.code): range_error = False if domain_error or range_error: text = \ f"{_('error link')}: {domain.class_.cidoc_class.code} > " \ f"{property_code} > {range_.class_.cidoc_class.code}" logger.log('error', 'model', text) flash(text, 'error') continue id_ = Db.insert({ 'property_code': property_code, 'domain_id': domain.id, 'range_id': range_.id, 'description': description, 'type_id': type_id}) new_link_ids.append(id_) return new_link_ids