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
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)
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
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)
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
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
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