Exemplo n.º 1
0
def data_package_id(filename=None):
    form = DataPackageIDForm()
    eml_node = load_eml(filename=filename)

    # Process POST
    # if request.method == 'POST' and form.validate_on_submit():
    if request.method == 'POST':
        save = False
        if is_dirty_form(form):
            save = True

        if save:
            data_package_id = form.data_package_id.data
            create_data_package_id(data_package_id, filename)
            set_active_packageid(data_package_id)
            form.md5.data = form_md5(form)

        new_page = PAGE_TITLE
        this_page = PAGE_DATA_PACKAGE_ID
        new_page = handle_hidden_buttons(new_page, this_page)

        return redirect(url_for(new_page, filename=filename))

    # Process GET
    data_package_id = eml_node.attribute_value('packageId')
    form.data_package_id.data = data_package_id if data_package_id else ''
    form.md5.data = form_md5(form)

    set_current_page('data_package_id')
    help = get_helps(['data_package_id'])
    return render_template('data_package_id.html',
                           form=form,
                           help=help,
                           title='Data Package ID')
Exemplo n.º 2
0
def rp_select_get(filename=None,
                  form=None,
                  rp_name=None,
                  rp_singular=None,
                  rp_plural=None,
                  help=None,
                  node_id=None,
                  project_node_id=None):
    # Process GET
    eml_node = load_eml(filename=filename)
    rp_list = list_responsible_parties(eml_node,
                                       rp_name,
                                       project_node_id=project_node_id)
    title = rp_plural  # rp_name.capitalize()
    related_project = project_node_id is not None
    if related_project:
        rp_singular = 'Related ' + rp_singular
        rp_plural = 'Related ' + rp_plural

    return render_template('responsible_party_select.html',
                           title=title,
                           rp_list=rp_list,
                           form=form,
                           rp_singular=rp_singular,
                           rp_plural=rp_plural,
                           help=help,
                           relatedProject=related_project)
Exemplo n.º 3
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)
Exemplo n.º 4
0
def check_eml(filename: str):
    # global evaluation, metapype_validation_errs, metapype_evaluation
    global evaluation
    evaluation = []

    eml_node = load_eml(filename)

    check_dataset_title(eml_node, filename)
    check_data_tables(eml_node, filename)
    check_creators(eml_node, filename)
    check_contacts(eml_node, filename)
    check_associated_parties(eml_node, filename)
    check_metadata_providers(eml_node, filename)
    check_dataset_abstract(eml_node, filename)
    check_keywords(eml_node, filename)
    check_intellectual_rights(eml_node, filename)
    check_coverage(eml_node, filename)
    check_geographic_coverage(eml_node, filename)
    check_maintenance(eml_node, filename)
    check_method_steps(eml_node, filename)
    check_project(eml_node, filename)
    check_other_entities(eml_node, filename)
    check_data_package_id(eml_node, filename)

    return format_output(evaluation)
Exemplo n.º 5
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)
Exemplo n.º 6
0
def cull_uploads(package_name=None):
    # Remove uploads not represented in the metadata.
    # Formerly, Import Package removed all uploads on the assumption that it was a new package.
    # But, we may want to replace the metadata without losing the uploads. This is especially
    #  true when the "without data" form of the package is being used to replace the existing
    #  package in order to update the metadata without losing the uploads.
    eml_node = load_eml(filename=package_name)

    # Get all of the uploads represented in the metadata
    object_names = []
    object_name_nodes = []
    eml_node.find_all_descendants(names.OBJECTNAME, object_name_nodes)
    for object_name_node in object_name_nodes:
        if object_name_node.content:
            object_names.append(object_name_node.content)

    # Remove any uploads that aren't in the list
    user_path = user_data.get_user_folder_name(
    )  # os.path.join(current_path, USER_DATA_DIR)
    upload_folder = os.path.join(user_path, 'uploads', package_name)
    to_delete = [
        file for file in os.listdir(upload_folder) if file not in object_names
    ]
    for file in to_delete:
        os.remove(os.path.join(user_path, 'uploads', package_name, file))
