Beispiel #1
0
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')])
Beispiel #2
0
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'))])
Beispiel #3
0
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')])
Beispiel #4
0
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')])
Beispiel #5
0
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')])
Beispiel #6
0
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')])
Beispiel #7
0
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
Beispiel #8
0
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')])
Beispiel #9
0
 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
Beispiel #10
0
 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()]
Beispiel #11
0
 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()]