Skip to content

Commit

Permalink
[#98] Minor tweaks to @u10313335 PR
Browse files Browse the repository at this point in the history
* Keep old entry points for preview plugins so people does not need to
  do python setup.py develop

* Version checks should be done including the min_version parameter,
  otherwise they will fail for 2.4, 2.5...

* No need to define different methods for different interfaces. If
  running eg 2.3, the IResourcePreview interface methods will simply be
  ignored.

* Simplified same domain checking

* Add note about these being eventually migrated to ckanext-geoviews

* Added docs
  • Loading branch information
amercader committed Apr 2, 2015
1 parent c9c4060 commit 4a142e8
Show file tree
Hide file tree
Showing 3 changed files with 105 additions and 95 deletions.
185 changes: 96 additions & 89 deletions ckanext/spatial/nongeos_plugin.py
@@ -1,16 +1,17 @@
# TODO: Move these to ckanext-geoviews

import mimetypes
from logging import getLogger

from ckan import plugins as p
import ckan.lib.datapreview as datapreview


log = getLogger(__name__)


class DataViewBase(p.SingletonPlugin):
'''This base class is for view extensions. '''
if p.toolkit.check_ckan_version('2.3'):
if p.toolkit.check_ckan_version(min_version='2.3'):
p.implements(p.IResourceView, inherit=True)
else:
p.implements(p.IResourcePreview, inherit=True)
Expand All @@ -33,74 +34,75 @@ def configure(self, config):

def setup_template_variables(self, context, data_dict):
import ckanext.resourceproxy.plugin as proxy
if p.toolkit.check_ckan_version('2.3'):
self.same_domain = datapreview.on_same_domain(data_dict)
else:
self.same_domain = datapreview._on_same_domain(data_dict)
self.same_domain = data_dict['resource'].get('on_same_domain')
if self.proxy_is_enabled and not self.same_domain:
data_dict['resource']['original_url'] = data_dict['resource']['url']
data_dict['resource']['url'] = proxy.get_proxified_resource_url(data_dict)



class WMSView(DataViewBase):
WMS = ['wms']

if p.toolkit.check_ckan_version('2.3'):
def info(self):
return {'name': 'wms_view',
'title': 'wms',
'icon': 'map-marker',
'iframed': True,
'default_title': p.toolkit._('WMS'),
}

def can_view(self, data_dict):
resource = data_dict['resource']
format_lower = resource['format'].lower()

if format_lower in self.WMS:
return self.same_domain or self.proxy_is_enabled
return False

def view_template(self, context, data_dict):
return 'dataviewer/wms.html'
else:
def can_preview(self, data_dict):
format_lower = data_dict['resource']['format'].lower()

correct_format = format_lower in self.WMS
can_preview_from_domain = self.proxy_is_enabled or data_dict['resource']['on_same_domain']
quality = 2

if p.toolkit.check_ckan_version('2.1'):
if correct_format:
if can_preview_from_domain:
return {'can_preview': True, 'quality': quality}
else:
return {'can_preview': False,
'fixable': 'Enable resource_proxy',
'quality': quality}
# IResourceView (CKAN >=2.3)
def info(self):
return {'name': 'wms_view',
'title': 'WMS',
'icon': 'map-marker',
'iframed': True,
'default_title': p.toolkit._('WMS'),
}

def can_view(self, data_dict):
resource = data_dict['resource']
format_lower = resource['format'].lower()

if format_lower in self.WMS:
return self.same_domain or self.proxy_is_enabled
return False

def view_template(self, context, data_dict):
return 'dataviewer/wms.html'

# IResourcePreview (CKAN < 2.3)

def can_preview(self, data_dict):
format_lower = data_dict['resource']['format'].lower()

correct_format = format_lower in self.WMS
can_preview_from_domain = self.proxy_is_enabled or data_dict['resource']['on_same_domain']
quality = 2

if p.toolkit.check_ckan_version('2.1'):
if correct_format:
if can_preview_from_domain:
return {'can_preview': True, 'quality': quality}
else:
return {'can_preview': False, 'quality': quality}
return {'can_preview': False,
'fixable': 'Enable resource_proxy',
'quality': quality}
else:
return {'can_preview': False, 'quality': quality}

return correct_format and can_preview_from_domain
return correct_format and can_preview_from_domain

def preview_template(self, context, data_dict):
return 'dataviewer/wms.html'
def preview_template(self, context, data_dict):
return 'dataviewer/wms.html'

def setup_template_variables(self, context, data_dict):
import ckanext.resourceproxy.plugin as proxy
if p.toolkit.check_ckan_version('2.3'):
self.same_domain = datapreview.on_same_domain(data_dict)
else:
self.same_domain = datapreview._on_same_domain(data_dict)
self.same_domain = data_dict['resource'].get('on_same_domain')
if self.proxy_is_enabled and not self.same_domain:
data_dict['resource']['proxy_url'] = proxy.get_proxified_resource_url(data_dict)

else:
data_dict['resource']['proxy_url'] = data_dict['resource']['url']


class WMSPreview(WMSView):
pass


class GeoJSONView(DataViewBase):
p.implements(p.ITemplateHelpers, inherit=True)

Expand All @@ -113,50 +115,52 @@ def update_config(self, config):

mimetypes.add_type('application/json', '.geojson')

if p.toolkit.check_ckan_version('2.3'):
def info(self):
return {'name': 'geojson_view',
'title': 'GeoJSON',
'icon': 'map-marker',
'iframed': True,
'default_title': p.toolkit._('GeoJSON'),
}

def can_view(self, data_dict):
resource = data_dict['resource']
format_lower = resource['format'].lower()

if format_lower in self.GeoJSON:
return self.same_domain or self.proxy_is_enabled
return False

def view_template(self, context, data_dict):
return 'dataviewer/geojson.html'
else:
def can_preview(self, data_dict):
format_lower = data_dict['resource']['format'].lower()

correct_format = format_lower in self.GeoJSON
can_preview_from_domain = self.proxy_is_enabled or data_dict['resource']['on_same_domain']
quality = 2

if p.toolkit.check_ckan_version('2.1'):
if correct_format:
if can_preview_from_domain:
return {'can_preview': True, 'quality': quality}
else:
return {'can_preview': False,
'fixable': 'Enable resource_proxy',
'quality': quality}
# IResourceView (CKAN >=2.3)
def info(self):
return {'name': 'geojson_view',
'title': 'GeoJSON',
'icon': 'map-marker',
'iframed': True,
'default_title': p.toolkit._('GeoJSON'),
}

def can_view(self, data_dict):
resource = data_dict['resource']
format_lower = resource['format'].lower()

if format_lower in self.GeoJSON:
return self.same_domain or self.proxy_is_enabled
return False

def view_template(self, context, data_dict):
return 'dataviewer/geojson.html'

# IResourcePreview (CKAN < 2.3)

def can_preview(self, data_dict):
format_lower = data_dict['resource']['format'].lower()

correct_format = format_lower in self.GeoJSON
can_preview_from_domain = self.proxy_is_enabled or data_dict['resource']['on_same_domain']
quality = 2

if p.toolkit.check_ckan_version('2.1'):
if correct_format:
if can_preview_from_domain:
return {'can_preview': True, 'quality': quality}
else:
return {'can_preview': False, 'quality': quality}
return {'can_preview': False,
'fixable': 'Enable resource_proxy',
'quality': quality}
else:
return {'can_preview': False, 'quality': quality}

return correct_format and can_preview_from_domain
return correct_format and can_preview_from_domain

def preview_template(self, context, data_dict):
return 'dataviewer/geojson.html'
def preview_template(self, context, data_dict):
return 'dataviewer/geojson.html'

## ITemplateHelpers
# ITemplateHelpers

def get_helpers(self):
from ckanext.spatial import helpers as spatial_helpers
Expand All @@ -167,3 +171,6 @@ def get_helpers(self):
return {
'get_common_map_config_geojson' : spatial_helpers.get_common_map_config,
}

class GeoJSONPreview(GeoJSONView):
pass
11 changes: 7 additions & 4 deletions doc/previews.rst
Expand Up @@ -17,13 +17,14 @@ The GeoJSON previewer is based on Leaflet_. It will render GeoJSON_ files on a
map and add a popup showing the features properties, for those resources that
have a format of ``geojson`` or ``gjson``.

To enable the GeoJSON previewer you need to add the ``geojson_preview`` plugin
To enable the GeoJSON previewer you need to add the ``geojson_view`` plugin
to your ini file. This plugin also requires the `resource_proxy`_
plugin (Make sure you load the ``resource_proxy`` plugin before any other
from the spatial extension)::

ckan.plugins = resource_proxy geojson_preview
ckan.plugins = resource_proxy geojson_view

.. note:: If using CKAN < 2.3, use `geojson_preview`

WMS Preview
-----------
Expand All @@ -39,12 +40,14 @@ just the main WMS service endpoint, for example:

http://vmap0.tiles.osgeo.org/wms/vmap0?SERVICE=WMS&REQUEST=GetCapabilities&VERSION=1.1.1

To enable the WMS previewer you need to add the ``wms_preview`` plugin to your
To enable the WMS previewer you need to add the ``wms_view`` plugin to your
ini file. This plugin also requires the `resource_proxy`_
plugin (Make sure you load the ``resource_proxy`` plugin before any other
from the spatial extension::

ckan.plugins = resource_proxy wms_preview
ckan.plugins = resource_proxy wms_view

.. note:: If using CKAN < 2.3, use `geojson_preview`

.. note:: Please note that the WMS previewer included in ckanext-spatial is
just a proof of concept and has important limitations, and is
Expand Down
4 changes: 2 additions & 2 deletions setup.py
Expand Up @@ -32,8 +32,8 @@
spatial_query=ckanext.spatial.plugin:SpatialQuery
wms_view=ckanext.spatial.nongeos_plugin:WMSView
geojson_view=ckanext.spatial.nongeos_plugin:GeoJSONView
wms_preview=ckanext.spatial.nongeos_plugin:WMSView
geojson_preview=ckanext.spatial.nongeos_plugin:GeoJSONView
wms_preview=ckanext.spatial.nongeos_plugin:WMSPreview
geojson_preview=ckanext.spatial.nongeos_plugin:GeoJSONPreview
cswserver=ckanext.spatial.plugin:CatalogueServiceWeb
spatial_harvest_metadata_api=ckanext.spatial.plugin:HarvestMetadataApi
Expand Down

0 comments on commit 4a142e8

Please sign in to comment.