Exemplo n.º 7
0
def funding_award_select(filename=None, project_node_id=None):
    form = AwardSelectForm(filename=filename)

    # Process POST
    if request.method == 'POST':
        form_value = request.form
        form_dict = form_value.to_dict(flat=False)
        node_id = None

        new_page = PAGE_FUNDING_AWARD_SELECT
        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_PROJECT
                elif val[0:4] == 'Back':
                    new_page = PAGE_PROJECT
                elif val == BTN_EDIT:
                    new_page = PAGE_FUNDING_AWARD
                    node_id = key
                elif val == BTN_REMOVE:
                    new_page = PAGE_FUNDING_AWARD_SELECT
                    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 == UP_ARROW:
                    new_page = PAGE_FUNDING_AWARD_SELECT
                    node_id = key
                    process_up_button(filename, node_id)
                elif val == DOWN_ARROW:
                    new_page = PAGE_FUNDING_AWARD_SELECT
                    node_id = key
                    process_down_button(filename, node_id)
                elif val[0:3] == 'Add':
                    new_page = PAGE_FUNDING_AWARD
                    node_id = '1'
                else:
                    new_page = check_val_for_hidden_buttons(
                        val, new_page, PAGE_FUNDING_AWARD_SELECT)

        if form.validate_on_submit():
            if node_id and project_node_id:
                url = url_for(new_page,
                              filename=filename,
                              node_id=node_id,
                              project_node_id=project_node_id)
            elif project_node_id:
                url = url_for(new_page,
                              filename=filename,
                              project_node_id=project_node_id)
            else:
                url = url_for(new_page, filename=filename, node_id=node_id)
            return redirect(url)

    # Process GET
    return funding_award_select_get(filename=filename,
                                    form=form,
                                    project_node_id=project_node_id)
Exemplo n.º 8
0
def get_abstract(filename, form):
    # Process GET
    eml_node = load_eml(filename=filename)
    abstract_node = eml_node.find_single_node_by_path(
        [names.DATASET, names.ABSTRACT])
    if abstract_node:
        try:
            form.abstract.data = display_texttype_node(abstract_node)
        except InvalidXMLError as exc:
            flash('The XML is invalid. Please make corrections.', 'error')
    return render_get_abstract_page(form, filename)
Exemplo n.º 9
0
def clear_taxonomic_coverage(package_name):
    # When user selects Clear Taxonomic Coverage to get rid of coverage imported from XML, we delete it and
    #  set the flag that says its OK for ezEML to handle even though the package was imported from XML.
    eml_node = load_eml(filename=package_name)
    coverage_node = eml_node.find_single_node_by_path([names.DATASET, names.COVERAGE])
    if coverage_node:
        taxonomic_coverage_nodes = coverage_node.find_all_children(names.TAXONOMICCOVERAGE)
        for taxonomic_coverage_node in taxonomic_coverage_nodes:
            coverage_node.remove_child(taxonomic_coverage_node)
            Node.delete_node_instance(taxonomic_coverage_node.id)
        clear_taxonomy_imported_from_xml(eml_node, package_name)
Exemplo n.º 10
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.º 11
0
def publication_info(filename=None):
    form = PublicationInfoForm()

    # Process POST
    # if request.method == 'POST' and form.validate_on_submit():
    if request.method == 'POST':
        if 'Next' in request.form:
            new_page = PAGE_METHOD_STEP_SELECT
        elif BTN_HIDDEN_CHECK in request.form:
            new_page = PAGE_CHECK
        elif BTN_HIDDEN_SAVE in request.form:
            new_page = PAGE_PUBLICATION_INFO
        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_PUBLISHER

        save = False
        if is_dirty_form(form):
            save = True

        if save:
            pubplace = form.pubplace.data
            pubdate = form.pubdate.data
            create_pubinfo(pubplace=pubplace,
                           pubdate=pubdate,
                           filename=filename)

        return redirect(url_for(new_page, filename=filename))

    # Process GET
    eml_node = load_eml(filename=filename)
    pubplace_node = eml_node.find_single_node_by_path(
        [names.DATASET, names.PUBPLACE])
    if pubplace_node:
        form.pubplace.data = pubplace_node.content
    pubdate_node = eml_node.find_single_node_by_path(
        [names.DATASET, names.PUBDATE])
    if pubdate_node:
        form.pubdate.data = pubdate_node.content
    form.md5.data = form_md5(form)
    set_current_page('publication_info')
    help = get_helps(['pubplace', 'pubdate'])
    return render_template('publication_info.html',
                           help=help,
                           form=form,
                           title='Publication Info')
