From 18397d5f5fd16ec963c0b210fdda768c44af5bfc Mon Sep 17 00:00:00 2001 From: tobes Date: Wed, 26 Jun 2013 13:25:59 +0100 Subject: [PATCH] [#715] Remove helper and do work in controller and minor tweaks --- ckan/controllers/package.py | 11 +++++++ ckan/lib/datapreview.py | 7 ++++- ckan/lib/helpers.py | 31 +++---------------- ckan/templates/package/resource_read.html | 4 +-- .../package/snippets/resource_item.html | 5 ++- .../package/resource_read.html | 3 +- 6 files changed, 26 insertions(+), 35 deletions(-) diff --git a/ckan/controllers/package.py b/ckan/controllers/package.py index db7c24f1b68..3241348525a 100644 --- a/ckan/controllers/package.py +++ b/ckan/controllers/package.py @@ -344,6 +344,11 @@ def read(self, id, format='html'): c.current_package_id = c.pkg.id c.related_count = c.pkg.related_count + # can the resources be previewed? + for resource in c.pkg_dict['resources']: + resource['can_be_previewed'] = self._resource_preview( + {'resource': resource, 'package': c.pkg_dict}) + self._setup_template_variables(context, {'id': id}, package_type=package_type) @@ -1142,8 +1147,14 @@ def resource_read(self, id, resource_id): c.datastore_api = '%s/api/action' % config.get('ckan.site_url', '').rstrip('/') c.related_count = c.pkg.related_count + + c.resource['can_be_previewed'] = self._resource_preview( + {'resource': c.resource, 'package': c.package}) return render('package/resource_read.html') + def _resource_preview(self, data_dict): + return bool(datapreview.get_preview_plugin(data_dict, return_first=True)) + def resource_download(self, id, resource_id): """ Provides a direct download by redirecting the user to the url stored diff --git a/ckan/lib/datapreview.py b/ckan/lib/datapreview.py index 6d9a5ef8ea9..627df9938f7 100644 --- a/ckan/lib/datapreview.py +++ b/ckan/lib/datapreview.py @@ -52,13 +52,16 @@ def _on_same_domain(data_dict): return compare_domains([ckan_url, resource_url]) -def get_preview_plugin(data_dict): +def get_preview_plugin(data_dict, return_first=False): '''Determines whether there is an extension that can preview the resource. :param data_dict: contains a resource and package dict. The resource dict has to have a value for ``on_same_domain`` :type data_dict: dictionary + :param return_first: If True return the first plugin that can preview + :type return_first: bool + Returns a dict of plugins that can preview or ones that are fixable''' data_dict['resource']['on_same_domain'] = _on_same_domain(data_dict) @@ -76,6 +79,8 @@ def get_preview_plugin(data_dict): p_info.update(data) # if we can preview if p_info['can_preview']: + if return_first: + plugin plugins_that_can_preview.append(p_info) elif p_info.get('fixable'): plugins_fixable.append(p_info) diff --git a/ckan/lib/helpers.py b/ckan/lib/helpers.py index 5620d08febe..c47452266d8 100644 --- a/ckan/lib/helpers.py +++ b/ckan/lib/helpers.py @@ -1486,29 +1486,7 @@ def format_resource_items(items): return sorted(output, key=lambda x: x[0]) -def can_be_previewed(resource, package): - data_dict = {'resource': resource, 'package': package} - if datapreview.can_be_previewed(data_dict): - return True - - format_lower = resource['format'].lower() - - if resource['url']: - - direct_embed = config.get('ckan.preview.direct', '').split() - if not direct_embed: - direct_embed = datapreview.DEFAULT_DIRECT_EMBED - loadable_in_iframe = config.get('ckan.preview.loadable', '').split() - if not loadable_in_iframe: - loadable_in_iframe = datapreview.DEFAULT_LOADABLE_IFRAME - - return (format_lower in direct_embed or - format_lower in loadable_in_iframe) - - return False - - -def resource_preview(resource, pkg_id): +def resource_preview(resource, package): ''' Returns a rendered snippet for a embedded resource preview. @@ -1521,7 +1499,7 @@ def resource_preview(resource, pkg_id): directly = False url = '' - data_dict = {'resource': resource, 'package': c.package} + data_dict = {'resource': resource, 'package': package} if not resource['url']: return snippet("dataviewer/snippets/no_preview.html", @@ -1534,9 +1512,9 @@ def resource_preview(resource, pkg_id): if not loadable_in_iframe: loadable_in_iframe = datapreview.DEFAULT_LOADABLE_IFRAME - if datapreview.get_preview_plugin(data_dict): + if datapreview.get_preview_plugin(data_dict, return_first=True): url = url_for(controller='package', action='resource_datapreview', - resource_id=resource['id'], id=pkg_id, qualified=True) + resource_id=resource['id'], id=package['id'], qualified=True) elif format_lower in direct_embed: directly = True url = resource['url'] @@ -1676,7 +1654,6 @@ def SI_number_span(number): 'render_markdown', 'format_resource_items', 'resource_preview', - 'can_be_previewed', 'SI_number_span', 'localised_number', 'localised_SI_number', diff --git a/ckan/templates/package/resource_read.html b/ckan/templates/package/resource_read.html index 67778b041d6..46406746a6f 100644 --- a/ckan/templates/package/resource_read.html +++ b/ckan/templates/package/resource_read.html @@ -36,7 +36,7 @@ {{ _('View') }} {% elif res.resource_type == 'api' %} {{ _('API Endpoint') }} - {% elif not h.can_be_previewed(res, pkg) %} + {% elif not res.can_be_previewed %} {{ _('Go to resource') }} {% else %} {{ _('Download') }} @@ -73,7 +73,7 @@

{{ _('From the dataset abstract') }}

{% block data_preview %} - {{ h.resource_preview(c.resource, c.package.id) }} + {{ h.resource_preview(c.resource, c.package) }} {% endblock %} {% endblock %} diff --git a/ckan/templates/package/snippets/resource_item.html b/ckan/templates/package/snippets/resource_item.html index 69c3df19c89..fccd94ff4d2 100644 --- a/ckan/templates/package/snippets/resource_item.html +++ b/ckan/templates/package/snippets/resource_item.html @@ -1,5 +1,4 @@ {% set url = h.url_for(controller='package', action='resource_read', id=pkg.name, resource_id=res.id) %} -{% set can_be_previewed = h.can_be_previewed(resource=res, package=pkg) %}
  • {% block resource_item_title %} @@ -25,7 +24,7 @@ {% block resource_item_explore_links %}
  • - {% if can_be_previewed %} + {% if res.can_be_previewed %} {{ _('Preview') }} {% else %} @@ -36,7 +35,7 @@
  • - {% if can_be_previewed %} + {% if res.can_be_previewed %} {{ _('Download') }} {% else %} diff --git a/ckan/templates_legacy/package/resource_read.html b/ckan/templates_legacy/package/resource_read.html index 42cde7217bd..b8d9b27d50a 100644 --- a/ckan/templates_legacy/package/resource_read.html +++ b/ckan/templates_legacy/package/resource_read.html @@ -146,8 +146,7 @@