diff --git a/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.mo b/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.mo index f6ea89603905f9e8c34163ed34e4c37f6745d5fb..6a4f231e3fe3eb077e58edd541d7f9df437152ed 100644 Binary files a/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.mo and b/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.mo differ diff --git a/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po b/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po index 9fc567af469450a0bf3b26b233e2450c43976f33..94c7e9e33739f35d27933ea7f02454afb923da2d 100644 --- a/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po +++ b/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po @@ -177,9 +177,21 @@ msgstr "Bitte geben Sie einen räumlichen Bezug an" msgid "odsh_temporal_start_error_label" 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" 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" msgstr "Bitte geben Sie einen gültigen Zeitraum an" diff --git a/ckanext/odsh/plugin.py b/ckanext/odsh/plugin.py index a60136bdc278e3afdec4cb2925f9c4d7a3eda454..744e6066b3e4a2dbd430f1962751e8813ec216d7 100644 --- a/ckanext/odsh/plugin.py +++ b/ckanext/odsh/plugin.py @@ -247,8 +247,6 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm schema['extras'].update({ 'key': [ - toolkit.get_converter('odsh_validate_temporal_start'), - toolkit.get_converter('odsh_validate_temporal_end'), toolkit.get_converter('known_spatial_uri'), ] }) diff --git a/ckanext/odsh/templates/package/snippets/package_basic_fields.html b/ckanext/odsh/templates/package/snippets/package_basic_fields.html index 8371d5d73f5175b54e670773ce6bcbd2fa3dcaac..4445b81a220c9d6650f9af49d31278d7a288b0e3 100644 --- a/ckanext/odsh/templates/package/snippets/package_basic_fields.html +++ b/ckanext/odsh/templates/package/snippets/package_basic_fields.html @@ -107,8 +107,8 @@ is_required=true,placeholder=_('Enter title')) }} {% endblock %} <!-- timerange --> - {% set error_start = h.odsh_extract_error('temporal_start', errors) %} - {% set error_end = h.odsh_extract_error('temporal_end', errors) %} + {% set error_start = h.odsh_extract_error_new('temporal_start', 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))%} <label for="start-end" class="control-label">{{ _('timerange') }}: <span title="{{ _("This field is required") }}" class="control-required">*</span> diff --git a/ckanext/odsh/validation.py b/ckanext/odsh/validation.py index 05fd5ade61e2fa74aa3ea1132a3a416ab20b94a5..0c2177f3e9ed6a5a246ee5b6dedbb62d28db475b 100644 --- a/ckanext/odsh/validation.py +++ b/ckanext/odsh/validation.py @@ -21,12 +21,12 @@ def _extract_value(data, field): return None 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') if not value: - if not requireAtLeastOne: - return None - return 'at least one group needed' + if requireAtLeastOne: + errors['groups']= 'at least one group needed' + return groups = [g.strip() for g in value.split(',') if value.strip()] for k in data.keys(): @@ -34,29 +34,24 @@ def validate_extra_groups(data, requireAtLeastOne): data[k]='' # del data[k] if len(groups)==0: - if not requireAtLeastOne: - return None - return 'at least one group needed' + if requireAtLeastOne: + errors['groups']= 'at least one group needed' + return for num, tag in zip(range(len(groups)), groups): data[('groups', num, 'id')] = tag def validate_extras(key, data, errors, context): - pass extra_errors = {} - error = validate_extra_groups(data,False) - if error: - extra_errors['groups'] = error + isStaNord = ('id',) in data and data[('id',)][:7] == 'StaNord' - error = validate_extra_date_new(key, 'issued', data, False) - if error: - extra_errors['issued'] = error + validate_extra_groups(data, False, extra_errors) + validate_extra_date_new(key, 'issued', data, False, extra_errors) + 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 error: - extra_errors['licenseAttributionByText'] = error - - if extra_errors: + if len(extra_errors.values()): raise toolkit.Invalid(extra_errors) def _set_value(data, field, value): @@ -69,25 +64,24 @@ def _set_value(data, field, value): return None 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) if not value: - if optional: - 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' + if not optional: + errors[field] = 'empty' + return else: if re.match(r'\d\d\d\d-\d\d-\d\d', value): try: + print('parse') + print(value) dt=parse(value) _set_value(data, field, dt.isoformat()) return except ValueError: pass - return 'not a valid date' + errors[field] = 'not a valid date' def validate_extra_date(key, field, data, optional=False): value = _extract_value(data, field) @@ -113,7 +107,7 @@ def validate_extra_date(key, field, data, optional=False): def validate_extra_date_factory(field, optional=False): 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() isByLicense=False for k in data: @@ -133,9 +127,9 @@ def validate_licenseAttributionByText(data): hasAttribution = value != '' break if isByLicense and not hasAttribution: - return 'empty not allowed' + errors['licenseAttributionByText'] = 'empty not allowed' 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): value = _extract_value(data, 'spatial_uri') @@ -210,8 +204,6 @@ def tag_string_convert(key, data, errors, context): def get_validators(): return { '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_validate_extras':validate_extras } \ No newline at end of file