Exemplo n.º 12
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 BTN_CANCEL in request.form:
        url = url_for(PAGE_MAINTENANCE, filename=filename)
        return redirect(url)

    if request.method == 'POST' and form.validate_on_submit():
        save = False
        if is_dirty_form(form):
            save = True

        if save:
            maintenace_description = form.description.data
            valid, msg = is_valid_xml_fragment(maintenace_description, names.MAINTENANCE)
            if not valid:
                flash(invalid_xml_error_message(msg, False, names.DESCRIPTION), 'error')
                return render_get_maintenance_page(eml_node, form, filename)

            update_frequency = form.update_frequency.data
            create_maintenance(dataset_node, maintenace_description, update_frequency)
            save_both_formats(filename=filename, eml_node=eml_node)

        form_value = request.form
        form_dict = form_value.to_dict(flat=False)

        new_page = PAGE_MAINTENANCE
        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
                else:
                    new_page = handle_hidden_buttons(new_page, PAGE_MAINTENANCE)

        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)

    return render_get_maintenance_page(eml_node, form, filename)
Exemplo n.º 13
0
def remove_keyword(filename, node_id):
    eml_node = load_eml(filename=filename)

    if node_id:
        keyword_node = Node.get_node_instance(node_id)
        if keyword_node:
            keyword_set_node = keyword_node.parent
        remove_child(node_id=node_id)
        # if we've just removed the last keyword under the keywordSet, remove the keywordSet
        if not keyword_set_node.find_all_children(names.KEYWORD):
            parent_node = keyword_set_node.parent
            parent_node.remove_child(keyword_set_node)
        save_both_formats(filename=filename, eml_node=eml_node)
Exemplo n.º 14
0
def access_select_get(filename=None, form=None):
    # Process GET
    access_rules_list = []
    title = 'Access Rules'
    eml_node = load_eml(filename=filename)

    if eml_node:
        access_rules_list = list_access_rules(eml_node)

    return render_template('access_select.html',
                           title=title,
                           filename=filename,
                           ar_list=access_rules_list,
                           form=form)
Exemplo n.º 15
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.º 16
0
def title(filename=None):
    form = TitleForm()

    # Process POST
    # if request.method == 'POST' and form.validate_on_submit():
    if request.method == 'POST':
        new_page = PAGE_DATA_TABLE_SELECT
        save = False
        if is_dirty_form(form):
            save = True

        if save:
            create_title(title=form.title.data, filename=filename)
            form.md5.data = form_md5(form)

        if 'Next' in request.form:
            new_page = PAGE_DATA_TABLE_SELECT
        elif BTN_HIDDEN_CHECK in request.form:
            new_page = PAGE_CHECK
        elif BTN_HIDDEN_SAVE in request.form:
            new_page = PAGE_TITLE
        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

        return redirect(url_for(new_page, filename=filename))

    # Process GET
    eml_node = load_eml(filename=filename)
    dataset_node = eml_node.find_child(child_name=names.DATASET)
    title_node = dataset_node.find_child(names.TITLE)
    if title_node:
        form.title.data = title_node.content
    form.md5.data = form_md5(form)

    set_current_page('title')
    help = get_helps(['title', 'nav', 'welcome'])
    first_usage = is_first_usage()
    return render_template('title.html',
                           title='Title',
                           form=form,
                           help=help,
                           is_first_usage=first_usage)
Exemplo n.º 17
0
def data_package_id(filename=None):
    form = DataPackageIDForm()
    eml_node = load_eml(filename=filename)

    # Process POST
    # if request.method == 'POST' and form.validate_on_submit():
    if request.method == 'POST':
        new_page = PAGE_TITLE
        save = False
        if is_dirty_form(form):
            save = True

        if save:
            data_package_id = form.data_package_id.data
            create_data_package_id(data_package_id, filename)
            set_active_packageid(data_package_id)
            form.md5.data = form_md5(form)

        if 'Next' in request.form:
            new_page = PAGE_CHECK
        elif BTN_HIDDEN_CHECK in request.form:
            new_page = PAGE_CHECK
        elif BTN_HIDDEN_SAVE in request.form:
            new_page = PAGE_DATA_PACKAGE_ID
        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

        return redirect(url_for(new_page, filename=filename))

    # Process GET
    data_package_id = eml_node.attribute_value('packageId')
    form.data_package_id.data = data_package_id if data_package_id else ''
    form.md5.data = form_md5(form)

    set_current_page('data_package_id')
    help = get_helps(['data_package_id'])
    return render_template('data_package_id.html',
                           form=form,
                           help=help,
                           title='Data Package ID')
Exemplo n.º 18
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.º 19
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.º 20
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.º 21
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.º 22
0
def access_select_post(filename=None,
                       form=None,
                       form_dict=None,
                       method=None,
                       this_page=None,
                       back_page=None,
                       next_page=None,
                       edit_page=None):
    node_id = ''
    new_page = ''
    if form_dict:
        for key in form_dict:
            val = form_dict[key][0]  # value is the first list element
            if val == 'Back':
                new_page = back_page
            elif val == 'Next':
                new_page = next_page
            elif val == 'Edit':
                new_page = edit_page
                node_id = key
            elif val == '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 == 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'

    if form.validate_on_submit():
        if new_page == edit_page:
            return url_for(new_page, filename=filename, node_id=node_id)
        elif new_page == this_page:
            return url_for(new_page, filename=filename, node_id=node_id)
        elif new_page == back_page or new_page == next_page:
            return url_for(new_page, filename=filename)
Exemplo n.º 23
0
def load_geo_coverage_from_csv(csv_filename, filename):
    eml_node = load_eml(filename=filename)

    data_frame = pd.read_csv(csv_filename, comment='#', encoding='utf8')

    required_columns = ['geographicDescription',
                        'northBoundingCoordinate',
                        'southBoundingCoordinate',
                        'eastBoundingCoordinate',
                        'westBoundingCoordinate']
    optional_columns = ['minimumAltitude',
                        'maximumAltitude',
                        'altitudeUnits']
    has_required_columns = False
    has_optional_columns = False

    if list(data_frame.columns) == required_columns:
        has_required_columns = True
    if list(data_frame.columns) == required_columns + optional_columns:
        has_required_columns = True
        has_optional_columns = True

    if not has_required_columns:
        raise ValueError('Geographic coverage file does not have expected column names.')

    expected_types_error_msg = 'Geographic coverage file does not have expected variable types in columns. Note that ' \
        'numerical values must be written with a decimal point.'
    if not has_optional_columns:
        if list(data_frame.dtypes) != [np.object, np.float64, np.float64, np.float64, np.float64]:
            raise ValueError(expected_types_error_msg)
    else:
        if list(data_frame.dtypes)[1:-1] != [np.float64, np.float64, np.float64, np.float64, np.float64, np.float64]:
            raise ValueError(expected_types_error_msg)

    for index, row in data_frame.iterrows():
        if has_optional_columns:
            add_geo_coverage_node(eml_node, row[0], row[1], row[2], row[3], row[4],
                                  str(row[5]) if not pd.isna(row[5]) else None,
                                  str(row[6]) if not pd.isna(row[6]) else None,
                                  str(row[7]) if not pd.isna(row[7]) else None)
        else:
            add_geo_coverage_node(eml_node, row[0], row[1], row[2], row[3], row[4])

    save_both_formats(filename=filename, eml_node=eml_node)
