Skip to content
Snippets Groups Projects
Commit f0126bbe authored by anonymous's avatar anonymous
Browse files
parents 224b4d5d 1510f666
Branches
Tags
No related merge requests found
......@@ -60,17 +60,35 @@ class Initialization(CkanCommand):
"landeshauptstadt-kiel": {
"title": u"Landeshauptstadt Kiel",
"image": u"https://www.kiel.de/images/logo-kiel-sailing-city.svg",
"description": u"Kommunalverwaltung"
"description": u"Die Stadt Kiel ist die nördlichste Großstadt Deutschlands und die Landeshauptstadt"
u" Schleswig-Holsteins. Als kreisfreie Stadt erledigt sie neben den kommunalen"
u" Selbstverwaltungsaufgaben auch Aufgaben einer unteren staatlichen Verwaltungsbehörde"
u" und erzeugt, erhebt und verarbeitet als Gebietskörperschaft eine Vielzahl von Daten"
u" mit lokalem Bezug."
},
"statistikamt-nord": {
"title": u"Statistisches Amt für Hamburg und Schleswig-Holstein - Anstalt des öffentlichen Rechts - (Statistikamt Nord)",
"title": u"Statistisches Amt für Hamburg und Schleswig-Holstein - Anstalt des öffentlichen Rechts - "
u"(Statistikamt Nord)",
"image": u"https://www.statistik-nord.de/static/img/logo-text.svg",
"description": u"Das Statistische Amt für Hamburg und Schleswig-Holstein – das Statistikamt Nord – erhebt und veröffentlicht als Teil der amtlichen Statistik in Deutschland statistische Informationen zu allen gesellschaftlichen Themen für die Bundesländer Hamburg und Schleswig-Holstein. Als Anstalt des öffentlichen Rechts führt es alle durch Bundes- und EU- Gesetze angeordneten Statistiken im Auftrag der Trägerländer Hamburg und Schleswig-Holstein für die beiden Bundesländer durch, bereitet die Daten auf und interpretiert die Ergebnisse. Die objektiv und unabhängig erstellten Statistiken werden Verwaltung, Politik, Medien sowie Bürgerinnen und Bürgern gleichermaßen zugänglich gemacht. Darüber hinaus bietet das Amt Dienstleistungen im Bereich Datenerhebung, -aufbereitung und -analyse nach individuellem Kundenwunsch an. Das Statistikamt Nord ist hervorgegangen aus den vormaligen Statistischen Landesämtern Hamburg und Schleswig-Holstein. Seit 2004 firmiert es als länderübergreifende Anstalt an den Standorten Hamburg und Kiel."
"description": u"Das Statistische Amt für Hamburg und Schleswig-Holstein – das Statistikamt Nord – "
u"erhebt und veröffentlicht als Teil der amtlichen Statistik in Deutschland statistische"
u" Informationen zu allen gesellschaftlichen Themen für die Bundesländer Hamburg und"
u" Schleswig-Holstein. Als Anstalt des öffentlichen Rechts führt es alle durch Bundes-"
u" und EU- Gesetze angeordneten Statistiken im Auftrag der Trägerländer Hamburg und"
u" Schleswig-Holstein für die beiden Bundesländer durch, bereitet die Daten auf und"
u" interpretiert die Ergebnisse. Die objektiv und unabhängig erstellten Statistiken"
u" werden Verwaltung, Politik, Medien sowie Bürgerinnen und Bürgern gleichermaßen"
u" zugänglich gemacht. Darüber hinaus bietet das Amt Dienstleistungen im Bereich"
u" Datenerhebung, -aufbereitung und -analyse nach individuellem Kundenwunsch an."
u" Das Statistikamt Nord ist hervorgegangen aus den vormaligen Statistischen"
u" Landesämtern Hamburg und Schleswig-Holstein. Seit 2004 firmiert es als"
u" länderübergreifende Anstalt an den Standorten Hamburg und Kiel."
},
"landesamt-fur-soziale-dienste": {
"title": u"Landesamt für soziale Dienste",
"image": None,
"description": u"Das Landesamt für soziale Dienste ist eine obere Landesbehörde des Landes Schleswig-Holstein."
"description": u"Das Landesamt für soziale Dienste ist eine obere Landesbehörde des Landes"
u" Schleswig-Holstein."
}
}
......@@ -113,17 +131,34 @@ class Initialization(CkanCommand):
'active': True,
'owner_org': "landeshauptstadt-kiel",
'frequency': "MANUAL",
'notes': u"Die Stadt Kiel ist die nördlichste Großstadt Deutschlands und die Landeshauptstadt Schleswig-Holsteins. Als kreisfreie Stadt erledigt sie neben den kommunalen Selbstverwaltungsaufgaben auch Aufgaben einer unteren staatlichen Verwaltungsbehörde und erzeugt, erhebt und verarbeitet als Gebietskörperschaft eine Vielzahl von Daten mit lokalem Bezug."
'notes': u"Die Stadt Kiel ist die nördlichste Großstadt Deutschlands und die Landeshauptstadt"
u" Schleswig-Holsteins. Als kreisfreie Stadt erledigt sie neben den kommunalen"
u" Selbstverwaltungsaufgaben auch Aufgaben einer unteren staatlichen Verwaltungsbehörde und"
u" erzeugt, erhebt und verarbeitet als Gebietskörperschaft eine Vielzahl von Daten mit lokalem"
u" Bezug."
},
"Statistisches Amt für Hamburg und Schleswig-Holstein - Anstalt des öffentlichen Rechts - (Statistikamt Nord)": {
"Statistisches Amt für Hamburg und Schleswig-Holstein - Anstalt des öffentlichen Rechts - "
"(Statistikamt Nord)": {
'name': u"statistikamt-nord",
'url': u"http://www.statistik-nord.de/index.php?eID=stan_xml&products=4,6&state=2",
'source_type': u"statistikamt-nord",
'title': u"Statistisches Amt für Hamburg und Schleswig-Holstein - Anstalt des öffentlichen Rechts - (Statistikamt Nord)",
'title': u"Statistisches Amt für Hamburg und Schleswig-Holstein - Anstalt des öffentlichen Rechts - "
u"(Statistikamt Nord)",
'active': True,
'owner_org': "statistikamt-nord",
'frequency': "MANUAL",
'notes': u"Das Statistische Amt für Hamburg und Schleswig-Holstein – das Statistikamt Nord – erhebt und veröffentlicht als Teil der amtlichen Statistik in Deutschland statistische Informationen zu allen gesellschaftlichen Themen für die Bundesländer Hamburg und Schleswig-Holstein. Als Anstalt des öffentlichen Rechts führt es alle durch Bundes- und EU- Gesetze angeordneten Statistiken im Auftrag der Trägerländer Hamburg und Schleswig-Holstein für die beiden Bundesländer durch, bereitet die Daten auf und interpretiert die Ergebnisse. Die objektiv und unabhängig erstellten Statistiken werden Verwaltung, Politik, Medien sowie Bürgerinnen und Bürgern gleichermaßen zugänglich gemacht. Darüber hinaus bietet das Amt Dienstleistungen im Bereich Datenerhebung, -aufbereitung und -analyse nach individuellem Kundenwunsch an. Das Statistikamt Nord ist hervorgegangen aus den vormaligen Statistischen Landesämtern Hamburg und Schleswig-Holstein. Seit 2004 firmiert es als länderübergreifende Anstalt an den Standorten Hamburg und Kiel."
'notes': u"Das Statistische Amt für Hamburg und Schleswig-Holstein – das Statistikamt Nord – erhebt und"
u" veröffentlicht als Teil der amtlichen Statistik in Deutschland statistische Informationen"
u" zu allen gesellschaftlichen Themen für die Bundesländer Hamburg und Schleswig-Holstein. Als"
u" Anstalt des öffentlichen Rechts führt es alle durch Bundes- und EU- Gesetze angeordneten "
u"Statistiken im Auftrag der Trägerländer Hamburg und Schleswig-Holstein für die beiden "
u"Bundesländer durch, bereitet die Daten auf und interpretiert die Ergebnisse. Die objektiv "
u"und unabhängig erstellten Statistiken werden Verwaltung, Politik, Medien sowie Bürgerinnen "
u"und Bürgern gleichermaßen zugänglich gemacht. Darüber hinaus bietet das Amt Dienstleistungen"
u" im Bereich Datenerhebung, -aufbereitung und -analyse nach individuellem Kundenwunsch an. "
u"Das Statistikamt Nord ist hervorgegangen aus den vormaligen Statistischen Landesämtern "
u"Hamburg und Schleswig-Holstein. Seit 2004 firmiert es als länderübergreifende Anstalt an den"
u" Standorten Hamburg und Kiel."
}
}
......
......@@ -39,23 +39,26 @@ class KielHarvester(ODSHBaseHarvester):
try:
used_identifiers = []
ids = []
package_ids_in_db = list(map(lambda x: x[0], model.Session.query(HarvestObject.guid)\
.filter(HarvestObject.current == True)\
package_ids_in_db = list(map(lambda x: x[0], model.Session.query(HarvestObject.guid)
.filter(HarvestObject.current == True)
.filter(HarvestObject.harvest_source_id == harvest_job.source.id).all()))
log.info("Package IDs in DB: %s" % str(package_ids_in_db))
for dataset in datasets:
guid = str(uuid.uuid3(uuid.NAMESPACE_URL, dataset.get("url").encode('ascii', 'ignore')))
guid = str(uuid.uuid3(uuid.NAMESPACE_URL,
dataset.get("url").encode('ascii', 'ignore')))
if guid not in package_ids_in_db:
obj = HarvestObject(job=harvest_job, guid=guid)
obj.content = json.dumps(dataset)
obj.save()
log.info("harvest_object_id: %s, GUID: %s successfully gathered " % (str(obj.id), str(obj.guid)))
log.info("harvest_object_id: %s, GUID: %s successfully gathered " % (
str(obj.id), str(obj.guid)))
used_identifiers.append(guid)
ids.append(obj.id)
except Exception as e:
self._save_gather_error(
'Statistik-Nord-Harvester: Error gathering the identifiers from the source server [%s]' % str(e),
'Kiel-Harvester: Error gathering the identifiers from the source server [%s]' % str(
e),
harvest_job)
log.error(e)
return None
......@@ -68,7 +71,8 @@ class KielHarvester(ODSHBaseHarvester):
return ids
else:
log.error("No records received")
self._save_gather_error("Couldn't find any metadata files", harvest_job)
self._save_gather_error(
"Couldn't find any metadata files", harvest_job)
return None
@staticmethod
......@@ -79,6 +83,7 @@ class KielHarvester(ODSHBaseHarvester):
return False
def import_stage(self, harvest_object):
log.debug('IMPORT')
context = {
'model': model,
'session': model.Session,
......@@ -89,12 +94,14 @@ class KielHarvester(ODSHBaseHarvester):
return False
if harvest_object.content is None:
self._save_object_error('Empty content for object %s' % harvest_object.id, harvest_object, 'Import')
self._save_object_error(
'Empty content for object %s' % harvest_object.id, harvest_object, 'Import')
return False
else:
package_dict = json.loads(harvest_object.content)
source_dataset = get_action('package_show')(context.copy(), {'id': harvest_object.source.id})
source_dataset = get_action('package_show')(
context.copy(), {'id': harvest_object.source.id})
package_dict['owner_org'] = source_dataset.get('owner_org')
if package_dict['type'] == 'datensatz':
......@@ -115,25 +122,39 @@ class KielHarvester(ODSHBaseHarvester):
package_dict['groups'] = mapped_groups
extras = package_dict['extras']
package_dict['extras'] = list()
new_extras = list()
for extra in extras:
if extra['key'] in ['temporal_start', 'temporal_end', 'issued']:
package_dict[extra['key']] = extra['value']
# WARNING: When this code was written, all datasets had '-zero-' licences, i.e.
# there was no key 'licenseAttributionByText' which we would expect for '-by-' licences.
# The setting is just anticipated, matching for datasets with a corresponding licence.
if extra['key'] == 'licenseAttributionByText':
new_extras.append(extra)
elif extra['key'] in ['temporal_start', 'temporal_end', 'issued']:
new_extras.append(extra)
new_extras.append(
{'key': 'spatial_uri',
'value': 'http://dcat-ap.de/def/politicalGeocoding/districtKey/01002'})
package_dict['spatial_uri'] = 'http://dcat-ap.de/def/politicalGeocoding/districtKey/01002'
package_dict['extras'] = new_extras
license_id = self._get_license_id(package_dict['license_id'])
if license_id:
package_dict['license_id'] = license_id
else:
log.error('invalid license_id: %s' % package_dict['license_id'])
self._save_object_error('Invalid license_id: %s' % package_dict['license_id'], harvest_object, 'Import')
log.error('invalid license_id: %s' %
package_dict['license_id'])
self._save_object_error(
'Invalid license_id: %s' % package_dict['license_id'], harvest_object, 'Import')
return False
try:
context = {'user': self._get_user_name(), 'return_id_only': True, 'ignore_auth': True}
package_plugin = lib_plugins.lookup_package_plugin(package_dict.get('type', None))
context = {'user': self._get_user_name(
), 'return_id_only': True, 'ignore_auth': True}
package_plugin = lib_plugins.lookup_package_plugin(
package_dict.get('type', None))
package_schema = package_plugin.create_package_schema()
context['schema'] = package_schema
log.debug(package_schema)
self._handle_current_harvest_object(harvest_object, harvest_object.guid)
result = toolkit.get_action('package_create')(context, package_dict)
return result
......
......@@ -125,24 +125,11 @@ class StatistikamtNordHarvester(ODSHBaseHarvester):
self.map_fields(context, harvest_object)
return True
@staticmethod
def _update_schema(schema):
schema.update({'temporal_start': [
toolkit.get_validator('ignore_empty'),
toolkit.get_converter('convert_to_extras')]})
schema.update({'temporal_end': [
toolkit.get_validator('ignore_empty'),
toolkit.get_converter('convert_to_extras')]})
schema.update({'issued': [
toolkit.get_validator('ignore_missing'),
toolkit.get_validator('ignore_empty'),
toolkit.get_converter('convert_to_extras')]})
def map_fields(self, context, harvest_object):
values = json.loads(harvest_object.content)
package_dict = dict()
package_dict.update({'resources': [], 'tags': [], 'groups': []})
package_dict.update({'resources': [], 'tags': [], 'groups': [], 'extras': []})
title = values['Titel']
package_dict.update({'title': title})
package_dict.update({'name': self._gen_new_name(title)})
......@@ -161,17 +148,10 @@ class StatistikamtNordHarvester(ODSHBaseHarvester):
package_dict['url'] = ""
package_dict.update({'type': 'dataset'})
package_dict.update({'licenseAttributionByText': 'Statistisches Amt für Hamburg und Schleswig-Holstein -'
' Anstalt des öffentlichen Rechts - (Statistikamt Nord)'})
package_dict.update({'temporal_start': datetime.datetime.strptime(values['ZeitraumVon'], '%Y-%m-%d').isoformat()})
package_dict.update({'temporal_end': datetime.datetime.strptime(values['ZeitraumBis'], '%Y-%m-%d').isoformat()})
package_dict.update({'spatial_uri': 'http://dcat-ap.de/def/politicalGeocoding/stateKey/01'})
# issued sollte noch geliefert werden!
package_dict.update({'issued': datetime.datetime.utcnow().isoformat()})
self.add_ressources(package_dict, values)
self.add_tags(package_dict, values)
self.add_extras(package_dict, values)
self.map_to_group(package_dict, values)
source_dataset = get_action('package_show')(context.copy(), {'id': harvest_object.source.id})
......@@ -183,9 +163,7 @@ class StatistikamtNordHarvester(ODSHBaseHarvester):
try:
context = {'user': self._get_user_name(), 'return_id_only': True, 'ignore_auth': True}
package_plugin = lib_plugins.lookup_package_plugin(package_dict.get('type', None))
package_schema = package_plugin.create_package_schema()
self._update_schema(package_schema)
context['schema'] = package_schema
context['schema'] = package_plugin.create_package_schema()
self._handle_current_harvest_object(harvest_object, harvest_object.guid)
result = toolkit.get_action('package_create')(context, package_dict)
return result
......@@ -193,6 +171,27 @@ class StatistikamtNordHarvester(ODSHBaseHarvester):
self._save_object_error('Validation Error: %s' % str(e.error_summary), harvest_object, 'Import')
return False
@staticmethod
def add_extras(package_dict, values):
# issued sollte noch geliefert werden!
package_dict['extras'].append({
'key': 'issued', 'value': datetime.datetime.now().isoformat()})
try:
if values['ZeitraumVon'] != "":
package_dict['extras'].append({
'key': 'temporal_start', 'value': values['ZeitraumVon']})
if values['ZeitraumBis'] != "":
package_dict['extras'].append({
'key': 'temporal_end', 'value': values['ZeitraumBis']})
except KeyError as kerr:
log.debug("Date not available: " + str(kerr))
package_dict['extras'].append({
'key': 'spatial_uri', 'value': 'http://dcat-ap.de/def/politicalGeocoding/stateKey/01'})
package_dict['extras'].append({
'key': 'licenseAttributionByText',
'value': 'Statistisches Amt für Hamburg und Schleswig-Holstein - '
'Anstalt des öffentlichen Rechts - (Statistikamt Nord)'})
@staticmethod
def add_tags(package_dict, values):
tags = values['Schlagwoerter']['Schlagwort']
......
......@@ -129,10 +129,15 @@ def odsh_validate_extra_date(key, field, data, errors, context):
value = _extract_value(key, data, field)
if not value:
# Statistikamt Nord does not always provide temporal_start/end,
# but their datasets have to be accepted as they are.
if data[('id',)][:7] != 'StaNord':
raise toolkit.Invalid(field+':odsh_'+field+'_error_label')
else:
try:
datetime.datetime.strptime(value, '%Y-%m-%d')
# date.split('T')[0] will yield "2012-01-01"
# no matter if the date is like "2012-01-01" or "2012-01-01T00:00:00"
datetime.datetime.strptime(value.split('T')[0],'%Y-%m-%d').isoformat()
except ValueError:
raise toolkit.Invalid(field+':odsh_'+field+'_not_date_error_label')
......
......@@ -21,7 +21,6 @@ class TestSearch(helpers.FunctionalTestBase):
def teardown(self):
model.repo.rebuild_db()
@odsh_test()
def test_dataset_is_in_search_result(self):
# arrange
......@@ -58,9 +57,9 @@ class TestSearch(helpers.FunctionalTestBase):
@odsh_test()
def test_query_with_start_date_finds_one_dataset(self):
# arrange
datasetA = self._create_dataset('dataseta', '01-01-1960', '31-12-1960')
datasetB = self._create_dataset('datasetb', '01-01-1980', '30-06-1990')
datasetC = self._create_dataset('datasetc', '01-03-2001', '30-04-2001')
datasetA = self._create_dataset('dataseta', '1960-01-01', '1960-12-31')
datasetB = self._create_dataset('datasetb', '1980-01-01', '1990-06-30')
datasetC = self._create_dataset('datasetc', '2001-03-01', '2001-04-30')
# act
response1 = self._perform_date_search(None, '1990-01-01')
......@@ -95,15 +94,19 @@ class TestSearch(helpers.FunctionalTestBase):
def _assert_no_results(self, response):
assert "No datasets found" in response
def _create_dataset(self, name='my-own-dataset', temporal_start='27-01-2000', temporal_end='27-01-2000'):
def _create_dataset(self, name='my-own-dataset', temporal_start='2000-01-27', temporal_end='2000-01-27'):
user = factories.User()
extras = [
{'key': 'temporal_start', 'value': temporal_start},
{'key': 'temporal_end', 'value': temporal_end},
{'key': 'issued', 'value': '2000-01-27'},
{'key': 'spatial_uri', 'value': 'http://dcat-ap.de/def/politicalGeocoding/districtKey/01001'}
]
return factories.Dataset(user=user,
name=name,
title='My very own dataset',
issued='27-01-2000',
spatial_uri='http://dcat-ap.de/def/politicalGeocoding/districtKey/01001',
temporal_start=temporal_start,
temporal_end=temporal_end)
extras=extras)
def _perform_search(self, query=None):
search_form = self._perform_search_for_form('dataset-search-box-form')
......
This diff is collapsed.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment