Exemple #1
0
    def test_subthemes(self):

        load_themes()

        subthemes = [{
            'theme':
            'AGRI',
            'subthemes': [
                'http://eurovoc.europa.eu/100253',
                'http://eurovoc.europa.eu/100258'
            ]
        }, {
            'theme': 'ENVI',
            'subthemes': []
        }]

        dataset = {
            'id': '4b6fe9ca-dc77-4cec-92a4-55c6624a5bd6',
            'name': 'test-dataset',
            'title': 'Dataset di test DCAT_AP-IT',
            'notes': 'dcatapit dataset di test',
            'metadata_created': '2015-06-26T15:21:09.034694',
            'metadata_modified': '2015-06-26T15:21:09.075774',
            'tags': [{
                'name': 'Tag 1'
            }, {
                'name': 'Tag 2'
            }],
            'issued': '2016-11-29',
            'modified': '2016-11-29',
            'frequency': 'UPDATE_CONT',
            'publisher_name': 'bolzano',
            'publisher_identifier': '234234234',
            'creator_name': 'test',
            'creator_identifier': '412946129',
            'holder_name': 'bolzano',
            'holder_identifier': '234234234',
            'alternate_identifier': 'ISBN,TEST',
            'theme': json.dumps(subthemes),
        }

        s = RDFSerializer()
        p = RDFParser(profiles=['euro_dcat_ap', 'it_dcat_ap'])

        serialized = s.serialize_dataset(dataset)

        p.parse(serialized)
        datasets = list(p.datasets())

        assert len(datasets) == 1
        d = datasets[0]
        themes = json.loads(dataset['theme'])
        assert (len(themes) == len(subthemes) == 2)
        for t in themes:
            if t['theme'] == 'ENVI':
                assert t['subthemes'] == []
            elif t['theme'] == 'AGRI':
                assert set(t['subthemes']) == set(subthemes[0]['subthemes'])
            else:
                assert False, "Unknown theme: {}".format(t)
    def test_temporal_coverage(self):

        load_themes()
        temporal_coverage = [{'temporal_start': '2001-01-01T00:00:00', 'temporal_end': '2001-02-01T10:11:12'},
                             {'temporal_start': '2001-01-01T00:00:00', 'temporal_end': '2001-02-01T10:11:12'},
                            ]
        dataset = {
            'id': '4b6fe9ca-dc77-4cec-92a4-55c6624a5bd6',
            'name': 'test-dataset',
            'title': 'Dataset di test DCAT_AP-IT',
            'notes': 'dcatapit dataset di test',
            'metadata_created': '2015-06-26T15:21:09.034694',
            'metadata_modified': '2015-06-26T15:21:09.075774',
            'tags': [{'name': 'Tag 1'}, {'name': 'Tag 2'}],
            'issued':'2016-11-29',
            'modified':'2016-11-29',
            'identifier':'ISBN',
            'temporal_start':'2016-11-01T00:00:00',
            'temporal_end':'2016-11-30T00:00:00',
            'temporal_coverage': json.dumps(temporal_coverage),
            'frequency':'UPDATE_CONT',
            'publisher_name':'bolzano',
            'publisher_identifier':'234234234',
            'creator_name':'test',
            'creator_identifier':'412946129',
            'holder_name':'bolzano',
            'holder_identifier':'234234234',
            'alternate_identifier':'ISBN,TEST',
            'theme':'{ECON,ENVI}',
            'geographical_geonames_url':'http://www.geonames.org/3181913',
            'language':'{DEU,ENG,ITA}',
            'is_version_of':'http://dcat.geo-solutions.it/dataset/energia-da-fonti-rinnovabili2',
        }

        s = RDFSerializer()
        p = RDFParser(profiles=['euro_dcat_ap', 'it_dcat_ap'])
        
        serialized = s.serialize_dataset(dataset)

        p.parse(serialized)
        datasets = list(p.datasets())
        
        assert len(datasets) == 1
        d = datasets[0]

        temporal_coverage.append({'temporal_start': dataset['temporal_start'],
                                  'temporal_end': dataset['temporal_end']})

        try:
            validators.dcatapit_temporal_coverage(d['temporal_coverage'], {})
            # this should not raise exception
            assert True
        except validators.Invalid, err:
            assert False, "Temporal coverage should be valid: {}".format(err)
