def taxonomic_coverage_select(filename=None): form = TaxonomicCoverageSelectForm(filename=filename) # Process POST if request.method == 'POST': form_value = request.form form_dict = form_value.to_dict(flat=False) url = select_post(filename, form, form_dict, 'POST', PAGE_TAXONOMIC_COVERAGE_SELECT, PAGE_TEMPORAL_COVERAGE_SELECT, PAGE_MAINTENANCE, PAGE_TAXONOMIC_COVERAGE) return redirect(url) # Process GET title = "Taxonomic Coverage" txc_list = [] eml_node = load_eml(filename=filename) if eml_node: dataset_node = eml_node.find_child(names.DATASET) if dataset_node: txc_list = list_taxonomic_coverages(dataset_node) set_current_page('taxonomic_coverage') help = [get_help('taxonomic_coverages')] return render_template('taxonomic_coverage_select.html', title=title, txc_list=txc_list, form=form, help=help)
def geographic_coverage_select(filename=None): form = GeographicCoverageSelectForm(filename=filename) # Process POST if request.method == 'POST': form_value = request.form form_dict = form_value.to_dict(flat=False) url = select_post(filename, form, form_dict, 'POST', PAGE_GEOGRAPHIC_COVERAGE_SELECT, PAGE_INTELLECTUAL_RIGHTS, PAGE_TEMPORAL_COVERAGE_SELECT, PAGE_GEOGRAPHIC_COVERAGE) return redirect(url) # Process GET gc_list = [] title = "Geographic Coverage" eml_node = load_eml(filename=filename) if eml_node: dataset_node = eml_node.find_child(names.DATASET) if dataset_node: gc_list = list_geographic_coverages(dataset_node) set_current_page('geographic_coverage') help = get_helps(['geographic_coverages', 'geographic_coverages_csv_file']) return render_template('geographic_coverage_select.html', title=title, gc_list=gc_list, form=form, help=help)
def project_personnel_select(filename=None, node_id=None): form = ResponsiblePartySelectForm(filename=filename) # Process POST if request.method == 'POST': form_value = request.form form_dict = form_value.to_dict(flat=False) url = select_post(filename, form, form_dict, 'POST', PAGE_PROJECT_PERSONNEL_SELECT, PAGE_PROJECT, PAGE_PROJECT, PAGE_PROJECT_PERSONNEL, project_node_id=node_id) return redirect(url) # Process GET help = [get_help('project_personnel')] return rp_select_get(filename=filename, form=form, rp_name='personnel', rp_singular=non_breaking('Project Personnel'), rp_plural=non_breaking('Project Personnel'), node_id=node_id, help=help)
def contact_select(filename=None): form = ResponsiblePartySelectForm(filename=filename) # Process POST if request.method == 'POST': form_value = request.form form_dict = form_value.to_dict(flat=False) url = select_post(filename, form, form_dict, 'POST', PAGE_CONTACT_SELECT, PAGE_CREATOR_SELECT, PAGE_ASSOCIATED_PARTY_SELECT, PAGE_CONTACT) return redirect(url) # Process GET set_current_page('contact') help = [get_help('contacts')] return rp_select_get(filename=filename, form=form, rp_name='contact', rp_singular='Contact', rp_plural='Contacts', help=help)
def creator_select(filename=None): form = ResponsiblePartySelectForm(filename=filename) # Process POST if request.method == 'POST': form_value = request.form form_dict = form_value.to_dict(flat=False) url = select_post(filename, form, form_dict, 'POST', PAGE_CREATOR_SELECT, PAGE_TITLE, PAGE_CONTACT_SELECT, PAGE_CREATOR) return redirect(url) # Process GET set_current_page('creator') help = [get_help('creators')] return rp_select_get(filename=filename, form=form, rp_name=names.CREATOR, rp_singular='Creator', rp_plural='Creators', help=help)
def metadata_provider_select(filename=None): form = ResponsiblePartySelectForm(filename=filename) # Process POST if request.method == 'POST': form_value = request.form form_dict = form_value.to_dict(flat=False) url = select_post(filename, form, form_dict, 'POST', PAGE_METADATA_PROVIDER_SELECT, PAGE_ASSOCIATED_PARTY_SELECT, PAGE_ABSTRACT, PAGE_METADATA_PROVIDER) return redirect(url) # Process GET set_current_page('metadata_provider') help = [get_help('metadata_providers')] return rp_select_get(filename=filename, form=form, rp_name=names.METADATAPROVIDER, rp_singular=non_breaking('Metadata Provider'), rp_plural=non_breaking('Metadata Providers'), help=help)
def associated_party_select(filename=None): form = ResponsiblePartySelectForm(filename=filename) # Process POST if request.method == 'POST': form_value = request.form form_dict = form_value.to_dict(flat=False) url = select_post(filename, form, form_dict, 'POST', PAGE_ASSOCIATED_PARTY_SELECT, PAGE_CONTACT_SELECT, PAGE_METADATA_PROVIDER_SELECT, PAGE_ASSOCIATED_PARTY) return redirect(url) # Process GET set_current_page('associated_party') help = [get_help('associated_parties')] return rp_select_get(filename=filename, form=form, rp_name=names.ASSOCIATEDPARTY, rp_singular=non_breaking('Associated Party'), rp_plural=non_breaking('Associated Parties'), help=help)
def funding_award(filename=None, node_id=None, project_node_id=None): form = AwardForm(filename=filename) eml_node = load_eml(filename=filename) if not project_node_id: project_node = eml_node.find_single_node_by_path( [names.DATASET, names.PROJECT]) else: project_node = Node.get_node_instance(project_node_id) if request.method == 'POST': form_value = request.form form_dict = form_value.to_dict(flat=False) if request.method == 'POST' and BTN_CANCEL in request.form: url = url_for(PAGE_FUNDING_AWARD_SELECT, filename=filename, node_id=project_node_id) return redirect(url) # if request.method == 'POST' and form.validate_on_submit(): if request.method == 'POST': next_page = PAGE_FUNDING_AWARD_SELECT submit_type = None if is_dirty_form(form): submit_type = 'Save Changes' # flash(f'submit_type: {submit_type}') if submit_type == 'Save Changes': funder_name = form.funder_name.data award_title = form.award_title.data funder_identifier = form.funder_identifier.data award_number = form.award_number.data award_url = form.award_url.data award_node = Node(names.AWARD, parent=project_node) create_funding_award(award_node, funder_name, award_title, funder_identifier, award_number, award_url) if node_id and len(node_id) != 1: old_award_node = Node.get_node_instance(node_id) if old_award_node: award_parent_node = old_award_node.parent award_parent_node.replace_child(old_award_node, award_node) else: msg = f"No funding award node found in the node store with node id {node_id}" raise Exception(msg) else: add_child(project_node, award_node) save_both_formats(filename=filename, eml_node=eml_node) url = select_post(filename, form, form_dict, 'POST', PAGE_FUNDING_AWARD_SELECT, PAGE_PROJECT, PAGE_FUNDING_AWARD_SELECT, PAGE_FUNDING_AWARD, project_node_id=project_node_id) return redirect(url) # Process GET if not project_node_id: title = 'Project Funding Award' related_project = False else: title = 'Related Project Funding Award' related_project = True if node_id == '1': form.init_md5() else: award_nodes = project_node.find_all_children(names.AWARD) if award_nodes: for award_node in award_nodes: if node_id == award_node.id: populate_award_form(form, award_node) break set_current_page('project') help = [ get_help('award'), get_help('funder_name'), get_help('award_title'), get_help('funder_identifiers'), get_help('award_number'), get_help('award_url') ] return render_template('award.html', title=title, form=form, help=help, related_project=related_project)
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, 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 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, 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_for(new_page, filename=filename, node_id=project_node_id)) else: return redirect(url) # 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)