def get_entities_linked_to_special_type(id_: int) -> list[Entity]: domain_ids = [ link_['domain_id'] for link_ in Link.get_links_by_type(g.types[id_]) ] range_ids = [ link_['range_id'] for link_ in Link.get_links_by_type(g.types[id_]) ] return get_entities_by_ids(range_ids + domain_ids)
def get_special_node(id_: int, data: list[int]) -> list[int]: for link_ in Link.get_links_by_type(g.types[id_]): data.append(link_['domain_id']) data.append(link_['range_id']) for sub_id in g.types[id_].subs: GetTypeEntitiesAll.get_special_node(sub_id, data) return data
def build_move_form(type_: Type) -> FlaskForm: class Form(FlaskForm): is_type_form = HiddenField() checkbox_values = HiddenField() selection = SelectMultipleField( '', [InputRequired()], coerce=int, option_widget=widgets.CheckboxInput(), widget=widgets.ListWidget(prefix_label=False)) save = SubmitField(uc_first(_('move entities'))) root = g.types[type_.root[0]] setattr(Form, str(root.id), TreeField(str(root.id))) form = Form(obj=type_) choices = [] if root.class_.name == 'administrative_unit': for entity in type_.get_linked_entities('P89', True): place = entity.get_linked_entity('P53', True) if place: choices.append((entity.id, place.name)) elif root.name in app.config['PROPERTY_TYPES']: for row in Link.get_links_by_type(type_): domain = Entity.get_by_id(row['domain_id']) range_ = Entity.get_by_id(row['range_id']) choices.append((row['id'], domain.name + ' - ' + range_.name)) else: for entity in type_.get_linked_entities('P2', True): choices.append((entity.id, entity.name)) form.selection.choices = choices return form
def add_tabs_for_type(entity: Type) -> dict[str, Tab]: tabs = { 'subs': Tab('subs', entity=entity), 'entities': Tab('entities', entity=entity)} for sub_id in entity.subs: sub = g.types[sub_id] tabs['subs'].table.rows.append([ link(sub), sub.count, sub.description]) if entity.category == 'value': tabs['entities'].table.header = \ [_('name'), _('value'), _('class'), _('info')] for item in entity.get_linked_entities( ['P2', 'P89'], inverse=True, types=True): if item.class_.name in ['location', 'reference_system']: continue # pragma: no cover if item.class_.name == 'object_location': item = item.get_linked_entity_safe('P53', inverse=True) data = [link(item)] if entity.category == 'value': data.append(format_number(item.types[entity])) data.append(item.class_.label) data.append(item.description) tabs['entities'].table.rows.append(data) if not tabs['entities'].table.rows: # If no entities available get links with this type_id tabs['entities'].table.header = [_('domain'), _('range')] for row in Link.get_links_by_type(entity): tabs['entities'].table.rows.append([ link(Entity.get_by_id(row['domain_id'])), link(Entity.get_by_id(row['range_id']))]) return tabs
def get_entities_linked_to_special_type_recursive( id_: int, data: list[int]) -> list[int]: for link_ in Link.get_links_by_type(g.types[id_]): data.append(link_['domain_id']) data.append(link_['range_id']) for sub_id in g.types[id_].subs: get_entities_linked_to_special_type_recursive(sub_id, data) return data