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)
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}')