def involvement_insert(origin_id: int) -> Union[str, Response]: origin = Entity.get_by_id(origin_id) form = build_form('involvement', origin=origin) form.activity.choices = [('P11', g.properties['P11'].name_inverse)] if origin.class_.name in ['acquisition', 'activity', 'production']: form.activity.choices.append(('P14', g.properties['P14'].name_inverse)) if origin.class_.name == 'acquisition': form.activity.choices.append( ('P22', g.properties['P22'].name_inverse)) form.activity.choices.append( ('P23', g.properties['P23'].name_inverse)) if form.validate_on_submit(): Transaction.begin() try: if origin.class_.view == 'event': for actor in Entity.get_by_ids( ast.literal_eval(form.actor.data)): link_ = Link.get_by_id( origin.link(form.activity.data, actor, form.description.data)[0]) link_.set_dates(process_form_dates(form)) link_.type = get_link_type(form) link_.update() else: for event in Entity.get_by_ids( ast.literal_eval(form.event.data)): link_ = Link.get_by_id( event.link(form.activity.data, origin, form.description.data)[0]) link_.set_dates(process_form_dates(form)) link_.type = get_link_type(form) link_.update() Transaction.commit() except Exception as e: # pragma: no cover Transaction.rollback() logger.log('error', 'database', 'transaction failed', e) flash(_('error transaction'), 'error') if hasattr(form, 'continue_') and form.continue_.data == 'yes': return redirect(url_for('involvement_insert', origin_id=origin_id)) return redirect( f"{url_for('view', id_=origin.id)}" f"#tab-{'actor' if origin.class_.view == 'event' else 'event'}") return render_template('display_form.html', form=form, crumbs=[[ _(origin.class_.view), url_for('index', view=origin.class_.view) ], origin, _('involvement')])
def relation_insert(origin_id: int) -> Union[str, Response]: origin = Entity.get_by_id(origin_id) form = build_form('actor_actor_relation') form.relation_origin_id.data = origin.id if form.validate_on_submit(): Transaction.begin() try: for actor in Entity.get_by_ids(ast.literal_eval(form.actor.data)): if form.inverse.data: link_ = Link.get_by_id( actor.link('OA7', origin, form.description.data)[0]) else: link_ = Link.get_by_id( origin.link('OA7', actor, form.description.data)[0]) link_.set_dates(form) link_.type = get_link_type(form) link_.update() Transaction.commit() flash(_('entity created'), 'info') except Exception as e: # pragma: no cover Transaction.rollback() logger.log('error', 'database', 'transaction failed', e) flash(_('error transaction'), 'error') if hasattr(form, 'continue_') and form.continue_.data == 'yes': return redirect(url_for('relation_insert', origin_id=origin_id)) return redirect( url_for('entity_view', id_=origin.id) + '#tab-relation') return render_template( 'display_form.html', form=form, title=_('relation'), crumbs=[[_('actor'), url_for('index', view='actor')], origin, '+ ' + uc_first(_('relation'))])
def move_entities(old_node: Node, new_type_id: int, checkbox_values: str) -> None: root = g.nodes[old_node.root[-1]] entity_ids = ast.literal_eval(checkbox_values) delete_ids = [] if new_type_id: # A new type was selected if root.multiple: cleaned_entity_ids = [] for entity in Entity.get_by_ids(entity_ids, nodes=True): if any(node.id == int(new_type_id) for node in entity.nodes): delete_ids.append( entity.id) # If already linked add to delete ids else: cleaned_entity_ids.append(entity.id) entity_ids = cleaned_entity_ids if entity_ids: data = { 'old_type_id': old_node.id, 'new_type_id': new_type_id, 'entity_ids': tuple(entity_ids) } if root.name in app.config['PROPERTY_TYPES']: Db.move_link_type(data) else: Db.move_entity_type(data) else: delete_ids = entity_ids # No new type was selected so delete all links if delete_ids: if root.name in app.config['PROPERTY_TYPES']: Db.remove_link_type(old_node.id, delete_ids) else: Db.remove_entity_type(old_node.id, delete_ids)
def get_linked_entities(id_: int, codes: Union[str, List[str]], inverse: bool = False, nodes: bool = False) -> List['Entity']: from openatlas.models.entity import Entity codes = codes if isinstance(codes, list) else [codes] return Entity.get_by_ids(Db.get_linked_entities(id_, codes, inverse), nodes=nodes)
def get_linked_entities(id_: int, codes: Union[str, list[str]], inverse: bool = False, types: bool = False) -> list[Entity]: from openatlas.models.entity import Entity codes = codes if isinstance(codes, list) else [codes] return Entity.get_by_ids(Db.get_linked_entities_inverse( id_, codes) if inverse else Db.get_linked_entities(id_, codes), types=types)
def get_links(entities: Union[int, list[int]], codes: Union[str, list[str], None] = None, inverse: bool = False) -> list[Link]: from openatlas.models.entity import Entity entity_ids = set() result = Db.get_links( entities, codes if isinstance(codes, list) else [str(codes)], inverse) for row in result: entity_ids.add(row['domain_id']) entity_ids.add(row['range_id']) linked_entities = { entity.id: entity for entity in Entity.get_by_ids(entity_ids, types=True) } links = [] for row in result: links.append( Link(row, domain=linked_entities[row['domain_id']], range_=linked_entities[row['range_id']])) return links
def member_insert(origin_id: int, code: str = 'member') -> Union[str, Response]: origin = Entity.get_by_id(origin_id) form = build_form('actor_function', code=code) form.member_origin_id.data = origin.id if form.validate_on_submit(): Transaction.begin() try: member_field = getattr(form, 'actor') \ if code == 'member' else getattr(form, 'group') for actor in Entity.get_by_ids(ast.literal_eval( member_field.data)): if code == 'membership': link_ = Link.get_by_id( actor.link('P107', origin, form.description.data)[0]) else: link_ = Link.get_by_id( origin.link('P107', actor, form.description.data)[0]) link_.set_dates(process_form_dates(form)) link_.type = get_link_type(form) link_.update() Transaction.commit() flash(_('entity created'), 'info') except Exception as e: # pragma: no cover Transaction.rollback() logger.log('error', 'database', 'transaction failed', e) flash(_('error transaction'), 'error') if hasattr(form, 'continue_') and form.continue_.data == 'yes': return redirect( url_for('member_insert', origin_id=origin_id, code=code)) return redirect(f"{url_for('view', id_=origin.id)}" f"#tab-member{'' if code == 'member' else '-of'}") return render_template( 'display_form.html', form=form, crumbs=[[_('actor'), url_for('index', view='actor')], origin, _('member')])
def form_string_to_entity_list(string: str) -> list[Entity]: ids = ast.literal_eval(string) ids = [int(id_) for id_ in ids] if isinstance(ids, list) else [int(ids)] return Entity.get_by_ids(ids)
def get_entities_by_ids(ids: list[int]) -> list[Entity]: return Entity.get_by_ids(ids, types=True, aliases=True)
def get_entities_by_ids(ids: List[int]) -> List[Entity]: try: entity = Entity.get_by_ids(ids, nodes=True, aliases=True) except Exception: raise EntityDoesNotExistError return entity