Fix display of publisher in Featured Dataset.
Fix display of publisher in Featured Dataset.

--- a/ckanext/ga_report/controller.py
+++ b/ckanext/ga_report/controller.py
@@ -309,8 +309,6 @@
         select department_id, sum(pageviews::int) views, sum(visitors::int) visits
         from ga_url
         where department_id <> ''
-          and package_id <> ''
-          and url like '/dataset/%%'
           and period_name=%s
         group by department_id order by visits desc
         """

--- a/ckanext/ga_report/ga_model.py
+++ b/ckanext/ga_report/ga_model.py
@@ -116,7 +116,7 @@
     return '/' + '/'.join(url.split('/')[2:])
 
 
-def _get_package_and_publisher(url):
+def _get_department_id_of_url(url):
     # e.g. /dataset/fuel_prices
     # e.g. /dataset/fuel_prices/resource/e63380d4
     dataset_match = re.match('/dataset/([^/]+)(/.*)?', url)
@@ -126,13 +126,12 @@
         if dataset:
             publisher_groups = dataset.get_groups('publisher')
             if publisher_groups:
-                return dataset_ref,publisher_groups[0].name
-        return dataset_ref, None
+                return publisher_groups[0].name
     else:
         publisher_match = re.match('/publisher/([^/]+)(/.*)?', url)
         if publisher_match:
-            return None, publisher_match.groups()[0]
-    return None, None
+            return publisher_match.groups()[0]
+
 
 def update_sitewide_stats(period_name, stat_name, data):
     for k,v in data.iteritems():
@@ -184,28 +183,28 @@
 
 
 def update_url_stats(period_name, period_complete_day, url_data):
-
+    '''
+    Given a list of urls and number of hits for each during a given period,
+    stores them in GA_Url under the period and recalculates the totals for
+    the 'All' period.
+    '''
     for url, views, visitors in url_data:
-        package, publisher = _get_package_and_publisher(url)
-
-        item = model.Session.query(GA_Url).\
-            filter(GA_Url.period_name==period_name).\
-            filter(GA_Url.url==url).first()
-        if item:
-            item.pageviews = item.pageviews + views
-            item.visitors = item.visitors + visitors
-            model.Session.add(item)
-        else:
-            values = {'id': make_uuid(),
-                      'period_name': period_name,
-                      'period_complete_day': period_complete_day,
-                      'url': url,
-                      'pageviews': views,
-                      'visitors': visitors,
-                      'department_id': publisher,
-                      'package_id': package
-                     }
-            model.Session.add(GA_Url(**values))
+        department_id = _get_department_id_of_url(url)
+
+        package = None
+        if url.startswith('/dataset/'):
+            package = url[len('/dataset/'):]
+
+        values = {'id': make_uuid(),
+                  'period_name': period_name,
+                  'period_complete_day': period_complete_day,
+                  'url': url,
+                  'pageviews': views,
+                  'visitors': visitors,
+                  'department_id': department_id,
+                  'package_id': package
+                 }
+        model.Session.add(GA_Url(**values))
         model.Session.commit()
 
         if package:
@@ -218,10 +217,9 @@
                       'url': url,
                       'pageviews': sum([int(e.pageviews) for e in entries]),
                       'visitors': sum([int(e.visitors) for e in entries]),
-                      'department_id': publisher,
+                      'department_id': department_id,
                       'package_id': package
                      }
-
             model.Session.add(GA_Url(**values))
             model.Session.commit()
 

--- a/ckanext/ga_report/helpers.py
+++ b/ckanext/ga_report/helpers.py
@@ -60,7 +60,8 @@
         if not dataset:
             return None
     dataset_dict = get_action('package_show')({'model': model,
-                                               'session': model.Session},
+                                               'session': model.Session,
+                                               'validate': False},
                                               {'id':dataset.id})
     return dataset_dict