def objects_management(): add_node_form = AddNode(request.form) add_link_form = AddLink(request.form) all_nodes = Node.choices() add_link_form.source.choices = add_link_form.destination.choices = all_nodes if request.method == 'POST': file = request.files['file'] if allowed_file(secure_filename(file.filename), {'xls', 'xlsx'}): book = open_workbook(file_contents=file.read()) for obj_type, cls in object_class.items(): try: sheet = book.sheet_by_name(obj_type) # if the sheet cannot be found, there's nothing to import except XLRDError: continue properties = sheet.row_values(0) for row_index in range(1, sheet.nrows): kwargs = dict(zip(properties, sheet.row_values(row_index))) kwargs['type'] = obj_type object_factory(**kwargs) db.session.commit() return render_template( 'object_management.html', names=pretty_names, node_fields=node_public_properties, nodes=Node.serialize(), link_fields=link_public_properties, links=Link.serialize(), add_node_form=add_node_form, add_link_form=add_link_form )
def view(view_type): add_node_form = AddNode(request.form) add_link_form = AddLink(request.form) all_nodes = Node.choices() add_link_form.source.choices = all_nodes add_link_form.destination.choices = all_nodes view_options_form = ViewOptionsForm(request.form) google_earth_form = GoogleEarthForm(request.form) scheduling_form = SchedulingForm(request.form) scheduling_form.job.choices = Job.choices() scheduling_form.nodes.choices = all_nodes scheduling_form.pools.choices = Pool.choices() labels = {'node': 'name', 'link': 'name'} if 'view_options' in request.form: # update labels labels = { 'node': request.form['node_label'], 'link': request.form['link_label'] } # for the sake of better performances, the view defaults to markercluster # if there are more than 2000 nodes view = 'leaflet' if len(Node.query.all()) < 2000 else 'markercluster' if 'view' in request.form: view = request.form['view'] # name to id name_to_id = {node.name: id for id, node in enumerate(Node.query.all())} return render_template( f'{view_type}_view.html', pools=Pool.query.all(), parameters=Parameters.query.one().serialized, view=view, scheduling_form=scheduling_form, view_options_form=view_options_form, google_earth_form=google_earth_form, add_node_form=add_node_form, add_link_form=add_link_form, node_fields=node_public_properties, link_fields=link_public_properties, labels=labels, names=pretty_names, subtypes=list(node_class), name_to_id=name_to_id, nodes=Node.serialize(), links=Link.serialize() )