Skip to content
Snippets Groups Projects
Commit 51bafa8e authored by Dennis's avatar Dennis
Browse files

spatial_uri is now a list of options instead of a text field

parent 9e582745
No related branches found
No related tags found
No related merge requests found
...@@ -11,6 +11,7 @@ from dateutil import parser ...@@ -11,6 +11,7 @@ from dateutil import parser
from ckan.common import config from ckan.common import config
import urllib import urllib
import hashlib import hashlib
import ckanext.odsh.model.spatial as _spatial
get_action = logic.get_action get_action = logic.get_action
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
...@@ -153,3 +154,15 @@ def odsh_extract_value_from_extras(extras, key): ...@@ -153,3 +154,15 @@ def odsh_extract_value_from_extras(extras, key):
if 'value' in item: if 'value' in item:
return item['value'] return item['value']
return None return None
def spatial_options():
'''
Returns [(l.spatial_text, l.spatial_uri), ...] for the licenses configured to be
offered.
'''
register = _spatial.SpatialRegister()
sorted_spatials = sorted(register.values(), key=lambda x: x.text)
spatial_uris = [spatial.uri for spatial in sorted_spatials]
return [(spatial_uri, register[spatial_uri].text if spatial_uri in register else spatial_uri)
for spatial_uri in spatial_uris]
from ckanext.odsh.model.statistiknord import * from ckanext.odsh.model.statistiknord import *
from spatial import Spatial, SpatialRegister
\ No newline at end of file
# encoding: utf-8
from ckan.common import config
from ckan.common import json
import urllib2
log = __import__('logging').getLogger(__name__)
class Spatial(object):
def __init__(self, uri, text):
self.uri = uri
self.text = text
class SpatialRegister(object):
def __init__(self):
spatial_url = config.get('ckanext.odsh.spatial.mapping', None)
if spatial_url:
self.load_spatial(spatial_url)
else:
default_spatial_dict = dict()
self._create_spatial_list(default_spatial_dict)
def load_spatial(self, spatial_url):
try:
response = urllib2.urlopen(spatial_url)
response_body = response.read()
except Exception as inst:
msg = "Couldn't connect to spatial service %r: %s" % (spatial_url, inst)
raise Exception(msg)
try:
spatial_data = json.loads(response_body)
except Exception as inst:
msg = "Couldn't read response from spatial service %r: %s" % (response_body, inst)
raise Exception(inst)
self._create_spatial_list(spatial_data, spatial_url)
def _create_spatial_list(self, spatial_data, spatial_url=''):
if isinstance(spatial_data, dict):
self.spatials = list()
for entity in spatial_data:
self.spatials.append(Spatial(entity, spatial_data[entity]['spatial_text']))
else:
msg = "Spatials at %s must be dictionary(json)" % spatial_url
raise ValueError(msg)
def __getitem__(self, key, default=Exception):
for spatial in self.spatials:
if key == spatial.uri:
return spatial
if default != Exception:
return default
else:
raise KeyError("Spatial not found: %s" % key)
def values(self):
return self.spatials
...@@ -229,7 +229,8 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm ...@@ -229,7 +229,8 @@ class OdshPlugin(plugins.SingletonPlugin, DefaultTranslation, DefaultDatasetForm
'odsh_encodeurl': odsh_helpers.odsh_encodeurl, 'odsh_encodeurl': odsh_helpers.odsh_encodeurl,
'odsh_extract_error': odsh_helpers.odsh_extract_error, 'odsh_extract_error': odsh_helpers.odsh_extract_error,
'odsh_extract_value_from_extras': odsh_helpers.odsh_extract_value_from_extras, 'odsh_extract_value_from_extras': odsh_helpers.odsh_extract_value_from_extras,
'odsh_create_checksum': odsh_helpers.odsh_create_checksum 'odsh_create_checksum': odsh_helpers.odsh_create_checksum,
'spatial_options': odsh_helpers.spatial_options
} }
def before_map(self, map): def before_map(self, map):
......
...@@ -190,7 +190,13 @@ is_required=true,placeholder=_('Enter title')) }} ...@@ -190,7 +190,13 @@ is_required=true,placeholder=_('Enter title')) }}
<div class="controls"> <div class="controls">
<div class="row-fluid"> <div class="row-fluid">
<div class="span6"> <div class="span6">
{{ form.input_extra(field, value=value, index=h.odsh_create_checksum(field), type='text', placeholder=_('Enter spatial uri')) }} <select id="field-spatial_uri" name="spatial_uri">
{% for spatial_uri, spatial_text in h.spatial_options() %}
<option value="{{ spatial_uri }}" {% if value==spatial_uri %}selected="selected" {% endif %}>
{{ spatial_text }}
</option>
{% endfor %}
</select>
</div> </div>
<div class="span6 inline-error"> <div class="span6 inline-error">
{% if error %} {% if error %}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment