diff --git a/ckanext/odsh/plugin.py b/ckanext/odsh/plugin.py index 4dcff1703b219f6a9bc6e910e2a5bf5bc0b8f4e3..b869e7108bbf1d5f67fe5721eedf7d4b6ba1d90e 100644 --- a/ckanext/odsh/plugin.py +++ b/ckanext/odsh/plugin.py @@ -8,6 +8,7 @@ from ckan.common import OrderedDict from ckanext.odsh.lib.uploader import ODSHResourceUpload import ckan.lib.helpers as helpers import helpers as odsh_helpers +import ckan.lib.navl.dictization_functions as df from itertools import count from routes.mapper import SubMapper @@ -21,6 +22,8 @@ import logging log = logging.getLogger(__name__) _ = toolkit._ +missing = df.missing +StopOnError = df.StopOnError def odsh_get_facet_items_dict(name, limit=None): ''' @@ -130,6 +133,20 @@ def odsh_tag_string_convert(key, data, errors, context): toolkit.get_validator('tag_length_validator')(tag, context) odsh_tag_name_validator(tag, context) +def odsh_not_empty(key, data, errors, context): + simple_value = data.get(key) + in_extras = False + + if key is not missing: + simple_key = key[0] + + for data_key, data_value in data.iteritems(): + if data_key[0] == 'extras' and data_value == simple_key: + in_extras = True + if (not simple_value or simple_value is missing) and not in_extras: + errors[key].append(_('Missing value')) + raise StopOnError + class OdshIcapPlugin(plugins.SingletonPlugin): plugins.implements(plugins.IUploader, inherit=True) @@ -246,12 +263,12 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm toolkit.get_converter('convert_to_extras')]}) elif field == 'spatial_uri': schema.update({field: [ - toolkit.get_converter('not_empty'), + toolkit.get_converter('odsh_not_empty'), toolkit.get_converter('known_spatial_uri'), toolkit.get_converter('convert_to_extras')]}) else: schema.update({field: [ - toolkit.get_converter('not_empty'), + toolkit.get_converter('odsh_not_empty'), toolkit.get_converter('convert_to_extras')]}) for field in self._fields(): schema.update({field: [toolkit.get_converter('not_empty')]}) @@ -298,5 +315,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, - 'odsh_tag_name_validator': odsh_tag_name_validator} + 'odsh_tag_name_validator': odsh_tag_name_validator, + 'odsh_not_empty': odsh_not_empty}