Exemplo n.º 1
0
def add_tabs_for_event(entity: Entity) -> dict[str, Tab]:
    tabs = {}
    for name in ['subs', 'source', 'actor']:
        tabs[name] = Tab(name, entity=entity)
    for sub_event in entity.get_linked_entities(
            'P9',
            inverse=True,
            types=True):
        tabs['subs'].table.rows.append(get_base_table_data(sub_event))
    tabs['actor'].table.header.insert(5, _('activity'))
    for link_ in entity.get_links(['P11', 'P14', 'P22', 'P23']):
        first = link_.first
        if not link_.first and entity.first:
            first = f'<span class="inactive">{entity.first}</span>'
        last = link_.last
        if not link_.last and entity.last:
            last = f'<span class="inactive">{entity.last}</span>'
        tabs['actor'].table.rows.append([
            link(link_.range),
            link_.range.class_.label,
            link_.type.name if link_.type else '',
            first,
            last,
            g.properties[link_.property.code].name_inverse,
            link_.description,
            edit_link(
                url_for('link_update', id_=link_.id, origin_id=entity.id)),
            remove_link(link_.range.name, link_, entity, 'actor')])
    entity.linked_places = [
        location.get_linked_entity_safe('P53', True) for location
        in entity.get_linked_entities(['P7', 'P26', 'P27'])]
    return tabs
Exemplo n.º 2
0
def populate_reference_systems(form: FlaskForm, item: Entity) -> None:
    system_links = {
        link_.domain.id: link_
        for link_ in item.get_links('P67', True)
        if link_.domain.class_.name == 'reference_system'
    }  # Can't use isinstance here
    for field in form:
        if field.id.startswith('reference_system_id_'):
            system_id = int(field.id.replace('reference_system_id_', ''))
            if system_id in system_links:
                field.data = system_links[system_id].description
                getattr(form, 'reference_system_precision_{id}'.format(
                    id=system_id)).data = str(system_links[system_id].type.id)
Exemplo n.º 3
0
def add_tabs_for_file(entity: Entity) -> dict[str, Tab]:
    tabs = {}
    for name in [
            'source', 'event', 'actor', 'place', 'feature',
            'stratigraphic_unit', 'artifact', 'human_remains', 'reference',
            'type']:
        tabs[name] = Tab(name, entity=entity)
    entity.image_id = entity.id if get_file_path(entity.id) else None
    for link_ in entity.get_links('P67'):
        range_ = link_.range
        data = get_base_table_data(range_)
        data.append(
            remove_link(range_.name, link_, entity, range_.class_.name))
        tabs[range_.class_.view].table.rows.append(data)
    for link_ in entity.get_links('P67', True):
        data = get_base_table_data(link_.domain)
        data.append(link_.description)
        data.append(edit_link(
            url_for('link_update', id_=link_.id, origin_id=entity.id)))
        data.append(remove_link(link_.domain.name, link_, entity, 'reference'))
        tabs['reference'].table.rows.append(data)
    return tabs
Exemplo n.º 4
0
def populate_reference_systems(form: FlaskForm, item: Entity) -> None:
    system_links = {
        # Can't use isinstance for class check here
        link_.domain.id: link_
        for link_ in item.get_links('P67', True)
        if link_.domain.class_.name == 'reference_system'
    }
    for key in form.data:
        field = getattr(form, key)
        if field.id.startswith('reference_system_id_'):
            system_id = int(field.id.replace('reference_system_id_', ''))
            if system_id in system_links:
                field.data = system_links[system_id].description
                precision_field = getattr(
                    form, f'reference_system_precision_{system_id}')
                precision_field.data = str(system_links[system_id].type.id)
