Skip to content
Snippets Groups Projects
Commit e9ac798f authored by Thorge Petersen's avatar Thorge Petersen
Browse files

Merge branch 'fix-known-spatial-uri-validation' into dev

parents 3c13ccda 7198dba3
No related branches found
No related tags found
No related merge requests found
......@@ -2,7 +2,9 @@
import logging
import csv
import re
import urllib.request, urllib.error, urllib.parse
import urllib.request
import urllib.error
import urllib.parse
import json
import ckan.logic as logic
......@@ -71,7 +73,8 @@ def validate_extras(key, data, errors, context):
extra_errors = {}
isStaNord = ('id',) in data and data[('id',)][:7] == 'StaNord'
harvesting = ('ignore_auth' in context) and (context['ignore_auth'] == True)
harvesting = ('ignore_auth' in context) and (
context['ignore_auth'] == True)
owner_org = data[('owner_org',)]
lenient_with = tk.config.get('ckanext.odsh.lenient_with', '')
......@@ -115,6 +118,7 @@ def validate_extras(key, data, errors, context):
if len(list(extra_errors.values())):
raise toolkit.Invalid(extra_errors)
def is_date_start_before_date_end(data, extra_errors):
start_date = _extract_value(data, 'temporal_start')
end_date = _extract_value(data, 'temporal_end')
......@@ -122,6 +126,7 @@ def is_date_start_before_date_end(data, extra_errors):
if start_date > end_date:
extra_errors['temporal_start'] = extra_errors['temporal_end'] = 'Please enter a valid period of time.'
def _set_value(data, field, value):
key = None
for k in list(data.keys()):
......@@ -219,23 +224,28 @@ def known_spatial_uri(key, data, errors, context):
return
extension_path = pkg_resources.resource_filename('ckanext.odsh', '')
mapping_path = tk.config.get('ckanext.odsh.spatial.mapping', extension_path + '/resources/schleswig-holstein_geojson.csv')
mapping_path = tk.config.get('ckanext.odsh.spatial.mapping',
extension_path + '/resources/schleswig-holstein_geojson.csv')
not_found = True
spatial_text = str()
spatial = str()
try:
with open(mapping_path, newline='') as mapping_file:
cr = csv.reader(mapping_file, delimiter="\t")
for row in cr:
if row[0] == value:
if row and len(row) > 2 and row[0] == value:
not_found = False
spatial_text = row[1]
loaded = json.loads(row[2])
spatial = json.dumps(loaded['geometry'])
spatial = json.dumps(loaded.get('geometry', {}))
break
if not_found:
raise toolkit.Invalid(
'spatial_uri: uri unknown')
raise toolkit.Invalid('spatial_uri: uri unknown')
except (IOError, json.decoder.JSONDecodeError, KeyError) as e:
log.error(f"Error processing spatial mapping: {e}")
raise toolkit.Invalid("Error processing spatial mapping")
new_index = next_extra_index(data)
......@@ -275,7 +285,8 @@ def validate_relatedPackage(data):
try:
get_package_dict(data)
except logic.NotFound:
raise toolkit.Invalid("relatedPackage: package '{}' not found".format(data))
raise toolkit.Invalid(
"relatedPackage: package '{}' not found".format(data))
def validate_formats(data, errors):
......@@ -283,7 +294,8 @@ def validate_formats(data, errors):
raise toolkit.Invalid('Missing format.')
if not any(data.upper() == obj['key'] for obj in odsh_resource_formats()):
raise toolkit.Invalid(_('Only formats on the list of the EU Publications Office are allowed.'))
raise toolkit.Invalid(
_('Only formats on the list of the EU Publications Office are allowed.'))
return data
......@@ -293,7 +305,8 @@ def tag_name_validator(value, context):
"""
tagname_match = re.compile(r'^(?=.*[^\n])[^\n]*$', re.UNICODE)
if not tagname_match.match(value):
raise toolkit.Invalid(_('Invalid tag: "%s". Tags cannot contain line breaks.') % (value))
raise toolkit.Invalid(
_('Invalid tag: "%s". Tags cannot contain line breaks.') % (value))
return value
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment