diff --git a/ckanext/odsh/harvesters/statistikamtnordharvester.py b/ckanext/odsh/harvesters/statistikamtnordharvester.py index 6e5d567974441657c681de0015e55f055cafca22..003691cfcae566b1bb81c505d820f47c779f20a1 100755 --- a/ckanext/odsh/harvesters/statistikamtnordharvester.py +++ b/ckanext/odsh/harvesters/statistikamtnordharvester.py @@ -133,6 +133,10 @@ class StatistikamtNordHarvester(ODSHBaseHarvester): 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) diff --git a/ckanext/odsh/plugin.py b/ckanext/odsh/plugin.py index fb0f65477161e55d77cbf13360ae3ab335335e66..4dcff1703b219f6a9bc6e910e2a5bf5bc0b8f4e3 100644 --- a/ckanext/odsh/plugin.py +++ b/ckanext/odsh/plugin.py @@ -3,14 +3,18 @@ import ckan.plugins as plugins import ckan.plugins.toolkit as toolkit from ckan.lib.plugins import DefaultTranslation from ckan.lib.plugins import DefaultDatasetForm +from ckan.logic.validators import tag_string_convert from ckan.common import OrderedDict from ckanext.odsh.lib.uploader import ODSHResourceUpload import ckan.lib.helpers as helpers import helpers as odsh_helpers + +from itertools import count from routes.mapper import SubMapper from pylons import config import urllib2 import csv +import re import logging @@ -19,7 +23,7 @@ log = logging.getLogger(__name__) _ = toolkit._ def odsh_get_facet_items_dict(name, limit=None): - ''' + ''' Gets all facets like 'get_facet_items_dict' but sorted alphabetically instead by count. ''' @@ -51,7 +55,7 @@ def odsh_convert_groups_string(value,context): ret.append(g) return ret - + def odsh_now(): return helpers.render_datetime(datetime.datetime.now(),"%Y-%m-%d") @@ -98,6 +102,34 @@ def known_spatial_uri(key, data, errors, context): data[('extras', new_index+1, 'key')] = 'spatial' data[('extras', new_index+1, 'value')] = spatial +def odsh_tag_name_validator(value, context): + tagname_match = re.compile('[\w \-.\:\(\)]*$', re.UNICODE) + if not tagname_match.match(value): + raise toolkit.Invalid(_('Tag "%s" must be alphanumeric ' + 'characters or symbols: -_.:()') % (value)) + return value + +def odsh_tag_string_convert(key, data, errors, context): + '''Takes a list of tags that is a comma-separated string (in data[key]) + and parses tag names. These are added to the data dict, enumerated. They + are also validated.''' + + if isinstance(data[key], basestring): + tags = [tag.strip() \ + for tag in data[key].split(',') \ + if tag.strip()] + else: + tags = data[key] + + current_index = max( [int(k[1]) for k in data.keys() if len(k) == 3 and k[0] == 'tags'] + [-1] ) + + for num, tag in zip(count(current_index+1), tags): + data[('tags', num, 'name')] = tag + + for tag in tags: + toolkit.get_validator('tag_length_validator')(tag, context) + odsh_tag_name_validator(tag, context) + class OdshIcapPlugin(plugins.SingletonPlugin): plugins.implements(plugins.IUploader, inherit=True) @@ -224,6 +256,13 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm for field in self._fields(): schema.update({field: [toolkit.get_converter('not_empty')]}) + for i, item in enumerate(schema['tags']['name']): + if item == toolkit.get_validator('tag_name_validator'): + schema['tags']['name'][i] = toolkit.get_validator('odsh_tag_name_validator') + for i, item in enumerate(schema['tag_string']): + if item == tag_string_convert: + schema['tag_string'][i] = odsh_tag_string_convert + schema['resources'].update({ 'url' : [ toolkit.get_converter('not_empty') ] }) @@ -258,5 +297,6 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm def get_validators(self): return { 'odsh_convert_groups_string': odsh_convert_groups_string, - 'known_spatial_uri': known_spatial_uri} + 'known_spatial_uri': known_spatial_uri, + 'odsh_tag_name_validator': odsh_tag_name_validator} diff --git a/ckanext/odsh/templates/package/snippets/info.html b/ckanext/odsh/templates/package/snippets/info.html index c602b0c6065af22a5cbfa64d1427eaaad676c11d..d1d52432974a7729118777a98aeb54d0620c0954 100644 --- a/ckanext/odsh/templates/package/snippets/info.html +++ b/ckanext/odsh/templates/package/snippets/info.html @@ -60,7 +60,7 @@ Example: {% block last_change %} <div class="last-change-detail info-detail"> - {%set issued=h.odsh_render_datetime(pkg.issued) if pkg.issued else '-'%} + {%set issued=h.odsh_render_datetime(pkg.issued) if pkg.issued else h.odsh_render_datetime(pkg.metadata_created)%} <div>{{ _('issued') }}:</div> {{issued}} </div> @@ -95,4 +95,4 @@ Example: </div> </section> {% endif %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/ckanext/odsh/templates/snippets/package_item.html b/ckanext/odsh/templates/snippets/package_item.html index 94e4a0667260607c01967b1580486c33829192ea..fcc2c3ee73179fd8a42f279bd12468b01536ebb8 100644 --- a/ckanext/odsh/templates/snippets/package_item.html +++ b/ckanext/odsh/templates/snippets/package_item.html @@ -28,7 +28,7 @@ Example: {% set access_count=(package.tracking_summary.total if package.tracking_summary) or '-' %} {% set timerange_label ='Zeitraum' %} {% set access_count_label ='Aufrufe' %} -{% set issued = h.odsh_render_datetime(package.issued) if package.issued else '-'%} +{% set issued = h.odsh_render_datetime(package.issued) if package.issued else h.odsh_render_datetime(package.metadata_created) %} {% set categories = package.groups|map(attribute='display_name')|join(', ') if package.groups else '-' %} {% block package_item %} @@ -109,4 +109,4 @@ Example: {% endblock %} {% endblock %} </div> -{% endblock %} \ No newline at end of file +{% endblock %}