def build_move_form(node: Node) -> FlaskForm: class Form(FlaskForm): # type: ignore is_node_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.nodes[node.root[-1]] setattr(Form, str(root.id), TreeField(str(root.id))) form = Form(obj=node) choices = [] if root.class_.name == 'administrative_unit': for entity in node.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_entities_by_node(node): 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 node.get_linked_entities('P2', True): choices.append((entity.id, entity.name)) form.selection.choices = choices return form
def build_move_form(form: Any, node: Node) -> FlaskForm: root = g.nodes[node.root[-1]] setattr(form, str(root.id), TreeField(str(root.id))) form_instance = form(obj=node) # Delete custom fields except the ones specified for the form delete_list = [ ] # Can't delete fields in the loop so creating a list for later deletion for field in form_instance: if type(field) is TreeField and int(field.id) != root.id: delete_list.append(field.id) for item in delete_list: delattr(form_instance, item) choices = [] if root.class_.code == 'E53': for entity in node.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 LinkMapper.get_entities_by_node(node): domain = EntityMapper.get_by_id(row.domain_id) range_ = EntityMapper.get_by_id(row.range_id) choices.append((row.id, domain.name + ' - ' + range_.name)) else: for entity in node.get_linked_entities('P2', True): choices.append((entity.id, entity.name)) form_instance.selection.choices = choices return form_instance