Exemplo n.º 24
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.º 25
0
def publication_info(filename=None):
    form = PublicationInfoForm()

    # Process POST
    # if request.method == 'POST' and form.validate_on_submit():
    if request.method == 'POST':

        new_page = PAGE_METHOD_STEP_SELECT
        this_page = PAGE_PUBLICATION_INFO
        new_page = handle_hidden_buttons(new_page, this_page)

        save = False
        if is_dirty_form(form):
            save = True

        if save:
            pubplace = form.pubplace.data
            pubdate = form.pubdate.data
            create_pubinfo(pubplace=pubplace,
                           pubdate=pubdate,
                           filename=filename)

        return redirect(url_for(new_page, filename=filename))

    # Process GET
    eml_node = load_eml(filename=filename)
    pubplace_node = eml_node.find_single_node_by_path(
        [names.DATASET, names.PUBPLACE])
    if pubplace_node:
        form.pubplace.data = pubplace_node.content
    pubdate_node = eml_node.find_single_node_by_path(
        [names.DATASET, names.PUBDATE])
    if pubdate_node:
        form.pubdate.data = pubdate_node.content
    form.md5.data = form_md5(form)
    set_current_page('publication_info')
    help = get_helps(['pubplace', 'pubdate'])
    return render_template('publication_info.html',
                           help=help,
                           form=form,
                           title='Publication Info')
Exemplo n.º 26
0
def get_intellectual_rights(filename, form):
    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 = display_texttype_node(intellectual_rights_node)
        if INTELLECTUAL_RIGHTS_CC0 in ir_content:
            form.intellectual_rights_radio.data = 'CC0'
            form.intellectual_rights.data = ''
        elif INTELLECTUAL_RIGHTS_CC_BY in ir_content:
            form.intellectual_rights_radio.data = 'CCBY'
            form.intellectual_rights.data = ''
        else:
            form.intellectual_rights_radio.data = "Other"
            form.intellectual_rights.data = display_texttype_node(
                intellectual_rights_node)

    font_family = 'Courier' if node_has_literal_children(
        intellectual_rights_node) else ''

    return render_get_intellectual_rights_page(filename=filename,
                                               form=form,
                                               font_family=font_family)
Exemplo n.º 27
0
def title(filename=None):
    log_info(f'Title')

    form = TitleForm()

    # Process POST
    if request.method == 'POST' and form.validate_on_submit():
        save = False
        if is_dirty_form(form):
            save = True

        if save:
            create_title(title=form.title.data, filename=filename)
            form.md5.data = form_md5(form)

        new_page = PAGE_DATA_TABLE_SELECT
        this_page = PAGE_TITLE
        new_page = handle_hidden_buttons(new_page, this_page)

        return redirect(url_for(new_page, filename=filename))

    # Process GET
    eml_node = load_eml(filename=filename)
    dataset_node = eml_node.find_child(child_name=names.DATASET)
    title_node = dataset_node.find_child(names.TITLE)
    if title_node:
        form.title.data = title_node.content
    form.md5.data = form_md5(form)

    set_current_page('title')
    help = get_helps(['title', 'nav', 'welcome'])
    first_usage = is_first_usage()
    return render_template('title.html',
                           title='Title',
                           form=form,
                           help=help,
                           is_first_usage=first_usage)