def test_subthemes():

    load_themes()

    test_values = ((
        None,
        False,
    ), (
        '',
        False,
    ), (
        '{AGRI}',
        True,
    ), (
        '{AGRI,INVALID}',
        False,
    ), (
        'SOME,INVALID,THEME',
        False,
    ), (
        json.dumps({}),
        False,
    ), (
        json.dumps([]),
        False,
    ), (
        json.dumps([{
            'theme': 'AGRI'
        }]),
        True,
    ), (
        json.dumps([{
            'theme': 'AGRI'
        }, {
            'theme': 'AGRI'
        }]),
        False,
    ), (json.dumps([{
        'theme': 'AGRI',
        'subthemes': ['test', 'invalid']
    }]), False), (
        json.dumps([{
            'theme':
            'AGRI',
            'subthemes': [
                'http://eurovoc.europa.eu/100253',
                'http://eurovoc.europa.eu/100258'
            ]
        }]),
        True,
    ))

    return _run_checks(test_values, validators.dcatapit_subthemes)
    def test_subthemes(self):
        from ckanext.dcatapit.tests.utils import load_themes
        load_themes()

        test_values = (
            # (None, False,), # old values, aggr is now not mandatory,and OP_DATPRO is inserted if no aggr is given
            (None, True,),
            # ('', False,), # old values, aggr is now not mandatory,and OP_DATPRO is inserted if no aggr is given
            ('', True,),
            ('{AGRI}', True,),
            ('{AGRI,INVALID}', False,),
            ('SOME,INVALID,THEME', False,),
            (json.dumps({}), False,),
            (json.dumps([]), True,),
            (json.dumps([{'theme': 'AGRI'}]), True,),
            (json.dumps([{'theme': 'AGRI'},
                         {'theme': 'AGRI'}]), False,),
            (json.dumps([{'theme': 'AGRI', 'subthemes': ['test', 'invalid']}]), False),
            (json.dumps([{'theme': 'AGRI', 'subthemes': ['http://eurovoc.europa.eu/100253',
                                                         'http://eurovoc.europa.eu/100258']}]), True,)
                       )

        self._run_checks(test_values, validators.dcatapit_subthemes, 'Theme aggregate', params=4)
Exemple #5
0
    def test_subthemes(self):

        load_themes()

        subthemes = [{
            'theme':
            'AGRI',
            'subthemes': [
                'http://eurovoc.europa.eu/100253',
                'http://eurovoc.europa.eu/100258'
            ]
        }, {
            'theme': 'ENVI',
            'subthemes': []
        }]

        dataset = {
            'id': '4b6fe9ca-dc77-4cec-92a4-55c6624a5bd6',
            'name': 'test-dataset',
            'title': 'Dataset di test DCAT_AP-IT',
            'notes': 'dcatapit dataset di test',
            'metadata_created': '2015-06-26T15:21:09.034694',
            'metadata_modified': '2015-06-26T15:21:09.075774',
            'tags': [{
                'name': 'Tag 1'
            }, {
                'name': 'Tag 2'
            }],
            'issued': '2016-11-29',
            'modified': '2016-11-29',
            'frequency': 'UPDATE_CONT',
            'publisher_name': 'bolzano',
            'publisher_identifier': '234234234',
            'creator_name': 'test',
            'creator_identifier': '412946129',
            'holder_name': 'bolzano',
            'holder_identifier': '234234234',
            'alternate_identifier': 'ISBN,TEST',
            FIELD_THEMES_AGGREGATE: json.dumps(subthemes),
            'theme': theme_aggr_to_theme_uris(
                subthemes
            )  # this is added dinamically when retrieving datasets from the db
        }

        s = RDFSerializer()
        p = RDFParser(profiles=['euro_dcat_ap', 'it_dcat_ap'])

        serialized = s.serialize_dataset(dataset)

        p.parse(serialized)
        datasets = list(p.datasets())

        assert len(datasets) == 1
        parsed_dataset = datasets[0]

        # test themes
        parsed_themes_raw = _get_extra_value(parsed_dataset.get('extras'),
                                             'theme')
        self.assertIsNotNone(
            parsed_themes_raw,
            f'Themes not found in parsed dataset {parsed_dataset}')
        parsed_themes = json.loads(parsed_themes_raw)
        self.assertEqual(2, len(parsed_themes))
        self.assertSetEqual(set(theme_names_to_uris(['AGRI', 'ENVI'])),
                            set(parsed_themes))

        # test aggregated themes
        parsed_aggr_raw = parsed_dataset.get(FIELD_THEMES_AGGREGATE, None)
        self.assertIsNotNone(
            parsed_aggr_raw,
            f'Aggregated themes not found in parsed dataset {parsed_dataset}')
        parsed_aggr = json.loads(parsed_aggr_raw)
        self.assertIsNotNone(parsed_aggr, 'Aggregate is None')
        self.assertEquals(2, len(parsed_aggr))
        for t in parsed_aggr:
            if t['theme'] == 'ENVI':
                self.assertSetEqual(set([]), set(t['subthemes']))
            elif t['theme'] == 'AGRI':
                self.assertSetEqual(set(subthemes[0]['subthemes']),
                                    set(t['subthemes']))
            else:
                self.fail(f'Unknown theme: {t}')