single_popular_dataset now returns a dataset dict which is what is needed by DGU.
--- a/ckanext/ga_report/controller.py
+++ b/ckanext/ga_report/controller.py
@@ -22,6 +22,7 @@
def _month_details(cls):
+ '''Returns a list of all the month names'''
months = []
vals = model.Session.query(cls.period_name).filter(cls.period_name!='All').distinct().all()
for m in vals:
--- a/ckanext/ga_report/helpers.py
+++ b/ckanext/ga_report/helpers.py
@@ -1,7 +1,9 @@
import logging
import operator
+
import ckan.lib.base as base
import ckan.model as model
+from ckan.logic import get_action
from ckanext.ga_report.ga_model import GA_Url, GA_Publisher
from ckanext.ga_report.controller import _get_publishers
@@ -39,25 +41,38 @@
order_by('ga_url.pageviews::int desc')
num_top_datasets = top_datasets.count()
+ dataset = None
if num_top_datasets:
- dataset = None
+ count = 0
while not dataset:
rand = random.randrange(0, min(top, num_top_datasets))
ga_url = top_datasets[rand]
dataset = model.Package.get(ga_url.url[len('/dataset/'):])
if dataset and not dataset.state == 'active':
dataset = None
- else:
+ count += 1
+ if count > 10:
+ break
+ if not dataset:
+ # fallback
dataset = model.Session.query(model.Package)\
.filter_by(state='active').first()
- publisher = dataset.get_groups('publisher')[0]
- return {
- 'dataset': dataset,
- 'publisher': publisher
- }
+ if not dataset:
+ return None
+ dataset_dict = get_action('package_show')({'model': model,
+ 'session': model.Session},
+ {'id':dataset.id})
+ return dataset_dict
def single_popular_dataset_html(top=20):
- context = single_popular_dataset(top)
+ dataset_dict = single_popular_dataset(top)
+ groups = package.get('groups', [])
+ publishers = [ g for g in groups if g.get('type') == 'publisher' ]
+ publisher = publishers[0] if publishers else {'name':'', 'title': ''}
+ context = {
+ 'dataset': dataset_dict,
+ 'publisher': publisher_dict
+ }
return base.render_snippet('ga_report/ga_popular_single.html', **context)
--- a/ckanext/ga_report/templates/ga_report/ga_popular_single.html
+++ b/ckanext/ga_report/templates/ga_report/ga_popular_single.html
@@ -8,14 +8,14 @@
<h2>Featured dataset</h2>
<div class="dataset-summary boxed">
- <a class="dataset-header" href="${h.url_for(controller='package', action='read', id=dataset.name)}">
- <h3>${dataset.title}</h3>
+ <a class="dataset-header" href="${h.url_for(controller='package', action='read', id=dataset['name'])}">
+ <h3>${dataset['title']}</h3>
</a>
<h4>
<strong>Publisher</strong> :
- <a href="/publisher/${publisher.name}">${publisher.title}</a>
+ <a href="/publisher/${publisher['name']}">${publisher['title']}</a>
</h4>
- <div>${h.truncate(dataset.notes, length=200, whole_word=True)}</div>
+ <div>${h.truncate(dataset['notes_rendered'], length=200, whole_word=True)}</div>
</div>
<div>
<a href="${h.url_for(controller='ckanext.ga_report.controller:GaDatasetReport',action='read')}" class="btn">Other popular datasets</a>