Skip to content
Snippets Groups Projects
Commit 16bd3b61 authored by anonymous's avatar anonymous
Browse files

ODPSH-319: fix date handling

parent 5e4bb8fe
No related branches found
No related tags found
No related merge requests found
No preview for this file type
...@@ -177,9 +177,21 @@ msgstr "Bitte geben Sie einen räumlichen Bezug an" ...@@ -177,9 +177,21 @@ msgstr "Bitte geben Sie einen räumlichen Bezug an"
msgid "odsh_temporal_start_error_label" msgid "odsh_temporal_start_error_label"
msgstr "Bitte wählen Sie einen Beginn des Zeitraumes aus" msgstr "Bitte wählen Sie einen Beginn des Zeitraumes aus"
msgid "temporal_start: empty"
msgstr "Bitte wählen Sie einen Beginn des Zeitraumes aus"
msgid "odsh_temporal_end_error_label" msgid "odsh_temporal_end_error_label"
msgstr "Bitte wählen Sie ein Ende des Zeitraumes aus" msgstr "Bitte wählen Sie ein Ende des Zeitraumes aus"
msgid "temporal_end: empty"
msgstr "Bitte wählen Sie ein Ende des Zeitraumes aus"
msgid "temporal_start: not a valid date"
msgstr "Bitte wählen Sie einen gültigen Beginn des Zeitraumes aus"
msgid "temporal_end: not a valid date"
msgstr "Bitte wählen Sie ein gültiges Ende des Zeitraumes aus"
msgid "odsh_temporal_error_label" msgid "odsh_temporal_error_label"
msgstr "Bitte geben Sie einen gültigen Zeitraum an" msgstr "Bitte geben Sie einen gültigen Zeitraum an"
......
...@@ -247,8 +247,6 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm ...@@ -247,8 +247,6 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm
schema['extras'].update({ schema['extras'].update({
'key': [ 'key': [
toolkit.get_converter('odsh_validate_temporal_start'),
toolkit.get_converter('odsh_validate_temporal_end'),
toolkit.get_converter('known_spatial_uri'), toolkit.get_converter('known_spatial_uri'),
] ]
}) })
......
...@@ -107,8 +107,8 @@ is_required=true,placeholder=_('Enter title')) }} ...@@ -107,8 +107,8 @@ is_required=true,placeholder=_('Enter title')) }}
{% endblock %} {% endblock %}
<!-- timerange --> <!-- timerange -->
{% set error_start = h.odsh_extract_error('temporal_start', errors) %} {% set error_start = h.odsh_extract_error_new('temporal_start', errors) %}
{% set error_end = h.odsh_extract_error('temporal_end', errors) %} {% set error_end = h.odsh_extract_error_new('temporal_end', errors) %}
{% set error_string = 'odsh_temporal_error_label' if error_start and error_end else (error_start if error_start else (error_end if error_end))%} {% set error_string = 'odsh_temporal_error_label' if error_start and error_end else (error_start if error_start else (error_end if error_end))%}
<label for="start-end" class="control-label">{{ _('timerange') }}: <label for="start-end" class="control-label">{{ _('timerange') }}:
<span title="{{ _("This field is required") }}" class="control-required">*</span> <span title="{{ _("This field is required") }}" class="control-required">*</span>
......
...@@ -21,12 +21,12 @@ def _extract_value(data, field): ...@@ -21,12 +21,12 @@ def _extract_value(data, field):
return None return None
return data[(key[0], key[1], 'value')] return data[(key[0], key[1], 'value')]
def validate_extra_groups(data, requireAtLeastOne): def validate_extra_groups(data, requireAtLeastOne, errors):
value = _extract_value(data, 'groups') value = _extract_value(data, 'groups')
if not value: if not value:
if not requireAtLeastOne: if requireAtLeastOne:
return None errors['groups']= 'at least one group needed'
return 'at least one group needed' return
groups = [g.strip() for g in value.split(',') if value.strip()] groups = [g.strip() for g in value.split(',') if value.strip()]
for k in data.keys(): for k in data.keys():
...@@ -34,29 +34,24 @@ def validate_extra_groups(data, requireAtLeastOne): ...@@ -34,29 +34,24 @@ def validate_extra_groups(data, requireAtLeastOne):
data[k]='' data[k]=''
# del data[k] # del data[k]
if len(groups)==0: if len(groups)==0:
if not requireAtLeastOne: if requireAtLeastOne:
return None errors['groups']= 'at least one group needed'
return 'at least one group needed' return
for num, tag in zip(range(len(groups)), groups): for num, tag in zip(range(len(groups)), groups):
data[('groups', num, 'id')] = tag data[('groups', num, 'id')] = tag
def validate_extras(key, data, errors, context): def validate_extras(key, data, errors, context):
pass
extra_errors = {} extra_errors = {}
error = validate_extra_groups(data,False) isStaNord = ('id',) in data and data[('id',)][:7] == 'StaNord'
if error:
extra_errors['groups'] = error
error = validate_extra_date_new(key, 'issued', data, False) validate_extra_groups(data, False, extra_errors)
if error: validate_extra_date_new(key, 'issued', data, False, extra_errors)
extra_errors['issued'] = error validate_extra_date_new(key, 'temporal_start', data, isStaNord, extra_errors)
validate_extra_date_new(key, 'temporal_end', data, True, extra_errors)
validate_licenseAttributionByText(data, extra_errors)
error = validate_licenseAttributionByText(data) if len(extra_errors.values()):
if error:
extra_errors['licenseAttributionByText'] = error
if extra_errors:
raise toolkit.Invalid(extra_errors) raise toolkit.Invalid(extra_errors)
def _set_value(data, field, value): def _set_value(data, field, value):
...@@ -69,25 +64,24 @@ def _set_value(data, field, value): ...@@ -69,25 +64,24 @@ def _set_value(data, field, value):
return None return None
data[(key[0], key[1], 'value')] = value data[(key[0], key[1], 'value')] = value
def validate_extra_date_new(key, field, data, optional=False): def validate_extra_date_new(key, field, data, optional, errors):
value = _extract_value(data, field) value = _extract_value(data, field)
if not value: if not value:
if optional: if not optional:
errors[field] = 'empty'
return return
# Statistikamt Nord does not always provide temporal_start/end,
# but their datasets have to be accepted as they are.
if not ('id',) in data or data[('id',)][:7] != 'StaNord':
return 'empty'
else: else:
if re.match(r'\d\d\d\d-\d\d-\d\d', value): if re.match(r'\d\d\d\d-\d\d-\d\d', value):
try: try:
print('parse')
print(value)
dt=parse(value) dt=parse(value)
_set_value(data, field, dt.isoformat()) _set_value(data, field, dt.isoformat())
return return
except ValueError: except ValueError:
pass pass
return 'not a valid date' errors[field] = 'not a valid date'
def validate_extra_date(key, field, data, optional=False): def validate_extra_date(key, field, data, optional=False):
value = _extract_value(data, field) value = _extract_value(data, field)
...@@ -113,7 +107,7 @@ def validate_extra_date(key, field, data, optional=False): ...@@ -113,7 +107,7 @@ def validate_extra_date(key, field, data, optional=False):
def validate_extra_date_factory(field, optional=False): def validate_extra_date_factory(field, optional=False):
return lambda key, data, errors, context: validate_extra_date(key, field, data, optional) return lambda key, data, errors, context: validate_extra_date(key, field, data, optional)
def validate_licenseAttributionByText(data): def validate_licenseAttributionByText(data, errors):
register = model.Package.get_license_register() register = model.Package.get_license_register()
isByLicense=False isByLicense=False
for k in data: for k in data:
...@@ -133,9 +127,9 @@ def validate_licenseAttributionByText(data): ...@@ -133,9 +127,9 @@ def validate_licenseAttributionByText(data):
hasAttribution = value != '' hasAttribution = value != ''
break break
if isByLicense and not hasAttribution: if isByLicense and not hasAttribution:
return 'empty not allowed' errors['licenseAttributionByText'] = 'empty not allowed'
if not isByLicense and hasAttribution: if not isByLicense and hasAttribution:
return 'text not allowed for this license' errors['licenseAttributionByText'] = 'text not allowed for this license'
def known_spatial_uri(key, data, errors, context): def known_spatial_uri(key, data, errors, context):
value = _extract_value(data, 'spatial_uri') value = _extract_value(data, 'spatial_uri')
...@@ -210,8 +204,6 @@ def tag_string_convert(key, data, errors, context): ...@@ -210,8 +204,6 @@ def tag_string_convert(key, data, errors, context):
def get_validators(): def get_validators():
return { return {
'known_spatial_uri': known_spatial_uri, 'known_spatial_uri': known_spatial_uri,
'odsh_validate_temporal_start': validate_extra_date_factory('temporal_start'),
'odsh_validate_temporal_end': validate_extra_date_factory('temporal_end', True),
'odsh_tag_name_validator': tag_name_validator, 'odsh_tag_name_validator': tag_name_validator,
'odsh_validate_extras':validate_extras 'odsh_validate_extras':validate_extras
} }
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment