Exemple #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)
        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)
Exemple #2
0
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)
Exemple #3
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)
Exemple #4
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)
Exemple #5
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)
Exemple #6
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)
Exemple #7
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)
Exemple #8
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)
Exemple #9
0
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)