def relation_update(link_: Link, domain: Entity, range_: Entity, origin: Entity) -> Union[str, Response]: origin = range_ if origin.id == range_.id else domain related = range_ if origin.id == domain.id else domain form = build_form('actor_actor_relation', link_) if form.validate_on_submit(): Transaction.begin() try: link_.delete() if form.inverse.data: link_ = Link.get_by_id( related.link('OA7', origin, form.description.data)[0]) else: link_ = Link.get_by_id( origin.link('OA7', related, form.description.data)[0]) link_.set_dates(process_form_dates(form)) link_.type = get_link_type(form) link_.update() Transaction.commit() flash(_('info update'), 'info') except Exception as e: # pragma: no cover Transaction.rollback() logger.log('error', 'database', 'transaction failed', e) flash(_('error transaction'), 'error') return redirect(f"{url_for('view', id_=origin.id)}#tab-relation") if origin.id == range_.id: form.inverse.data = True return render_template( 'display_form.html', form=form, title=_('relation'), crumbs=[[_('actor'), url_for('index', view='actor')], origin, related, _('edit')])
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 member_update(id_: int, origin_id: int) -> Union[str, Response]: link_ = Link.get_by_id(id_) domain = Entity.get_by_id(link_.domain.id) range_ = Entity.get_by_id(link_.range.id) origin = range_ if origin_id == range_.id else domain form = build_form('actor_function', link_) if form.validate_on_submit(): Transaction.begin() try: link_.delete() link_ = Link.get_by_id( domain.link('P107', range_, 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') return redirect( f"{url_for('view', id_=origin.id)}" f"#tab-member{'-of' if origin.id == range_.id else ''}") form.save.label.text = _('save') related = range_ if origin_id == domain.id else domain return render_template( 'display_form.html', form=form, crumbs=[[_('actor'), url_for('index', view='actor')], origin, related, _('edit')])
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 reference_link_update(link_id: int, origin_id: int) -> Union[str, Response]: link_ = Link.get_by_id(link_id) origin = Entity.get_by_id(origin_id) form = AddReferenceForm() del form.reference if form.validate_on_submit(): link_.description = form.page.data link_.update() flash(_('info update'), 'info') tab = '#tab-' + (link_.range.class_.view if origin.class_.view == 'reference' else 'reference') return redirect(url_for('entity_view', id_=origin.id) + tab) form.save.label.text = _('save') form.page.data = link_.description if link_.domain.class_.name == 'external_reference': form.page.label.text = uc_first(_('link text')) linked_object = link_.domain if link_.domain.id != origin.id else link_.range return render_template('display_form.html', form=form, crumbs=[[ _(origin.class_.view), url_for('index', view=origin.class_.view) ], origin, linked_object, _('edit')])
def involvement_update(id_: int, origin_id: int) -> Union[str, Response]: link_ = Link.get_by_id(id_) form = build_form('involvement', link_) form.activity.choices = [('P11', g.properties['P11'].name)] event = Entity.get_by_id(link_.domain.id) actor = Entity.get_by_id(link_.range.id) origin = event if origin_id == event.id else actor if event.class_.name in ['acquisition', 'activity']: form.activity.choices.append(('P14', g.properties['P14'].name)) if event.class_.name == 'acquisition': form.activity.choices.append(('P22', g.properties['P22'].name)) form.activity.choices.append(('P23', g.properties['P23'].name)) if form.validate_on_submit(): Transaction.begin() try: link_.delete() link_ = Link.get_by_id( event.link(form.activity.data, actor, form.description.data)[0]) link_.set_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') tab = 'actor' if origin.class_.view == 'event' else 'event' return redirect(f"{url_for('entity_view', id_=origin.id)}#tab-{tab}") form.save.label.text = _('save') form.activity.data = link_.property.code form.description.data = link_.description return render_template('display_form.html', origin=origin, form=form, crumbs=[[ _(origin.class_.view), url_for('index', view=origin.class_.view) ], origin, event if origin_id != event.id else actor, _('edit')])
def link_update(id_: int, origin_id: int) -> Union[str, Response]: link_ = Link.get_by_id(id_) domain = Entity.get_by_id(link_.domain.id) range_ = Entity.get_by_id(link_.range.id) origin = Entity.get_by_id(origin_id) if 'reference' in [domain.class_.view, range_.class_.view]: return reference_link_update(link_, origin) if 'event' in [domain.class_.view, range_.class_.view]: return involvement_update(link_, origin) if domain.class_.view == 'actor' and range_.class_.view == 'actor': return relation_update(link_, domain, range_, origin) abort(403) # pragma: no cover
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 test_dates(self) -> None: with app.app_context(): # type: ignore with app.test_request_context(): app.preprocess_request() # type: ignore # Create invalid dates for an actor and a relation link person = Entity.insert('person', 'Person') event = Entity.insert('activity', 'Event') person.begin_from = '2018-01-31' person.begin_to = '2018-01-01' person.update() involvement = Link.get_by_id(event.link('P11', person)[0]) involvement.begin_from = '2017-01-31' involvement.begin_to = '2017-01-01' involvement.end_from = '2017-01-01' involvement.update() rv = self.app.get(url_for('admin_check_dates')) assert b'<span class="tab-counter">' in rv.data
def get_invalid_link_dates() -> List['Link']: """ Search for links with invalid date combinations, e.g. begin after end""" from openatlas.models.link import Link return [Link.get_by_id(row['id']) for row in Db.get_invalid_link_dates()]
def invalid_involvement_dates() -> List['Link']: """ Search invalid event participation dates and return the actors e.g. attending person was born after the event ended""" from openatlas.models.link import Link return [Link.get_by_id(row['id']) for row in Db.invalid_involvement_dates()]