Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
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)
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
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)
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
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)
Exemplo n.º 10
0
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)
Exemplo n.º 11
0
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)
Exemplo n.º 12
0
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)
Exemplo n.º 13
0
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)
Exemplo n.º 14
0
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)
Exemplo n.º 15
0
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)
Exemplo n.º 16
0
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)
Exemplo n.º 17
0
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)
Exemplo n.º 18
0
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)
Exemplo n.º 19
0
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)
Exemplo n.º 20
0
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)
Exemplo n.º 21
0
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)
Exemplo n.º 22
0
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)
Exemplo n.º 23
0
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)
Exemplo n.º 24
0
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)
Exemplo n.º 25
0
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)
Exemplo n.º 26
0
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)