Exemplo n.º 28
0
def load_geo_coverage_from_csv(csv_filename, filename):
    eml_node = load_eml(filename=filename)

    data_frame = pd.read_csv(csv_filename, comment='#', encoding='utf8')

    if list(data_frame.columns) != [
            'geographicDescription', 'northBoundingCoordinate',
            'southBoundingCoordinate', 'eastBoundingCoordinate',
            'westBoundingCoordinate'
    ]:
        raise ValueError(
            'Geographic coverage file does not have expected column names.')

    if list(data_frame.dtypes) != [
            np.object, np.float64, np.float64, np.float64, np.float64
    ]:
        raise ValueError(
            'Geographic coverage file does not have expected variable types in columns.'
        )

    for index, row in data_frame.iterrows():
        add_geo_coverage_node(eml_node, row[0], row[1], row[2], row[3], row[4])

    save_both_formats(filename=filename, eml_node=eml_node)
Exemplo n.º 29
0
def access(filename=None, node_id=None):
    eml_node = load_eml(filename=filename)

    if eml_node:
        access_node = eml_node.find_child(names.ACCESS)
    else:
        return

    if not access_node:
        access_node = Node(names.ACCESS, parent=eml_node)
        add_child(eml_node, access_node)

    form = AccessForm(filename=filename, node_id=node_id)
    # form = AccessForm()

    # Process POST
    if request.method == 'POST':
        if BTN_CANCEL in request.form:
            url = url_for(PAGE_ACCESS_SELECT, filename=filename)
            return redirect(url)

        next_page = PAGE_ACCESS_SELECT  # Save or Back sends us back to the list of access rules

        if form.validate_on_submit():
            if is_dirty_form(form):
                submit_type = 'Save Changes'
            else:
                submit_type = 'Back'

            if submit_type == 'Save Changes':
                userid = form.userid.data
                permission = form.permission.data
                allow_node = Node(names.ALLOW, parent=access_node)
                create_access_rule(allow_node, userid, permission)

                if node_id and len(node_id) != 1:
                    old_allow_node = Node.get_node_instance(node_id)

                    if old_allow_node:
                        access_parent_node = old_allow_node.parent
                        access_parent_node.replace_child(
                            old_allow_node, allow_node)
                    else:
                        msg = f"No 'allow' node found in the node store with node id {node_id}"
                        raise Exception(msg)
                else:
                    add_child(access_node, allow_node)

                save_both_formats(filename=filename, eml_node=eml_node)

            url = url_for(next_page, filename=filename)
            return redirect(url)

    # Process GET
    if node_id == '1':
        form.init_md5()
    else:
        allow_nodes = access_node.find_all_children(names.ALLOW)
        if allow_nodes:
            for allow_node in allow_nodes:
                if node_id == allow_node.id:
                    populate_access_rule_form(form, allow_node)
                    break

    return render_template('access.html',
                           title='Access Rule',
                           form=form,
                           filename=filename)
