コード例 #1
0
ファイル: resources.py プロジェクト: PASTAplus/ezEML
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')
コード例 #2
0
ファイル: resources.py プロジェクト: PASTAplus/ezEML
def abstract(filename=None):
    form = AbstractForm(filename=filename)

    # Process POST
    if request.method == 'POST':

        form_value = request.form
        form_dict = form_value.to_dict(flat=False)
        if form_dict:
            if 'Reset' in form_dict:
                # User has elected to reset to last valid saved state
                return get_abstract(filename, form)

        new_page = PAGE_KEYWORD_SELECT
        this_page = PAGE_ABSTRACT
        new_page = handle_hidden_buttons(new_page, this_page)

        if form.validate_on_submit():
            if is_dirty_form(form):
                abstract = form.abstract.data
                valid, msg = is_valid_xml_fragment(abstract, names.ABSTRACT)
                if valid:
                    create_abstract(filename=filename, abstract=abstract)
                    return redirect(url_for(new_page, filename=filename))
                else:
                    flash(invalid_xml_error_message(msg), 'error')
                    return render_get_abstract_page(form, filename)
            else:
                return redirect(url_for(new_page, filename=filename))

    # Process GET
    return get_abstract(filename, form)
コード例 #3
0
ファイル: maintenance.py プロジェクト: PASTAplus/ezEML
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)
コード例 #4
0
ファイル: resources.py プロジェクト: PASTAplus/ezEML
def intellectual_rights(filename=None):
    form = IntellectualRightsForm(filename=filename)

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

        form_value = request.form
        form_dict = form_value.to_dict(flat=False)
        if form_dict:
            if 'Reset' in form_dict:
                # User has elected to reset to last valid saved state
                return get_intellectual_rights(filename, form)

        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

            valid, msg = is_valid_xml_fragment(intellectual_rights,
                                               names.INTELLECTUALRIGHTS)
            if valid:
                create_intellectual_rights(
                    filename=filename, intellectual_rights=intellectual_rights)
            else:
                flash(invalid_xml_error_message(msg), 'error')
                form.intellectual_rights.data = intellectual_rights
                # We don't have valid XML, so we can't look for literal descendant nodes
                font_family = ''
                return render_get_intellectual_rights_page(
                    form, filename, font_family)

        new_page = PAGE_GEOGRAPHIC_COVERAGE_SELECT
        this_page = PAGE_INTELLECTUAL_RIGHTS
        new_page = handle_hidden_buttons(new_page, this_page)

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

    # Process GET
    return get_intellectual_rights(filename=filename, form=form)
コード例 #5
0
ファイル: resources.py プロジェクト: PASTAplus/ezEML
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')
コード例 #6
0
ファイル: resources.py プロジェクト: PASTAplus/ezEML
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)
コード例 #7
0
ファイル: project.py プロジェクト: PASTAplus/ezEML
def project(filename=None, project_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)

    doing_related_project = project_node_id

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

        # if not node_id:
        if not doing_related_project:
            this_page = PAGE_PROJECT
        else:
            this_page = PAGE_RELATED_PROJECT_SELECT  # FIXME?
        new_page = None

        if 'Next' in request.form:
            # if not node_id:
            if not doing_related_project:
                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
            # doing_related_project = True
        else:
            new_page = handle_hidden_buttons(new_page, this_page)

        if save:
            abstract = form.abstract.data
            valid, msg = is_valid_xml_fragment(abstract, names.ABSTRACT)
            if not valid:
                flash(invalid_xml_error_message(msg, False, names.ABSTRACT),
                      'error')
                return render_get_project_page(eml_node, form, filename,
                                               doing_related_project,
                                               project_node_id)

            funding = form.funding.data
            valid, msg = is_valid_xml_fragment(funding, names.FUNDING)
            if not valid:
                flash(invalid_xml_error_message(msg, False, names.FUNDING),
                      'error')
                return render_get_project_page(eml_node, form, filename,
                                               doing_related_project,
                                               project_node_id)

            title = form.title.data

            if not doing_related_project:
                create_project(dataset_node, title, abstract, funding)
            else:
                related_project_node = create_related_project(
                    dataset_node, title, abstract, funding, project_node_id)
                project_node_id = related_project_node.id
            save_both_formats(filename=filename, eml_node=eml_node)

        # if not node_id:
        if not doing_related_project:
            return redirect(url_for(new_page, filename=filename))
        else:
            # return redirect(url_for(new_page, filename=filename, node_id=None, project_node_id=project_node_id))
            return redirect(
                url_for(new_page,
                        filename=filename,
                        node_id='None',
                        project_node_id=project_node_id))

    # Process GET
    if project_node_id == '1':
        form.init_md5()
    elif doing_related_project:
        related_project_node = Node.get_node_instance(project_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)
    return render_get_project_page(eml_node, form, filename,
                                   doing_related_project, project_node_id)