def method_step(filename=None, node_id=None): eml_node = load_eml(filename=filename) dataset_node = eml_node.find_child(names.DATASET) if dataset_node: methods_node = dataset_node.find_child(names.METHODS) else: dataset_node = Node(names.DATASET, parent=eml_node) add_child(eml_node, dataset_node) if not methods_node: methods_node = Node(names.METHODS, parent=dataset_node) add_child(dataset_node, methods_node) form = MethodStepForm(filename=filename, node_id=node_id) # Process POST if request.method == 'POST' and BTN_CANCEL in request.form: url = url_for(PAGE_METHOD_STEP_SELECT, filename=filename) return redirect(url) if request.method == 'POST' and form.validate_on_submit(): new_page = PAGE_METHOD_STEP_SELECT # Save or Back sends us back to the list of method steps form_value = request.form form_dict = form_value.to_dict(flat=False) if form_dict: for key in form_dict: val = form_dict[key][0] # value is the first list element new_page = check_val_for_hidden_buttons( val, new_page, PAGE_METHOD_STEP) submit_type = None if is_dirty_form(form): submit_type = 'Save Changes' if submit_type == 'Save Changes': description = form.description.data valid, msg = is_valid_xml_fragment(description, names.MAINTENANCE) if not valid: flash(invalid_xml_error_message(msg, False, names.DESCRIPTION), 'error') return render_get_method_step_page(eml_node, form, filename) instrumentation = form.instrumentation.data data_sources = form.data_sources.data method_step_node = Node(names.METHODSTEP, parent=methods_node) create_method_step(method_step_node, description, instrumentation, data_sources, data_sources_marker_begin, data_sources_marker_end) if node_id and len(node_id) != 1: old_method_step_node = Node.get_node_instance(node_id) if old_method_step_node: method_step_parent_node = old_method_step_node.parent method_step_parent_node.replace_child( old_method_step_node, method_step_node) else: msg = f"No methodStep node found in the node store with node id {node_id}" raise Exception(msg) else: add_child(methods_node, method_step_node) save_both_formats(filename=filename, eml_node=eml_node) url = url_for(new_page, filename=filename) return redirect(url) # Process GET if node_id == '1': form.init_md5() else: method_step_nodes = methods_node.find_all_children(names.METHODSTEP) if method_step_nodes: for ms_node in method_step_nodes: if node_id == ms_node.id: populate_method_step_form(form, ms_node) break return render_get_method_step_page(eml_node, form, filename)
def responsible_party(filename=None, node_id=None, method=None, node_name=None, back_page=None, title=None, next_page=None, save_and_continue=False, help=None, project_node_id=None): if BTN_CANCEL in request.form: if not project_node_id: url = url_for(back_page, filename=filename) else: url = url_for(back_page, filename=filename, project_node_id=project_node_id) return redirect(url) form = ResponsiblePartyForm(filename=filename) eml_node = load_eml(filename=filename) dataset_node = eml_node.find_child(names.DATASET) if not dataset_node: dataset_node = Node(names.DATASET, parent=eml_node) add_child(eml_node, dataset_node) parent_node = dataset_node role = False new_page = select_new_page(back_page, next_page) # new_page = back_page form_value = request.form form_dict = form_value.to_dict(flat=False) url = select_post(filename, form, form_dict, 'POST', PAGE_PUBLISHER, PAGE_MAINTENANCE, PAGE_PUBLICATION_INFO, PAGE_PUBLISHER, project_node_id=project_node_id) # If this is an associatedParty or a project personnel element, # set role to True so it will appear as a form field. if node_name == names.ASSOCIATEDPARTY or node_name == names.PERSONNEL: role = True # If this is a project personnel party, place it under the # project node, not under the dataset node if node_name == names.PERSONNEL: if not project_node_id: project_node = dataset_node.find_child(names.PROJECT) if not project_node: project_node = Node(names.PROJECT, parent=dataset_node) add_child(dataset_node, project_node) parent_node = project_node else: parent_node = Node.get_node_instance(project_node_id) # Process POST save = False if is_dirty_form(form): save = True if form.validate_on_submit(): if save: salutation = form.salutation.data gn = form.gn.data mn = form.mn.data sn = form.sn.data user_id = form.user_id.data organization = form.organization.data org_id = form.org_id.data org_id_type = form.org_id_type.data position_name = form.position_name.data address_1 = form.address_1.data address_2 = form.address_2.data city = form.city.data state = form.state.data postal_code = form.postal_code.data country = form.country.data phone = form.phone.data fax = form.fax.data email = form.email.data online_url = form.online_url.data role = form.role.data rp_node = Node(node_name, parent=parent_node) create_responsible_party(rp_node, filename, salutation, gn, mn, sn, user_id, organization, org_id, org_id_type, position_name, address_1, address_2, city, state, postal_code, country, phone, fax, email, online_url, role) if node_id and len(node_id) != 1: old_rp_node = Node.get_node_instance(node_id) if old_rp_node: old_rp_parent_node = old_rp_node.parent old_rp_parent_node.replace_child(old_rp_node, rp_node) else: msg = f"No node found in the node store with node id {node_id}" raise Exception(msg) else: add_child(parent_node, rp_node) save_both_formats(filename=filename, eml_node=eml_node) # flash(f"Changes to the '{node_name}' element have been saved.") # There is at most only one publisher element, so we don't have a # list of publishers to navigate back to. Stay on this page after # saving changes. # FIXME if node_name == names.PUBLISHER: new_page = PAGE_PUBLICATION_INFO if node_name == names.PUBLISHER: return redirect(url) elif new_page == PAGE_PROJECT_PERSONNEL_SELECT: return redirect( url_for(new_page, filename=filename, project_node_id=project_node_id)) else: return redirect( url_for(new_page, filename=filename, node_id=project_node_id)) # Process GET if node_id == '1': form.init_md5() else: if parent_node: rp_nodes = parent_node.find_all_children(child_name=node_name) if rp_nodes: for rp_node in rp_nodes: if node_id == rp_node.id: populate_responsible_party_form(form, rp_node) if project_node_id: title = 'Related ' + title help = get_helps([node_name]) return render_template('responsible_party.html', title=title, node_name=node_name, form=form, role=role, next_page=next_page, save_and_continue=save_and_continue, help=help)