diff --git a/README.rst b/README.rst index 55be55c..88cf819 100644 --- a/README.rst +++ b/README.rst @@ -67,6 +67,7 @@ Installation googleanalytics.track_events = false googleanalytics.fields = {} googleanalytics.enable_user_id = false + ckanext.googleanalytics.download_handler = ckan.views.resource:download ``resource_prefix`` is an arbitrary identifier so that we can query for downloads in Google Analytics. It can theoretically be any @@ -93,6 +94,15 @@ Installation This way metrics can be tracked for every logged in user. You can read more about this feature and its benefits `here `_. + When resource is downloaded, ckanext-googleanalytics posts event to + GA and calls default download callback. If you are using CKAN>=2.9 + and some of your plugins redefines `resource.download` + route(ckanext-cloudstorage, for example), you can specify which + function must be called instead of `ckan.views.resource:download` + via `ckanext.googleanalytics.download_handler` config variable. For ckanext-cloudstorage you can use:: + + ckanext.googleanalytics.download_handler = ckanext.cloudstorage.views:download + Domain Linking -------------- diff --git a/ckanext/googleanalytics/views.py b/ckanext/googleanalytics/views.py index 59b9a29..1e01315 100644 --- a/ckanext/googleanalytics/views.py +++ b/ckanext/googleanalytics/views.py @@ -5,6 +5,7 @@ import logging import six from flask import Blueprint +from werkzeug.utils import import_string import ckan.logic as logic import ckan.plugins.toolkit as tk @@ -13,6 +14,8 @@ import ckan.views.resource as resource from ckan.common import g +CONFIG_HANDLER_PATH = 'ckanext.googleanalytics.download_handler' + log = logging.getLogger(__name__) ga = Blueprint("google_analytics", "google_analytics") @@ -49,6 +52,17 @@ ga.add_url_rule( def download(id, resource_id, filename=None, package_type="dataset"): + handler_path = tk.config.get(CONFIG_HANDLER_PATH) + if handler_path: + handler = import_string(handler_path, silent=True) + else: + handler = None + log.warning(( + 'Missing {} config option.' + ).format(CONFIG_HANDLER_PATH)) + if not handler: + log.debug('Use default CKAN callback for resource.download') + handler = resource.download _post_analytics( g.user, "CKAN Resource Download Request", @@ -56,7 +70,9 @@ def download(id, resource_id, filename=None, package_type="dataset"): "Download", resource_id, ) - return resource.download(package_type, id, resource_id, filename) + return handler( + package_type=package_type, id=id, + resource_id=resource_id, filename=filename) ga.add_url_rule(