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) if BTN_CLEAR in form_dict: clear_taxonomic_coverage(filename) # Fall through to GET else: 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: if not taxonomy_imported_from_xml(eml_node, filename): txc_list = list_taxonomic_coverages(dataset_node) set_current_page('taxonomic_coverage') help = [get_help('taxonomic_coverages'), get_help('taxonomy_imported_from_xml')] return render_template('taxonomic_coverage_select.html', title=title, txc_list=txc_list, imported_from_xml=taxonomy_imported_from_xml(eml_node, filename), form=form, help=help)
def render_get_maintenance_page(eml_node, form, filename): set_current_page('maintenance') help = [get_help('maintenance'), get_help('maintenance_description'), get_help('maintenance_freq')] return render_template('maintenance.html', title='Maintenance', filename=filename, model_has_complex_texttypes=model_has_complex_texttypes(eml_node), form=form, help=help)
def render_get_abstract_page(form, filename): eml_node = load_eml(filename) form.md5.data = form_md5(form) set_current_page('abstract') help = [get_help('abstract'), get_help('nav')] return render_template( 'abstract.html', title='Abstract', model_has_complex_texttypes=model_has_complex_texttypes(eml_node), filename=filename, form=form, help=help)
def render_get_method_step_page(eml_node, form, filename): set_current_page('method_step') help = [ get_help('method_step_description'), get_help('method_step_instrumentation'), get_help('method_step_data_sources') ] return render_template( 'method_step.html', title='Method Step', model_has_complex_texttypes=model_has_complex_texttypes(eml_node), form=form, filename=filename, help=help)
def temporal_coverage_select(filename=None): form = TemporalCoverageSelectForm(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_TEMPORAL_COVERAGE_SELECT, PAGE_GEOGRAPHIC_COVERAGE_SELECT, PAGE_TAXONOMIC_COVERAGE_SELECT, PAGE_TEMPORAL_COVERAGE) return redirect(url) # Process GET title = "Temporal Coverage" tc_list = [] eml_node = load_eml(filename=filename) if eml_node: dataset_node = eml_node.find_child(names.DATASET) if dataset_node: tc_list = list_temporal_coverages(dataset_node) set_current_page('temporal_coverage') help = [get_help('temporal_coverages')] return render_template('temporal_coverage_select.html', title=title, tc_list=tc_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 render_get_project_page(eml_node, form, filename, doing_related_project, project_node_id): set_current_page('project') if not doing_related_project: help = [get_help('project'), get_help('project_title')] else: help = [get_help('related_project'), get_help('project_title')] if not project_node_id: page_title = 'Project' else: page_title = 'Related Project' return render_template( 'project.html', title=page_title, filename=filename, model_has_complex_texttypes=model_has_complex_texttypes(eml_node), form=form, help=help)
def abstract(filename=None): form = AbstractForm(filename=filename) # Process POST if request.method == 'POST': if 'Next' in request.form: new_page = PAGE_KEYWORD_SELECT elif BTN_HIDDEN_CHECK in request.form: new_page = PAGE_CHECK elif BTN_HIDDEN_SAVE in request.form: new_page = PAGE_ABSTRACT elif BTN_HIDDEN_DOWNLOAD in request.form: new_page = PAGE_DOWNLOAD elif BTN_HIDDEN_NEW in request.form: new_page = PAGE_CREATE elif BTN_HIDDEN_OPEN in request.form: new_page = PAGE_OPEN elif BTN_HIDDEN_CLOSE in request.form: new_page = PAGE_CLOSE else: submit_type = None new_page = PAGE_KEYWORD_SELECT if form.validate_on_submit(): if is_dirty_form(form): abstract = add_paragraph_tags(form.abstract.data) create_abstract(filename=filename, abstract=abstract) return redirect(url_for(new_page, filename=filename)) # Process GET eml_node = load_eml(filename=filename) abstract_node = eml_node.find_single_node_by_path( [names.DATASET, names.ABSTRACT]) if abstract_node: form.abstract.data = remove_paragraph_tags(abstract_node.content) form.md5.data = form_md5(form) set_current_page('abstract') help = [get_help('abstract'), get_help('nav')] return render_template('abstract.html', title='Abstract', filename=filename, form=form, help=help)
def load_geo_coverage(filename): form = LoadDataForm() document = current_user.get_filename() uploads_folder = get_document_uploads_folder_name() # Process POST if request.method == 'POST' and BTN_CANCEL in request.form: url = url_for(PAGE_GEOGRAPHIC_COVERAGE_SELECT, filename=filename) return redirect(url) if request.method == 'POST' and form.validate_on_submit(): form_value = request.form form_dict = form_value.to_dict(flat=False) new_page = None 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_LOAD_GEO_COVERAGE) if new_page: url = url_for(new_page, filename=filename) return redirect(url) # Check if the post request has the file part if 'file' not in request.files: flash('No file part', 'error') return redirect(request.url) file = request.files['file'] if file: filename = secure_filename(file.filename) if filename is None or filename == '': flash('No selected file', 'error') elif allowed_data_file(filename): filepath = os.path.join(uploads_folder, filename) file.save(filepath) data_file = filename data_file_path = f'{uploads_folder}/{data_file}' try: load_geo_coverage_from_csv(data_file_path, document) log_usage(actions['LOAD_GEOGRAPHIC_COVERAGE'], filename) flash(f'Loaded {data_file}') except ValueError as ex: flash(f'Load CSV file failed. {ex.args[0]}', 'error') return redirect(url_for(PAGE_GEOGRAPHIC_COVERAGE_SELECT, filename=document)) # Process GET help = [get_help('geographic_coverages_csv_file')] return render_template('load_geo_coverage.html', form=form, help=help)
def render_get_intellectual_rights_page(form, filename, font_family): eml_node = load_eml(filename) form.md5.data = form_md5(form) set_current_page('intellectual_rights') help = [get_help('intellectual_rights')] return render_template( 'intellectual_rights.html', title='Intellectual Rights', font_family=font_family, model_has_complex_texttypes=model_has_complex_texttypes(eml_node), filename=filename, form=form, help=help)
def keyword_select_get(filename=None, form=None): # Process GET kw_list = [] title = 'Keywords' eml_node = load_eml(filename=filename) if eml_node: kw_list = list_keywords(eml_node) set_current_page('keyword') help = [get_help('keywords')] return render_template('keyword_select.html', title=title, filename=filename, kw_list=kw_list, form=form, 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 publisher(filename=None): method = request.method node_id = '1' if filename: eml_node = load_eml(filename=filename) dataset_node = eml_node.find_child(names.DATASET) if dataset_node: publisher_node = dataset_node.find_child(names.PUBLISHER) if publisher_node: node_id = publisher_node.id set_current_page('publisher') help = [get_help('publisher')] return responsible_party(filename=filename, node_id=node_id, method=method, node_name=names.PUBLISHER, back_page=PAGE_CONTACT_SELECT, title='Publisher', next_page=PAGE_PUBLICATION_INFO, save_and_continue=True, help=help)
def funding_award_select_get(filename=None, form=None, node_id=None): # Process GET title = 'Funding Awards' # entity_name = '' eml_node = load_eml(filename=filename) funding_award_list = list_funding_awards(eml_node, node_id) set_current_page('project') related_project = node_id is not None help = [get_help('awards')] return render_template('award_select.html', title=title, filename=filename, award_list=funding_award_list, form=form, help=help, related_project=related_project)
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 related_project_select_get(filename=None, form=None): # Process GET project_list = [] title = 'Related Projects' eml_node = load_eml(filename=filename) if eml_node: project_list = list_related_projects(eml_node) set_current_page('project') help = [get_help('related_project')] return render_template('related_project_select.html', title=title, filename=filename, project_list=project_list, form=form, 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 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 if val == BTN_HIDDEN_NEW: new_page = PAGE_CREATE break elif val == BTN_HIDDEN_OPEN: new_page = PAGE_OPEN break elif val == BTN_HIDDEN_CLOSE: new_page = PAGE_CLOSE break submit_type = None if is_dirty_form(form): submit_type = 'Save Changes' if submit_type == 'Save Changes': description = add_paragraph_tags(form.description.data) instrumentation = form.instrumentation.data method_step_node = Node(names.METHODSTEP, parent=methods_node) create_method_step(method_step_node, description, instrumentation) 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 set_current_page('method_step') help = [ get_help('method_step_description'), get_help('method_step_instrumentation') ] return render_template('method_step.html', title='Method Step', form=form, filename=filename, help=help)
def geographic_coverage(filename=None, node_id=None): form = GeographicCoverageForm(filename=filename) # Process POST if request.method == 'POST' and BTN_CANCEL in request.form: url = url_for(PAGE_GEOGRAPHIC_COVERAGE_SELECT, filename=filename) return redirect(url) if request.method == 'POST' and form.validate_on_submit(): submit_type = None if is_dirty_form(form): submit_type = 'Save Changes' form_value = request.form form_dict = form_value.to_dict(flat=False) new_page = PAGE_GEOGRAPHIC_COVERAGE_SELECT if form_dict: for key in form_dict: val = form_dict[key][0] # value is the first list element if val == BTN_HIDDEN_NEW: new_page = PAGE_CREATE break elif val == BTN_HIDDEN_OPEN: new_page = PAGE_OPEN break elif val == BTN_HIDDEN_CLOSE: new_page = PAGE_CLOSE break url = url_for(new_page, filename=filename) if submit_type == 'Save Changes': eml_node = load_eml(filename=filename) dataset_node = eml_node.find_child(names.DATASET) if not dataset_node: dataset_node = Node(names.DATASET) coverage_node = dataset_node.find_child(names.COVERAGE) if not coverage_node: coverage_node = Node(names.COVERAGE, parent=dataset_node) add_child(dataset_node, coverage_node) geographic_description = form.geographic_description.data wbc = form.wbc.data if form.wbc.data is not None else '' ebc = form.ebc.data if form.ebc.data is not None else '' nbc = form.nbc.data if form.nbc.data is not None else '' sbc = form.sbc.data if form.sbc.data is not None else '' gc_node = Node(names.GEOGRAPHICCOVERAGE, parent=coverage_node) create_geographic_coverage(gc_node, geographic_description, wbc, ebc, nbc, sbc) if node_id and len(node_id) != 1: old_gc_node = Node.get_node_instance(node_id) if old_gc_node: coverage_parent_node = old_gc_node.parent coverage_parent_node.replace_child(old_gc_node, gc_node) else: msg = f"No node found in the node store with node id {node_id}" raise Exception(msg) else: add_child(coverage_node, gc_node) if nbc and sbc and nbc < sbc: flash('North should be greater than or equal to South') url = (url_for(PAGE_GEOGRAPHIC_COVERAGE, filename=filename, node_id=gc_node.id)) if ebc and wbc and ebc < wbc: flash('East should be greater than or equal to West') url = (url_for(PAGE_GEOGRAPHIC_COVERAGE, filename=filename, node_id=gc_node.id)) save_both_formats(filename=filename, eml_node=eml_node) return redirect(url) # Process GET if node_id == '1': form.init_md5() else: eml_node = load_eml(filename=filename) dataset_node = eml_node.find_child(names.DATASET) if dataset_node: coverage_node = dataset_node.find_child(names.COVERAGE) if coverage_node: gc_nodes = coverage_node.find_all_children( names.GEOGRAPHICCOVERAGE) if gc_nodes: for gc_node in gc_nodes: if node_id == gc_node.id: populate_geographic_coverage_form(form, gc_node) set_current_page('geographic_coverage') help = [ get_help('geographic_coverages'), get_help('geographic_description'), get_help('bounding_coordinates') ] return render_template('geographic_coverage.html', title='Geographic Coverage', form=form, help=help)
def intellectual_rights(filename=None): form = IntellectualRightsForm(filename=filename) # Process POST # if request.method == 'POST' and form.validate_on_submit(): if request.method == 'POST': submit_type = None if is_dirty_form(form): submit_type = 'Save Changes' if submit_type == 'Save Changes': if form.intellectual_rights_radio.data == 'CC0': intellectual_rights = INTELLECTUAL_RIGHTS_CC0 elif form.intellectual_rights_radio.data == 'CCBY': intellectual_rights = INTELLECTUAL_RIGHTS_CC_BY else: intellectual_rights = form.intellectual_rights.data create_intellectual_rights(filename=filename, intellectual_rights=intellectual_rights) if BTN_HIDDEN_CHECK in request.form: new_page = PAGE_CHECK elif BTN_HIDDEN_SAVE in request.form: new_page = PAGE_INTELLECTUAL_RIGHTS elif BTN_HIDDEN_DOWNLOAD in request.form: new_page = PAGE_DOWNLOAD elif BTN_HIDDEN_NEW in request.form: new_page = PAGE_CREATE elif BTN_HIDDEN_OPEN in request.form: new_page = PAGE_OPEN elif BTN_HIDDEN_CLOSE in request.form: new_page = PAGE_CLOSE else: new_page = PAGE_GEOGRAPHIC_COVERAGE_SELECT return redirect(url_for(new_page, filename=filename)) # Process GET eml_node = load_eml(filename=filename) intellectual_rights_node = eml_node.find_single_node_by_path( [names.DATASET, names.INTELLECTUALRIGHTS]) if intellectual_rights_node: ir_content = intellectual_rights_node.content if ir_content == INTELLECTUAL_RIGHTS_CC0: form.intellectual_rights_radio.data = 'CC0' form.intellectual_rights.data = '' elif ir_content == INTELLECTUAL_RIGHTS_CC_BY: form.intellectual_rights_radio.data = 'CCBY' form.intellectual_rights.data = '' else: form.intellectual_rights_radio.data = "Other" form.intellectual_rights.data = intellectual_rights_node.content form.md5.data = form_md5(form) set_current_page('intellectual_rights') help = [get_help('intellectual_rights')] return render_template('intellectual_rights.html', title='Intellectual Rights', filename=filename, form=form, help=help)
def maintenance(filename=None): form = MaintenanceForm(filename=filename) eml_node = load_eml(filename=filename) if eml_node: 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) # Process POST if request.method == 'POST' and form.validate_on_submit(): save = False if is_dirty_form(form): save = True # flash(f'save: {save}') if save: description = add_paragraph_tags(form.description.data) update_frequency = form.update_frequency.data create_maintenance(dataset_node, description, update_frequency) save_both_formats(filename=filename, eml_node=eml_node) 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 if val == BTN_SAVE_AND_CONTINUE: new_page = PAGE_PUBLISHER elif val == BTN_HIDDEN_CHECK: new_page = PAGE_CHECK elif val == BTN_HIDDEN_SAVE: new_page = PAGE_PROJECT elif val == BTN_HIDDEN_DOWNLOAD: new_page = PAGE_DOWNLOAD elif val == BTN_HIDDEN_NEW: new_page = PAGE_CREATE elif val == BTN_HIDDEN_OPEN: new_page = PAGE_OPEN elif val == BTN_HIDDEN_CLOSE: new_page = PAGE_CLOSE return redirect(url_for(new_page, filename=filename)) # Process GET if dataset_node: maintenance_node = dataset_node.find_child(names.MAINTENANCE) if maintenance_node: populate_maintenance_form(form, maintenance_node) set_current_page('maintenance') help = [ get_help('maintenance'), get_help('maintenance_description'), get_help('maintenance_freq') ] return render_template('maintenance.html', title='Maintenance', filename=filename, form=form, help=help)
def project(filename=None, node_id=None): form = ProjectForm(filename=filename) eml_node = load_eml(filename=filename) if eml_node: 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) # Process POST if request.method == 'POST' and form.validate_on_submit(): save = False if is_dirty_form(form): save = True # flash(f'save: {save}') if 'Next' in request.form: if not node_id: new_page = PAGE_OTHER_ENTITY_SELECT else: new_page = PAGE_RELATED_PROJECT_SELECT elif BTN_PROJECT_PERSONNEL in request.form: new_page = PAGE_PROJECT_PERSONNEL_SELECT elif BTN_FUNDING_AWARDS in request.form: new_page = PAGE_FUNDING_AWARD_SELECT elif BTN_RELATED_PROJECTS in request.form: new_page = PAGE_RELATED_PROJECT_SELECT elif BTN_HIDDEN_CHECK in request.form: new_page = PAGE_CHECK elif BTN_HIDDEN_SAVE in request.form: new_page = PAGE_PROJECT elif BTN_HIDDEN_DOWNLOAD in request.form: new_page = PAGE_DOWNLOAD elif BTN_HIDDEN_NEW in request.form: new_page = PAGE_CREATE elif BTN_HIDDEN_OPEN in request.form: new_page = PAGE_OPEN elif BTN_HIDDEN_CLOSE in request.form: new_page = PAGE_CLOSE if save: title = form.title.data abstract = add_paragraph_tags(form.abstract.data) if not node_id: create_project(dataset_node, title, abstract) else: related_project_node = create_related_project( dataset_node, title, abstract, node_id) node_id = related_project_node.id save_both_formats(filename=filename, eml_node=eml_node) if not node_id: return redirect(url_for(new_page, filename=filename)) else: return redirect( url_for(new_page, filename=filename, node_id=node_id)) # Process GET if node_id == '1': form.init_md5() elif node_id: related_project_node = Node.get_node_instance(node_id) populate_project_form(form, related_project_node) elif dataset_node: project_node = dataset_node.find_child(names.PROJECT) populate_project_form(form, project_node) set_current_page('project') if not node_id: help = [get_help('project'), get_help('project_title')] else: help = [get_help('related_project'), get_help('project_title')] if not node_id: page_title = 'Project' else: page_title = 'Related Project' return render_template('project.html', title=page_title, filename=filename, form=form, 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 keyword(filename=None, node_id=None): 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) form = KeywordForm(filename=filename, node_id=node_id) form.init_keywords() # Process POST if request.method == 'POST' and BTN_CANCEL in request.form: url = url_for(PAGE_KEYWORD_SELECT, filename=filename) return redirect(url) # if request.method == 'POST' and form.validate_on_submit(): if request.method == 'POST': form_value = request.form form_dict = form_value.to_dict(flat=False) new_page = PAGE_KEYWORD_SELECT 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, new_page) submit_type = None if is_dirty_form(form): submit_type = 'Save Changes' # flash(f'submit_type: {submit_type}') if submit_type == 'Save Changes': keyword = form.keyword.data keyword_type = form.keyword_type.data keyword_thesaurus = form.keyword_thesaurus.data # If so thesaurus was specified, see if the LTER Controlled Vocabulary applies if not keyword_thesaurus: lter_keywords = get_keywords('LTER') if keyword in lter_keywords: keyword_thesaurus = 'LTER Controlled Vocabulary' keyword_set_nodes = [] eml_node.find_all_descendants(names.KEYWORDSET, keyword_set_nodes) keyword_set_node = None for kws_node in keyword_set_nodes: keyword_thesaurus_node = kws_node.find_child( names.KEYWORDTHESAURUS) if keyword_thesaurus_node and keyword_thesaurus_node.content == keyword_thesaurus: keyword_set_node = kws_node break if not keyword_thesaurus_node and not keyword_thesaurus: keyword_set_node = kws_node break if not keyword_set_node: keyword_set_node = Node(names.KEYWORDSET, parent=dataset_node) add_child(dataset_node, keyword_set_node) if keyword_thesaurus: keyword_thesaurus_node = Node(names.KEYWORDTHESAURUS, parent=keyword_set_node) keyword_thesaurus_node.content = keyword_thesaurus keyword_set_node.children.append(keyword_thesaurus_node) keyword_node = Node(names.KEYWORD, parent=keyword_set_node) create_keyword(keyword_node, keyword, keyword_type) if node_id and len(node_id) != 1: old_keyword_node = Node.get_node_instance(node_id) if old_keyword_node: keyword_parent_node = old_keyword_node.parent keyword_parent_node.replace_child(old_keyword_node, keyword_node) else: msg = f"No keyword node found in the node store with node id {node_id}" raise Exception(msg) else: add_child(keyword_set_node, keyword_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: keyword_set_nodes = [] eml_node.find_all_descendants(names.KEYWORDSET, keyword_set_nodes) found = False for keyword_set_node in keyword_set_nodes: keyword_nodes = keyword_set_node.find_all_children(names.KEYWORD) keyword_thesaurus_node = keyword_set_node.find_child( names.KEYWORDTHESAURUS) if keyword_nodes: for kw_node in keyword_nodes: if node_id == kw_node.id: populate_keyword_form(form, kw_node, keyword_thesaurus_node) found = True break if found: break set_current_page('keyword') help = [get_help('keywords')] return render_template('keyword.html', title='Keyword', form=form, filename=filename, help=help)
def method_step_select(filename=None): form = MethodStepSelectForm(filename=filename) # Process POST if request.method == 'POST': form_value = request.form form_dict = form_value.to_dict(flat=False) node_id = '' new_page = '' url = '' this_page = PAGE_METHOD_STEP_SELECT edit_page = PAGE_METHOD_STEP back_page = PAGE_PUBLICATION_INFO next_page = PAGE_PROJECT if form_dict: for key in form_dict: val = form_dict[key][0] # value is the first list element if val == BTN_BACK: new_page = back_page elif val in [BTN_NEXT, BTN_SAVE_AND_CONTINUE]: new_page = next_page elif val == BTN_EDIT: new_page = edit_page node_id = key elif val == BTN_REMOVE: new_page = this_page node_id = key eml_node = load_eml(filename=filename) remove_child(node_id=node_id) save_both_formats(filename=filename, eml_node=eml_node) elif val == BTN_HIDDEN_CHECK: new_page = PAGE_CHECK elif val == BTN_HIDDEN_SAVE: new_page = this_page elif val == BTN_HIDDEN_DOWNLOAD: new_page = PAGE_DOWNLOAD elif val == BTN_HIDDEN_NEW: new_page = PAGE_CREATE elif val == BTN_HIDDEN_OPEN: new_page = PAGE_OPEN elif val == BTN_HIDDEN_CLOSE: new_page = PAGE_CLOSE elif val == UP_ARROW: new_page = this_page node_id = key process_up_button(filename, node_id) elif val == DOWN_ARROW: new_page = this_page node_id = key process_down_button(filename, node_id) elif val[0:3] == 'Add': new_page = edit_page node_id = '1' elif val == '[ ]': new_page = this_page node_id = key if form.validate_on_submit(): if new_page in [edit_page, this_page]: url = url_for(new_page, filename=filename, node_id=node_id) else: url = url_for(new_page, filename=filename) return redirect(url) # Process GET method_step_list = [] title = 'Method Steps' eml_node = load_eml(filename=filename) if eml_node: dataset_node = eml_node.find_child(names.DATASET) if dataset_node: method_step_list = list_method_steps(dataset_node) set_current_page('method_step') help = [get_help('methods')] return render_template('method_step_select.html', title=title, filename=filename, method_step_list=method_step_list, form=form, help=help)