From: Ross Jones Date: Tue, 30 Oct 2012 12:41:52 +0000 Subject: Added a helper for generating a list of all time popular datasets X-Git-Url: http://maxious.lambdacomplex.org/git/?p=ckanext-ga-report.git&a=commitdiff&h=9ce9f09c41e1f2f0b60093f171d579f0c4c858a1 --- Added a helper for generating a list of all time popular datasets --- --- a/ckanext/ga_report/controller.py +++ b/ckanext/ga_report/controller.py @@ -1,6 +1,6 @@ import logging import operator -from ckan.lib.base import BaseController, c, render, request, response +from ckan.lib.base import BaseController, c, render, request, response, abort import sqlalchemy from sqlalchemy import func, cast, Integer @@ -65,6 +65,10 @@ val = e.value if e.key in ['Average time on site', 'Pages per visit', 'Percent new visits']: val = "%.2f" % round(float(e.value), 2) + if e.key == 'Average time on site': + mins, secs = divmod(float(val), 60) + hours, mins = divmod(mins, 60) + val = '%02d:%02d:%02d (%s seconds) ' % (hours, mins, secs, val) e.key = '%s *' % e.key c.global_totals.append((e.key, val)) @@ -125,7 +129,10 @@ def read(self, id): + c.publisher = model.Group.get(id) + if not c.publisher: + abort(404, 'A publisher with that name could not be found') c.top_packages = [] # package, dataset_views in c.top_packages # Get the month details by fetching distinct values and determining the --- /dev/null +++ b/ckanext/ga_report/helpers.py @@ -1,1 +1,40 @@ +import logging +import operator +import ckan.lib.base as base +import ckan.model as model +_log = logging.getLogger(__name__) + +def most_popular_datasets(publisher, count=20): + from ckanext.ga_report.ga_model import GA_Url + + if not publisher: + _log.error("No valid publisher passed to 'most_popular_datasets'") + return "" + + datasets = {} + entries = model.Session.query(GA_Url).\ + filter(GA_Url.department_id==publisher.name).\ + filter(GA_Url.url.like('/dataset/%')).\ + order_by('ga_url.pageviews::int desc')[:count] + for entry in entries: + p = model.Package.get(entry.url[len('/dataset/'):]) + if not p in datasets: + datasets[p] = {'views':0, 'visits': 0} + datasets[p]['views'] = datasets[p]['views'] + int(entry.pageviews) + datasets[p]['visits'] = datasets[p]['visits'] + int(entry.visitors) + + results = [] + for k, v in datasets.iteritems(): + results.append((k,v['views'],v['visits'])) + + results = sorted(results, key=operator.itemgetter(1), reverse=True) + + ctx = { + 'dataset_count': len(datasets), + 'datasets': results, + 'publisher': publisher + } + + return base.render_snippet('ga_report/publisher/popular.html', **ctx) + --- a/ckanext/ga_report/plugin.py +++ b/ckanext/ga_report/plugin.py @@ -2,19 +2,27 @@ import ckan.lib.helpers as h import ckan.plugins as p from ckan.plugins import implements, toolkit -#import gasnippet -#import commands -#import dbutil log = logging.getLogger('ckanext.ga-report') class GAReportPlugin(p.SingletonPlugin): implements(p.IConfigurer, inherit=True) implements(p.IRoutes, inherit=True) + implements(p.ITemplateHelpers, inherit=True) def update_config(self, config): toolkit.add_template_directory(config, 'templates') toolkit.add_public_directory(config, 'public') + + def get_helpers(self): + """ + A dictionary of extra helpers that will be available to provide + ga report info to templates. + """ + from ckanext.ga_report.helpers import most_popular_datasets + return { + 'most_popular_datasets': most_popular_datasets + } def after_map(self, map): map.connect( --- /dev/null +++ b/ckanext/ga_report/templates/ga_report/publisher/popular.html @@ -1,1 +1,22 @@ + + + + + + + + + --- a/ckanext/ga_report/templates/ga_report/publisher/read.html +++ b/ckanext/ga_report/templates/ga_report/publisher/read.html @@ -6,6 +6,7 @@ Analytics for ${g.site_title} +
  • ${c.publisher.title}