Exemplo n.º 30
0
def taxonomic_coverage(filename=None, node_id=None, taxon=None):
    form = TaxonomicCoverageForm(filename=filename)

    # Process POST
    if request.method == 'POST' and BTN_CANCEL in request.form:
        url = url_for(PAGE_TAXONOMIC_COVERAGE_SELECT, filename=filename)
        return redirect(url)

    if request.method == 'POST' and form.validate_on_submit():
        save = False
        if is_dirty_form(form):
            save = True
        # flash(f'save: {save}')

        form_value = request.form
        have_links = False

        if 'Fill' in form_value:
            source = form.taxonomic_authority.data
            if source == 'ITIS':
                source_type = TaxonomySourceEnum.ITIS
            elif source == 'NCBI':
                source_type = TaxonomySourceEnum.NCBI
            elif source == "WORMS":
                source_type = TaxonomySourceEnum.WORMS
            try:
                source_name = ''
                for choice in form.taxonomic_authority.choices:
                    if choice[0] == source:
                        source_name = choice[1]
                        break
                hierarchy = fill_taxonomic_coverage(form.taxon_value.data,
                                                    source_type, source_name)
                if hierarchy:
                    # set the taxon rank dropdown appropriately
                    rank = hierarchy[0][0].capitalize()
                    if (rank, rank) in form.taxon_rank.choices:
                        form.taxon_rank.data = rank
                    # see if we should display a Links column
                    for taxon in hierarchy:
                        if taxon[4]:
                            have_links = True
                            break
            except ValueError as e:
                flash(str(e))
                hierarchy = [(form.taxon_rank.data, form.taxon_value.data, '',
                              '')]
            form.hierarchy.data = hierarchy
            form.hidden_taxon_rank.data = form.taxon_rank.data
            form.hidden_taxon_value.data = form.taxon_value.data
            form.hidden_taxonomic_authority.data = form.taxonomic_authority.data
            help = get_helps(['taxonomic_coverage_fill_hierarchy'])

            return render_template(
                'taxonomic_coverage.html',
                title='Taxonomic Coverage',
                form=form,
                hierarchy=hierarchy,
                taxon_rank=form.taxon_rank.data,
                taxon_value=form.taxon_value.data,
                taxonomic_authority=form.taxonomic_authority.data,
                help=help,
                have_links=have_links)

        form_dict = form_value.to_dict(flat=False)
        new_page = PAGE_TAXONOMIC_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

        if save:
            if not form.taxon_value.data and not form.taxon_rank.data:
                return redirect(url_for(new_page, filename=filename))

            submitted_hierarchy = form_value.get('hierarchy')
            if isinstance(form_value.get('hierarchy'),
                          str) and form_value.get('hierarchy'):
                # convert hierarchy string to list
                submitted_hierarchy = ast.literal_eval(
                    form_value.get('hierarchy'))
                form.hierarchy.data = submitted_hierarchy

            # if we're saving after doing 'Fill Hierarchy', fill in the values we've been passed
            if form_value.get('hidden_taxon_rank'):
                form.taxon_rank.data = form_value.get('hidden_taxon_rank')
                form.taxon_value.data = form_value.get('hidden_taxon_value')
                form.taxonomic_authority.data = form_value.get(
                    'hidden_taxonomic_authority')
            elif not submitted_hierarchy:
                # we don't have a hierarchy, so construct a fake hierarchy to be used by create_taxonomic_coverage()
                form.hierarchy.data = [(form_value.get('taxon_rank'),
                                        form_value.get('taxon_value'), '', '',
                                        '', '')]

            if not form_value.get('taxon_rank'):
                flash('Taxon Rank is required.')
                return redirect(
                    url_for(PAGE_TAXONOMIC_COVERAGE,
                            filename=filename,
                            node_id=node_id,
                            taxon=form.taxon_value.data))

            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)

            txc_node = Node(names.TAXONOMICCOVERAGE, parent=coverage_node)

            create_taxonomic_coverage(txc_node,
                                      form.general_taxonomic_coverage.data,
                                      form.hierarchy.data,
                                      form.taxonomic_authority.data)

            if node_id and len(node_id) != 1:
                old_txc_node = Node.get_node_instance(node_id)
                if old_txc_node:
                    coverage_parent_node = old_txc_node.parent
                    coverage_parent_node.replace_child(old_txc_node, txc_node)
                else:
                    msg = f"No node found in the node store with node id {node_id}"
                    raise Exception(msg)
            else:
                add_child(coverage_node, txc_node)

            save_both_formats(filename=filename, eml_node=eml_node)

        return redirect(url_for(new_page, filename=filename))

    # Process GET
    have_links = False
    if node_id == '1':
        form.init_md5()
        if taxon:
            form.taxon_value.data = taxon
    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:
                txc_nodes = coverage_node.find_all_children(
                    names.TAXONOMICCOVERAGE)
                if txc_nodes:
                    for txc_node in txc_nodes:
                        if node_id == txc_node.id:
                            have_links = populate_taxonomic_coverage_form(
                                form, txc_node)

    help = get_helps(['taxonomic_coverage_fill_hierarchy'])

    set_current_page('taxonomic_coverage')
    return render_template('taxonomic_coverage.html',
                           title='Taxonomic Coverage',
                           form=form,
                           hierarchy=form.hierarchy.data,
                           have_links=have_links,
                           help=help)