コード例 #1
0
    def test_view_widgets(self):
        # this test 3 valued widgets where valid values are 'yes', 'no' or '-'
        # '-' is shown when no value given

        client = self.app.test_client()
        with self.app.test_request_context():
            session = database.get_session()
            row = database.ReportRow()
            row.update(self.report_data)
            session.save(row)
            session.commit()

        view_response = client.get('/reports/%s/' % row.id)

        # clone self.report_data dict
        data = dict(self.report_data)

        del data[u'details_publisher']
        with self.app.test_request_context():
            session = database.get_session()
            row.update(data)
            session.save(row)
            session.commit()

        # no value given, look for '-'
        label = 'Published by'
        value = '-'
        self.assertTrue(
            common.search_label_value(label, value, view_response.data))
コード例 #2
0
    def test_delete(self):
        client = self.app.test_client()
        with self.app.test_request_context():
            session = database.get_session()
            row = database.ReportRow(name="v323x,3240543#%")
            session.save(row)
            session.commit()

        post_response = client.post("reports/%s/delete/" % row.id)
        list_response = client.get('/reports/')
        self.assertFalse("v323x,3240543#%" in list_response.data)
        self.assertIn("Report deleted.", list_response.data)
コード例 #3
0
    def test_update(self):
        #NOTE this tests both report and seris

        client = self.app.test_client()
        with self.app.test_request_context():
            session = database.get_session()
            row = database.ReportRow()
            row.update(self.report_data)
            session.save(row)
            session.commit()

            # clone self.report_data dict
            data = dict(self.report_data)

            #add additional info
            data.update({u'format_no_of_pages': u'2303445'})

            #update existing info
            data.update({u'header_uploader': u'Jerry Seinfeld'})

            #remove info
            del data[u'links_reference_global_level']

            edit_response = client.post('/reports/%s/edit/' % row.id,
                                        data=data,
                                        follow_redirects=True)

            # checking correct flash message
            self.assertIn("Report saved.", edit_response.data)

            # checking additional info
            self.assertIn("2303445", edit_response.data)

            # checking existing info update
            self.assertIn("Jerry Seinfeld", edit_response.data)

            # checking now if the checkbox has changed to No
            label = "Global-level SOER.+s?"
            value = 'No'
            self.assertTrue(
                common.search_label_value(label, value, edit_response.data))
コード例 #4
0
def import_seris():
    """
    Imported fields:
        u'details_original_name'
        u'format_availability_url'
        'details_translated_in_0'
        u'details_publisher'
        'header_country_0'
        u'format_date_of_last_update'
        u'details_english_name'
        u'format_report_type'
        'details_original_language_0'
        u'short_description'
    """

    from seris_old import SERIS_DATA
    from schema import _load_json
    countries_mapping = _load_json("refdata/seris_old_countries_mapping.json")
    countries_list = _load_json("refdata/countries_list.json")
    countries = [pair[0] for pair in countries_list]
    imported = 0
    skipped = 0
    for country, reports in SERIS_DATA.items():
        if country == 'eea' or countries_mapping[country] in countries:
            for form_data in reports:
                report_row = database.ReportRow()
                seris_review_row = database.SerisReviewRow()
                session = database.get_session()

                for k, v in form_data.items():
                    if v is None:
                        del (form_data[k])
                found = False
                for count in range(0, 100):
                    header_country = form_data.get('header_country_%s' % count)
                    if header_country not in countries:
                        if header_country:
                            del (form_data['header_country_%s' % count])
                    else:
                        found = True
                if not found:
                    if country == 'eea':
                        print(
                            'Skipped report %s from eea: '
                            'countries not in scope' %
                            form_data.get('details_original_name'))
                        skipped += 1
                        continue
                    else:
                        form_data['header_country_0'] = countries_mapping[
                            country]

                if country == 'eea':
                    form_data['header_region_0'] = (
                        'European Environment Agency')
                if form_data.get('category') == 'National portal':
                    form_data['format_report_type'] = 'portal (dynamic source)'
                try:
                    int(form_data.get('format_date_of_publication'))
                except ValueError:
                    print 'Report %s in country %s - invalid year "%s"' % (
                        form_data.get('details_original_name'), country,
                        form_data.get('format_date_of_publication'))
                except TypeError:
                    pass
                report_schema = schema.ReportSchema.from_flat(form_data)
                seris_review_schema = schema.SerisReviewSchema.from_flat(
                    form_data)

                report_row.update(report_schema.flatten())
                uploader = 'Imported from SERIS 1'
                report_row['header_uploader'] = uploader
                report_row['header_upload_date'] = '01 Jan 1999, 00:00'
                session.save(report_row)
                seris_review_schema['report_id'].set(report_row.id)

                # Review part
                seris_review_row.clear()
                seris_review_row.update(seris_review_schema.flatten())
                session.save(seris_review_row)

                imported += 1
                session.commit()
    print '%s reports imported' % imported
    print '%s reports skipped' % skipped