Exemplo n.º 5
0
def add_tabs_for_source(entity: Entity) -> dict[str, Tab]:
    tabs = {}
    for name in [
            'actor', 'artifact', 'feature', 'event', 'human_remains', 'place',
            'stratigraphic_unit', 'text'
    ]:
        tabs[name] = Tab(name, entity=entity)
    for text in entity.get_linked_entities('P73', types=True):
        tabs['text'].table.rows.append([
            link(text),
            next(iter(text.types)).name if text.types else '', text.description
        ])
    for link_ in entity.get_links('P67'):
        range_ = link_.range
        data = get_base_table_data(range_)
        data.append(remove_link(range_.name, link_, entity,
                                range_.class_.name))
        tabs[range_.class_.view].table.rows.append(data)
    return tabs
Exemplo n.º 6
0
 def get_geonames_link(object_: Entity) -> Optional[Link]:
     for link_ in object_.get_links('P67', inverse=True):
         if link_.domain.system_type == 'external reference geonames':
             return link_
     return None
Exemplo n.º 7
0
def add_tabs_for_actor(
        entity: Entity,
        event_links: list[Link]) -> dict[str, Tab]:
    tabs = {}
    for name in [
            'source', 'event', 'relation', 'member_of', 'member', 'artifact']:
        tabs[name] = Tab(name, entity=entity)
    for link_ in event_links:
        event = link_.domain
        link_.object_ = None  # Needed for first/last appearance
        for place in event.get_linked_entities(['P7', 'P26', 'P27']):
            object_ = place.get_linked_entity_safe('P53', True)
            entity.linked_places.append(object_)
            link_.object_ = object_
        first = link_.first
        if not link_.first and event.first:
            first = f'<span class="inactive">{event.first}</span>'
        last = link_.last
        if not link_.last and event.last:
            last = f'<span class="inactive">{event.last}</span>'
        data = [
            link(event),
            event.class_.label,
            _('moved')
            if link_.property.code == 'P25' else link(link_.type),
            first,
            last,
            link_.description]
        if link_.property.code == 'P25':
            data.append('')
        else:
            data.append(edit_link(
                url_for('link_update', id_=link_.id, origin_id=entity.id)))
        data.append(remove_link(link_.domain.name, link_, entity, 'event'))
        tabs['event'].table.rows.append(data)
    for link_ in entity.get_links('OA7') + entity.get_links('OA7', True):
        type_ = ''
        if entity.id == link_.domain.id:
            related = link_.range
            if link_.type:
                type_ = link(
                    link_.type.get_name_directed(),
                    url_for('view', id_=link_.type.id))
        else:
            related = link_.domain
            if link_.type:
                type_ = link(
                    link_.type.get_name_directed(True),
                    url_for('view', id_=link_.type.id))
        tabs['relation'].table.rows.append([
            type_,
            link(related),
            link_.first,
            link_.last,
            link_.description,
            edit_link(
                url_for('link_update', id_=link_.id, origin_id=entity.id)),
            remove_link(related.name, link_, entity, 'relation')])
    for link_ in entity.get_links('P107', True):
        data = [
            link(link_.domain),
            link(link_.type),
            link_.first,
            link_.last,
            link_.description,
            edit_link(
                url_for('member_update', id_=link_.id, origin_id=entity.id)),
            remove_link(link_.domain.name, link_, entity, 'member-of')]
        tabs['member_of'].table.rows.append(data)
    if entity.class_.name != 'group':
        del tabs['member']
    else:
        for link_ in entity.get_links('P107'):
            tabs['member'].table.rows.append([
                link(link_.range),
                link(link_.type),
                link_.first,
                link_.last,
                link_.description,
                edit_link(
                    url_for('member_update', id_=link_.id, origin_id=entity.id)
                ),
                remove_link(link_.range.name, link_, entity, 'member')])
    for link_ in entity.get_links('P52', True):
        data = [
            link(link_.domain),
            link_.domain.class_.label,
            link(link_.domain.standard_type),
            link_.domain.first,
            link_.domain.last,
            link_.domain.description]
        tabs['artifact'].table.rows.append(data)
    return tabs