diff --git a/ckanext/odsh/helpers.py b/ckanext/odsh/helpers.py index d2d07cfb9252dc6e992bb7bdae9d85d98bf0f866..92ee251f9a24963ab2c2607ae0f8db6b62ac9787 100644 --- a/ckanext/odsh/helpers.py +++ b/ckanext/odsh/helpers.py @@ -160,6 +160,8 @@ def odsh_extract_error(key, errors, field='extras'): return error.replace(key+':', '') def odsh_extract_error_new(key, errors): + print('ERRORS') + print(errors) if not errors or not ('__extras' in errors): return None error = errors['__extras'][0].get(key,None) diff --git a/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.mo b/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.mo index 6c58f6b551b398f3a3e09aed54d9584bf7cb6417..621d249dadacd7b628fc15fa6ccd6f87096605a4 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 950414e8c55a260ff08470e071caa4493becca38..65fedcd30ec440290573a2481989e0ff9dbb1b8b 100644 --- a/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po +++ b/ckanext/odsh/i18n/de/LC_MESSAGES/ckanext-odsh.po @@ -207,10 +207,16 @@ msgstr "Bitte geben Sie einen Titel ein" msgid "odsh_issued_error_label" msgstr "Bitte wählen Sie ein Veröffentlichungsdatum" +msgid "issued: empty" +msgstr "Bitte wählen Sie ein Veröffentlichungsdatum" + msgid "odsh_issued_not_date_error_label" msgstr "Bitte wählen Sie ein korrektes Veröffentlichungsdatum" +msgid "issued: not a valid date" +msgstr "Bitte wählen Sie ein korrektes Veröffentlichungsdatum" + msgid "Tag string: Fehlender Wert" msgstr "Bitte wählen Sie geeignete Schlagwörter" diff --git a/ckanext/odsh/plugin.py b/ckanext/odsh/plugin.py index 71ecf35fbebce2d39476d2a6702f0d4166f3fbac..52d4e62a5dfd6d090c1afa5ff0d75aa40eca7f78 100644 --- a/ckanext/odsh/plugin.py +++ b/ckanext/odsh/plugin.py @@ -253,7 +253,6 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm schema['extras'].update({ 'key': [ - toolkit.get_converter('odsh_validate_issued'), 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 5426a680080d2e4feea35e8c5e35f6267fd3cb3c..29ba4e244271eadd5fa17428093b6ddc8a261fc0 100644 --- a/ckanext/odsh/templates/package/snippets/package_basic_fields.html +++ b/ckanext/odsh/templates/package/snippets/package_basic_fields.html @@ -158,8 +158,8 @@ is_required=true,placeholder=_('Enter title')) }} {% set field = 'issued' %} {% set data_issued = h.odsh_extract_value_from_extras(data.extras,field) %} - {% set value = data_issued.split('T')[0] if data_issued else h.odsh_now()%} - {% set error = h.odsh_extract_error(field, errors) %} + {% set error = h.odsh_extract_error_new(field, errors) %} + {% set value = data_issued.split('T')[0] if data_issued else (h.odsh_now() if not error else '')%} <div class="control-group {{ " error" if error }} control-full"> <label class="control-label" for="field-{{field}}">Veröffentlichungsdatum: <span title="Dieses Feld ist erforderlich" class="control-required">*</span> </label> <div class="controls"> @@ -172,7 +172,7 @@ is_required=true,placeholder=_('Enter title')) }} </div> <div class="span6 inline-error"> {% if error %} - {{_(error)}} + {{_('issued: ' + error)}} {% endif %} </div> </div> diff --git a/ckanext/odsh/validation.py b/ckanext/odsh/validation.py index 3a6d6ef8d77cce82e51b8191c2590fb6028da5ed..4b9c0db75e5f1c9dcbb8c6d48cbb84701b835f14 100644 --- a/ckanext/odsh/validation.py +++ b/ckanext/odsh/validation.py @@ -24,7 +24,7 @@ def _extract_value(data, field): def validate_extra_groups(data): value = _extract_value(data, 'groups') if not value: - raise toolkit.Invalid({'groups':'at least one group needed'}) + return 'at least one group needed' groups = [g.strip() for g in value.split(',') if value.strip()] for k in data.keys(): @@ -32,13 +32,24 @@ def validate_extra_groups(data): data[k]='' # del data[k] if len(groups)==0: - raise toolkit.Invalid({'groups':'at least one group needed'}) + return 'at least one group needed' for num, tag in zip(range(len(groups)), groups): data[('groups', num, 'id')] = tag def validate_extras(key, data, errors, context): - validate_extra_groups(data) + pass + extra_errors = {} + error = validate_extra_groups(data) + if error: + extra_errors['groups'] = error + + error = validate_extra_date_new(key, 'issued', data, False) + if error: + extra_errors['issued'] = error + + if extra_errors: + raise toolkit.Invalid(extra_errors) def _set_value(data, field, value): key = None @@ -50,12 +61,32 @@ def _set_value(data, field, value): return None data[(key[0], key[1], 'value')] = value -def validate_extra_date(key, field, data, errors, context): +def validate_extra_date_new(key, field, data, optional=False): + 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' + else: + if re.match(r'\d\d\d\d-\d\d-\d\d', value): + try: + dt=parse(value) + _set_value(data, field, dt.isoformat()) + return + except ValueError: + pass + return 'not a valid date' + +def validate_extra_date(key, field, data, optional=False): value = _extract_value(data, field) if not value: - if field == 'temporal_end': - return # temporal_end is optional + 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': @@ -71,8 +102,8 @@ def validate_extra_date(key, field, data, errors, context): raise toolkit.Invalid(field+':odsh_'+field+'_not_date_error_label') -def validate_extra_date_factory(field): - return lambda key, data, errors, context: validate_extra_date(key, field, data, errors, context) +def validate_extra_date_factory(field, optional=False): + return lambda key, data, errors, context: validate_extra_date(key, field, data, optional) def validate_licenseAttributionByText(key, data, errors, context): register = model.Package.get_license_register() @@ -172,9 +203,8 @@ def get_validators(): return { 'licenseAttributionByText': validate_licenseAttributionByText, 'known_spatial_uri': known_spatial_uri, - 'odsh_validate_issued': validate_extra_date_factory('issued'), 'odsh_validate_temporal_start': validate_extra_date_factory('temporal_start'), - 'odsh_validate_temporal_end': validate_extra_date_factory('temporal_end'), + '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