コード例 #5
0
def report_edit(report_id=None):
    country = flask.request.args.get('country')
    if not country:
        country = flask.request.form.get('country')
    if country == u'None':
        country = None
    region = flask.request.args.get('region')
    if not region:
        region = flask.request.form.get('region')
    if region == u'None':
        region = None
    if report_id is None:
        report_row = database.ReportRow()
        seris_review_row = database.SerisReviewRow()
    else:
        report_row = database.get_report_or_404(report_id)
        reviews_list = database.get_seris_reviews_list(report_id)
        if reviews_list:
            # TODO to be changed when there will be more than one seris
            seris_review_row = reviews_list[0]
        else:
            seris_review_row = database.SerisReviewRow()

    if flask.request.method == 'POST':
        session = database.get_session()
        form_data = {}
        form_data.update(schema.ReportSchema.from_defaults().flatten())
        form_data.update(schema.SerisReviewSchema.from_defaults().flatten())
        form_data.update(flask.request.form.to_dict())
        _expand_lists(form_data, [
            'header_region', 'header_country', 'header_subregion',
            'details_translated_in', 'details_original_language',
            'links_target_audience'
        ])

        report_schema = schema.ReportSchema.from_flat(form_data)
        seris_review_schema = schema.SerisReviewSchema.from_flat(form_data)

        file_upload.handle_request(session, report_schema, report_row)
        if report_schema.validate():

            report_row.clear()
            report_row.update(report_schema.flatten())
            session.save(report_row)
            # TODO create filter to display data without losing information
            if report_row['format_report_type'] == 'report (static source)':
                report_row['format_date_of_last_update'] = ''
                report_row['format_freq_of_upd'] = ''
                report_row['format_size'] = ''
            if report_row['format_report_type'] == 'portals (dynamic source)':
                report_row['format_date_of_publication'] = ''
                report_row['format_freq_of_pub'] = ''
                report_row['format_no_of_pages'] = ''
            if report_row['format_availability_paper_or_web'] == 'paper only':
                report_row['format_availability_registration_required'] = ''
                report_row['format_availability_url'] = ''
            if report_row['format_availability_paper_or_web'] in [
                    'web only', 'web and print'
            ]:
                if not report_row['format_availability_registration_required']:
                    report_row['format_availability_costs'] = 'free'
            uploader = getattr(flask.g, 'user_id', None)
            if not uploader:
                uploader = 'Developer'
            report_row['header_uploader'] = uploader
            now = datetime.datetime.now()
            report_row['header_upload_date'] = now.strftime('%d %b %Y, %H:%M')
            session.save(report_row)
            seris_review_schema['report_id'].set(report_row.id)

            if seris_review_schema.validate():
                seris_review_row.clear()
                seris_review_row.update(seris_review_schema.flatten())
                if seris_review_row['structure_indicator_based'] == 'No':
                    seris_review_row['structure_indicators_estimation'] = ''
                    seris_review_row[
                        'structure_indicators_usage_to_compare_countries'] = ''
                    seris_review_row[
                        'structure_indicators_usage_to_compare_subnational'] = ''
                    seris_review_row[
                        'structure_indicators_usage_to_compare_eea'] = ''
                    seris_review_row[
                        'structure_indicators_usage_to_compare_global'] = ''
                    seris_review_row[
                        'structure_indicators_usage_to_assess_progress'] = ''
                    seris_review_row[
                        'structure_indicators_usage_to_evaluate'] = ''
                    seris_review_row[
                        'structure_indicators_usage_evaluation_method'] = ''
                elif not seris_review_row[
                        'structure_indicators_usage_to_evaluate']:
                    seris_review_row[
                        'structure_indicators_usage_evaluation_method'] = ''
                session.save(seris_review_row)

                session.commit()

                flask.flash("Report saved.", "success")
                url = flask.url_for('views.report_view',
                                    report_id=report_row.id)

                title = report_row['details_original_name']
                if report_id is None:
                    action = 'added'
                else:
                    action = 'edited'
                if not flask.current_app.config.get('SKIP_EDIT_AUTHORIZATION',
                                                    False):
                    contributor_name = '%s %s' % (getattr(
                        flask.g,
                        'user_first_name'), getattr(flask.g, 'user_last_name'))
                    contributor_profile = (
                        'http://www.eionet.europa.eu/directory/user?uid=%s' %
                        uploader)
                    send_notification_mail('%s%s' % (flask.request.host, url),
                                           title, action, contributor_profile,
                                           contributor_name, uploader)

                if country:
                    url = url + '?country=' + country
                if region:
                    url = url + '?region=' + region
                return flask.redirect(url)

        session.rollback()
        flask.flash(
            "There were some errors in the submitted form. "
            "Please review look further down for the error messages.", "error")

    else:
        report_schema = schema.ReportSchema()
        seris_review_schema = schema.SerisReviewSchema()
        if report_id is not None:
            report_schema = schema.ReportSchema.from_flat(report_row)
            seris_review_schema = schema.SerisReviewSchema.from_flat(
                seris_review_row)

    app = flask.current_app
    return flask.render_template(
        'report-edit.html', **{
            'mk':
            MarkupGenerator(app.jinja_env.get_template('widgets-edit.html')),
            'report_id': report_id,
            'report_schema': report_schema,
            'seris_review_schema': seris_review_schema,
            'country': country,
            'region': region,
        })