Changed to provide a lambda to check if the extension is installed
Changed to provide a lambda to check if the extension is installed

import logging import logging
import operator import operator
import ckan.lib.base as base import ckan.lib.base as base
import ckan.model as model import ckan.model as model
   
_log = logging.getLogger(__name__) _log = logging.getLogger(__name__)
   
def most_popular_datasets(publisher, count=20): def most_popular_datasets(publisher, count=20):
from ckanext.ga_report.ga_model import GA_Url from ckanext.ga_report.ga_model import GA_Url
   
if not publisher: if not publisher:
_log.error("No valid publisher passed to 'most_popular_datasets'") _log.error("No valid publisher passed to 'most_popular_datasets'")
return "" return ""
   
datasets = {} datasets = {}
entries = model.Session.query(GA_Url).\ entries = model.Session.query(GA_Url).\
filter(GA_Url.department_id==publisher.name).\ filter(GA_Url.department_id==publisher.name).\
filter(GA_Url.url.like('/dataset/%')).\ filter(GA_Url.url.like('/dataset/%')).\
order_by('ga_url.pageviews::int desc')[:count] order_by('ga_url.pageviews::int desc')[:count]
for entry in entries: for entry in entries:
p = model.Package.get(entry.url[len('/dataset/'):]) p = model.Package.get(entry.url[len('/dataset/'):])
if not p in datasets: if not p in datasets:
datasets[p] = {'views':0, 'visits': 0} datasets[p] = {'views':0, 'visits': 0}
datasets[p]['views'] = datasets[p]['views'] + int(entry.pageviews) datasets[p]['views'] = datasets[p]['views'] + int(entry.pageviews)
datasets[p]['visits'] = datasets[p]['visits'] + int(entry.visitors) datasets[p]['visits'] = datasets[p]['visits'] + int(entry.visitors)
   
results = [] results = []
for k, v in datasets.iteritems(): for k, v in datasets.iteritems():
results.append((k,v['views'],v['visits'])) results.append((k,v['views'],v['visits']))
   
results = sorted(results, key=operator.itemgetter(1), reverse=True) results = sorted(results, key=operator.itemgetter(1), reverse=True)
   
ctx = { ctx = {
'dataset_count': len(datasets), 'dataset_count': len(datasets),
'datasets': results, 'datasets': results,
   
'publisher': publisher 'publisher': publisher
} }
   
return base.render_snippet('ga_report/publisher/popular.html', **ctx) return base.render_snippet('ga_report/publisher/popular.html', **ctx)
   
import logging import logging
import ckan.lib.helpers as h import ckan.lib.helpers as h
import ckan.plugins as p import ckan.plugins as p
from ckan.plugins import implements, toolkit from ckan.plugins import implements, toolkit
   
log = logging.getLogger('ckanext.ga-report') log = logging.getLogger('ckanext.ga-report')
   
class GAReportPlugin(p.SingletonPlugin): class GAReportPlugin(p.SingletonPlugin):
implements(p.IConfigurer, inherit=True) implements(p.IConfigurer, inherit=True)
implements(p.IRoutes, inherit=True) implements(p.IRoutes, inherit=True)
implements(p.ITemplateHelpers, inherit=True) implements(p.ITemplateHelpers, inherit=True)
   
def update_config(self, config): def update_config(self, config):
toolkit.add_template_directory(config, 'templates') toolkit.add_template_directory(config, 'templates')
toolkit.add_public_directory(config, 'public') toolkit.add_public_directory(config, 'public')
   
def get_helpers(self): def get_helpers(self):
""" """
A dictionary of extra helpers that will be available to provide A dictionary of extra helpers that will be available to provide
ga report info to templates. ga report info to templates.
""" """
from ckanext.ga_report.helpers import most_popular_datasets from ckanext.ga_report.helpers import most_popular_datasets
return { return {
'most_popular_datasets': most_popular_datasets 'ga_report_installed': lambda: True,
  'most_popular_datasets': most_popular_datasets,
} }
   
def after_map(self, map): def after_map(self, map):
map.connect( map.connect(
'/data/analytics/publisher', '/data/analytics/publisher',
controller='ckanext.ga_report.controller:GaPublisherReport', controller='ckanext.ga_report.controller:GaPublisherReport',
action='index' action='index'
) )
map.connect( map.connect(
'/data/analytics/publisher/{id}', '/data/analytics/publisher/{id}',
controller='ckanext.ga_report.controller:GaPublisherReport', controller='ckanext.ga_report.controller:GaPublisherReport',
action='read' action='read'
) )
map.connect( map.connect(
'/data/analytics', '/data/analytics',
controller='ckanext.ga_report.controller:GaReport', controller='ckanext.ga_report.controller:GaReport',
action='index' action='index'
) )
map.connect( map.connect(
'/data/analytics/data_{month}.csv', '/data/analytics/data_{month}.csv',
controller='ckanext.ga_report.controller:GaReport', controller='ckanext.ga_report.controller:GaReport',
action='csv' action='csv'
) )
return map return map
   
   
<html xmlns:py="http://genshi.edgewall.org/" <html xmlns:py="http://genshi.edgewall.org/"
xmlns:i18n="http://genshi.edgewall.org/i18n" xmlns:i18n="http://genshi.edgewall.org/i18n"
xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xi="http://www.w3.org/2001/XInclude"
py:strip=""> py:strip="">
  <py:if test="dataset_count == 0">
  <p>We do not currently have analytics data for ${publisher.title}</p>
  </py:if>
   
<py:if test="dataset_count > 0"> <py:if test="dataset_count > 0">
<div class="popular_datasets"> <div class="popular_datasets">
<ul class="popular_dataset_list"> <ul class="popular_dataset_list">
<py:for each="dataset,views,visits in datasets"> <py:for each="dataset,views,visits in datasets">
<li> <li>
${h.link_to(dataset.title, h.url_for(controller='package', action='read', id=dataset.name))} ${h.link_to(dataset.title, h.url_for(controller='package', action='read', id=dataset.name))}
</li> </li>
</py:for> </py:for>
</ul> </ul>
   
<p>${h.link_to("More analytics for " + publisher.title, h.url_for(controller='ckanext.ga_report.controller:GaPublisherReport',action='read',id=publisher.name))}</p> <p>${h.link_to("More analytics for " + publisher.title, h.url_for(controller='ckanext.ga_report.controller:GaPublisherReport',action='read',id=publisher.name))}</p>
</div> </div>
</py:if> </py:if>
</html> </html>