update plugin filter method and tests for latest
ckan (with dataset view changes)
This commit is contained in:
parent
251f896bc6
commit
8906260eb1
|
@ -8,7 +8,7 @@ import ckan.model as model
|
||||||
import dbutil
|
import dbutil
|
||||||
|
|
||||||
log = logging.getLogger('ckanext.googleanalytics')
|
log = logging.getLogger('ckanext.googleanalytics')
|
||||||
PACKAGE_URL = '/package/' # XXX get from routes...
|
PACKAGE_URL = '/dataset/' # XXX get from routes...
|
||||||
DEFAULT_RESOURCE_URL_TAG = '/downloads/'
|
DEFAULT_RESOURCE_URL_TAG = '/downloads/'
|
||||||
|
|
||||||
|
|
||||||
|
@ -39,10 +39,13 @@ class LoadAnalytics(CkanCommand):
|
||||||
max_args = 0
|
max_args = 0
|
||||||
min_args = 0
|
min_args = 0
|
||||||
TEST_HOST = None
|
TEST_HOST = None
|
||||||
CONFIG = pylonsconfig
|
CONFIG = None
|
||||||
|
|
||||||
def command(self):
|
def command(self):
|
||||||
self._load_config()
|
if not self.CONFIG:
|
||||||
|
self._load_config()
|
||||||
|
self.CONFIG = pylonsconfig
|
||||||
|
|
||||||
self.resource_url_tag = self.CONFIG.get(
|
self.resource_url_tag = self.CONFIG.get(
|
||||||
'googleanalytics.resource_prefix',
|
'googleanalytics.resource_prefix',
|
||||||
DEFAULT_RESOURCE_URL_TAG)
|
DEFAULT_RESOURCE_URL_TAG)
|
||||||
|
@ -54,9 +57,7 @@ class LoadAnalytics(CkanCommand):
|
||||||
self.parse_and_save()
|
self.parse_and_save()
|
||||||
|
|
||||||
def parse_and_save(self):
|
def parse_and_save(self):
|
||||||
"""Grab raw data from Google Analytics and save to the
|
"""Grab raw data from Google Analytics and save to the database"""
|
||||||
database
|
|
||||||
"""
|
|
||||||
packages_data = self.get_ga_data()
|
packages_data = self.get_ga_data()
|
||||||
self.save_ga_data(packages_data)
|
self.save_ga_data(packages_data)
|
||||||
log.info("Saved %s records from google" % len(packages_data))
|
log.info("Saved %s records from google" % len(packages_data))
|
||||||
|
@ -104,9 +105,7 @@ class LoadAnalytics(CkanCommand):
|
||||||
http_client=self.TEST_HOST)
|
http_client=self.TEST_HOST)
|
||||||
else:
|
else:
|
||||||
my_client = client.AnalyticsClient(source=SOURCE_APP_NAME)
|
my_client = client.AnalyticsClient(source=SOURCE_APP_NAME)
|
||||||
my_client.ClientLogin(username,
|
my_client.ClientLogin(username, password, SOURCE_APP_NAME)
|
||||||
password,
|
|
||||||
SOURCE_APP_NAME)
|
|
||||||
account_query = client.AccountFeedQuery({'max-results': '300'})
|
account_query = client.AccountFeedQuery({'max-results': '300'})
|
||||||
feed = my_client.GetAccountFeed(account_query)
|
feed = my_client.GetAccountFeed(account_query)
|
||||||
table_id = None
|
table_id = None
|
||||||
|
@ -166,3 +165,4 @@ class LoadAnalytics(CkanCommand):
|
||||||
'ga:uniquePageviews').value or 0
|
'ga:uniquePageviews').value or 0
|
||||||
packages.setdefault(package, {})[date_name] = count
|
packages.setdefault(package, {})[date_name] = count
|
||||||
return packages
|
return packages
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ from genshi.filters import Transformer
|
||||||
from genshi import HTML
|
from genshi import HTML
|
||||||
from genshi.core import START, TEXT, END
|
from genshi.core import START, TEXT, END
|
||||||
from genshi.filters.transform import INSIDE, EXIT
|
from genshi.filters.transform import INSIDE, EXIT
|
||||||
from pylons import config
|
from pylons import config, request
|
||||||
from ckan.plugins import implements, SingletonPlugin
|
from ckan.plugins import implements, SingletonPlugin
|
||||||
from ckan.plugins import IGenshiStreamFilter, IConfigurable, IRoutes
|
from ckan.plugins import IGenshiStreamFilter, IConfigurable, IRoutes
|
||||||
from ckan.plugins import IConfigurer
|
from ckan.plugins import IConfigurer
|
||||||
|
@ -29,7 +29,6 @@ class GoogleAnalyticsPlugin(SingletonPlugin):
|
||||||
|
|
||||||
def configure(self, config):
|
def configure(self, config):
|
||||||
self.config = config
|
self.config = config
|
||||||
log.info("Loading Google Analytics plugin...")
|
|
||||||
if (not 'googleanalytics.id' in config):
|
if (not 'googleanalytics.id' in config):
|
||||||
msg = "Missing googleanalytics.id in config"
|
msg = "Missing googleanalytics.id in config"
|
||||||
raise GoogleAnalyticsException(msg)
|
raise GoogleAnalyticsException(msg)
|
||||||
|
@ -45,50 +44,52 @@ class GoogleAnalyticsPlugin(SingletonPlugin):
|
||||||
show_downloads = asbool(config.get('googleanalytics.show_downloads',
|
show_downloads = asbool(config.get('googleanalytics.show_downloads',
|
||||||
True))
|
True))
|
||||||
|
|
||||||
# add download tracking link
|
routes = request.environ.get('pylons.routes_dict')
|
||||||
def js_attr(name, event):
|
if (routes.get('controller') == 'package' and
|
||||||
attrs = event[1][1]
|
routes.get('action') == 'read'):
|
||||||
href = attrs.get('href').encode('utf-8')
|
|
||||||
link = '%s%s' % (resource_url,
|
|
||||||
urllib.quote(href))
|
|
||||||
js = "javascript: _gaq.push(['_trackPageview', '%s']);" % link
|
|
||||||
return js
|
|
||||||
|
|
||||||
# add some stats
|
# add download tracking link
|
||||||
def download_adder(stream):
|
def js_attr(name, event):
|
||||||
download_html = ''' <span class="downloads-count">
|
attrs = event[1][1]
|
||||||
(downloaded %s times)</span>'''
|
href = attrs.get('href').encode('utf-8')
|
||||||
count = None
|
link = '%s%s' % (resource_url, urllib.quote(href))
|
||||||
for mark, (kind, data, pos) in stream:
|
js = "javascript: _gaq.push(['_trackPageview', '%s']);" % link
|
||||||
if mark and kind == START:
|
return js
|
||||||
href = data[1].get('href')
|
|
||||||
if href:
|
|
||||||
count = dbutil.get_resource_visits_for_url(href)
|
|
||||||
if count and mark is EXIT:
|
|
||||||
# emit count
|
|
||||||
yield INSIDE, (TEXT,
|
|
||||||
HTML(download_html % count),
|
|
||||||
pos)
|
|
||||||
yield mark, (kind, data, pos)
|
|
||||||
|
|
||||||
# and some styling
|
# add some stats
|
||||||
download_style = '''<style type="text/css">
|
def download_adder(stream):
|
||||||
span.downloads-count {
|
download_html = ''' <span class="downloads-count">
|
||||||
font-size: 75%;
|
(downloaded %s times)</span>'''
|
||||||
}
|
count = None
|
||||||
</style>'''
|
for mark, (kind, data, pos) in stream:
|
||||||
|
if mark and kind == START:
|
||||||
|
href = data[1].get('href')
|
||||||
|
if href:
|
||||||
|
count = dbutil.get_resource_visits_for_url(href)
|
||||||
|
if count and mark is EXIT:
|
||||||
|
# emit count
|
||||||
|
yield INSIDE, (TEXT, HTML(download_html % count), pos)
|
||||||
|
yield mark, (kind, data, pos)
|
||||||
|
|
||||||
|
# and some styling
|
||||||
|
download_style = '''
|
||||||
|
<style type="text/css">
|
||||||
|
span.downloads-count {
|
||||||
|
font-size: 0.9em;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
'''
|
||||||
|
|
||||||
|
# perform the stream transform
|
||||||
|
stream = stream | Transformer('//div[@class="resource-url"]//a')\
|
||||||
|
.attr('onclick', js_attr)
|
||||||
|
|
||||||
|
if show_downloads:
|
||||||
|
stream = stream | Transformer('//div[@class="resource-url"]//a')\
|
||||||
|
.apply(download_adder)
|
||||||
|
stream = stream | Transformer('//link[@rel="stylesheet"]')\
|
||||||
|
.append(HTML(download_style))
|
||||||
|
|
||||||
# perform the stream transform
|
|
||||||
stream = stream | Transformer(
|
|
||||||
'//div[@id="package"]//td/a')\
|
|
||||||
.attr('onclick', js_attr)
|
|
||||||
if show_downloads:
|
|
||||||
stream = stream | Transformer(
|
|
||||||
'//div[@id="package"]//td/a')\
|
|
||||||
.apply(download_adder)
|
|
||||||
stream = stream | Transformer(
|
|
||||||
'//link[@rel="stylesheet"]')\
|
|
||||||
.append(HTML(download_style))
|
|
||||||
return stream
|
return stream
|
||||||
|
|
||||||
def after_map(self, map):
|
def after_map(self, map):
|
||||||
|
@ -101,6 +102,7 @@ class GoogleAnalyticsPlugin(SingletonPlugin):
|
||||||
here = os.path.dirname(__file__)
|
here = os.path.dirname(__file__)
|
||||||
rootdir = os.path.dirname(os.path.dirname(here))
|
rootdir = os.path.dirname(os.path.dirname(here))
|
||||||
template_dir = os.path.join(rootdir, 'ckanext',
|
template_dir = os.path.join(rootdir, 'ckanext',
|
||||||
'googleanalytics', 'templates')
|
'googleanalytics', 'templates')
|
||||||
config['extra_template_paths'] = ','.join([template_dir,
|
config['extra_template_paths'] = ','.join(
|
||||||
config.get('extra_template_paths', '')])
|
[template_dir, config.get('extra_template_paths', '')]
|
||||||
|
)
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
import os
|
import os
|
||||||
import BaseHTTPServer
|
import BaseHTTPServer
|
||||||
import threading
|
import threading
|
||||||
import gdata.data
|
|
||||||
import atom.core
|
|
||||||
|
|
||||||
here_dir = os.path.dirname(os.path.abspath(__file__))
|
here_dir = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
|
||||||
|
@ -15,12 +13,10 @@ class MockHandler(BaseHTTPServer.BaseHTTPRequestHandler):
|
||||||
fixture = os.path.join(here_dir, "accountsfixture.xml")
|
fixture = os.path.join(here_dir, "accountsfixture.xml")
|
||||||
content = open(fixture, "r").read()
|
content = open(fixture, "r").read()
|
||||||
elif "analytics/feeds/data" in self.path:
|
elif "analytics/feeds/data" in self.path:
|
||||||
if "package" in self.path:
|
if "dataset" in self.path:
|
||||||
fixture = os.path.join(here_dir,
|
fixture = os.path.join(here_dir, "packagefixture.xml")
|
||||||
"packagefixture.xml")
|
|
||||||
elif "download" in self.path:
|
elif "download" in self.path:
|
||||||
fixture = os.path.join(here_dir,
|
fixture = os.path.join(here_dir, "downloadfixture.xml")
|
||||||
"downloadfixture.xml")
|
|
||||||
self.send_response(200)
|
self.send_response(200)
|
||||||
self.end_headers()
|
self.end_headers()
|
||||||
content = open(fixture, "r").read()
|
content = open(fixture, "r").read()
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
<ns0:feed ns1:etag="W/"AkYHRn87fip7I2A9WhZSGUQ."" ns1:kind="analytics#data" xmlns:ns0="http://www.w3.org/2005/Atom" xmlns:ns1="http://schemas.google.com/g/2005"><ns0:id>http://www.google.com/analytics/feeds/data?ids=ga:42156377&dimensions=ga:pagePath&metrics=ga:newVisits,ga:uniquePageviews,ga:visitors,ga:visits&filters=ga:pagePath%3D~%5E/package/&start-date=2011-03-22&end-date=2011-04-05</ns0:id><ns2:dataSource xmlns:ns2="http://schemas.google.com/analytics/2009"><ns2:tableName>datagm.staging.ckan.net/</ns2:tableName><ns2:tableId>ga:42156377</ns2:tableId><ns2:property name="ga:profileId" value="42156377" /><ns2:property name="ga:webPropertyId" value="UA-21313878-1" /><ns2:property name="ga:accountName" value="http://datagm.staging.ckan.net/" /></ns2:dataSource><ns2:aggregates xmlns:ns2="http://schemas.google.com/analytics/2009"><ns2:metric confidenceInterval="0.0" name="ga:visits" type="integer" value="122" /><ns2:metric confidenceInterval="0.0" name="ga:visitors" type="integer" value="526" /><ns2:metric confidenceInterval="0.0" name="ga:newVisits" type="integer" value="83" /><ns2:metric confidenceInterval="0.0" name="ga:uniquePageviews" type="integer" value="606" /></ns2:aggregates><ns0:updated>2011-04-05T03:08:57.106-07:00</ns0:updated><ns2:containsSampledData xmlns:ns2="http://schemas.google.com/analytics/2009">false</ns2:containsSampledData>
|
<ns0:feed ns1:etag="W/"AkYHRn87fip7I2A9WhZSGUQ."" ns1:kind="analytics#data" xmlns:ns0="http://www.w3.org/2005/Atom" xmlns:ns1="http://schemas.google.com/g/2005"><ns0:id>http://www.google.com/analytics/feeds/data?ids=ga:42156377&dimensions=ga:pagePath&metrics=ga:newVisits,ga:uniquePageviews,ga:visitors,ga:visits&filters=ga:pagePath%3D~%5E/dataset/&start-date=2011-03-22&end-date=2011-04-05</ns0:id><ns2:dataSource xmlns:ns2="http://schemas.google.com/analytics/2009"><ns2:tableName>datagm.staging.ckan.net/</ns2:tableName><ns2:tableId>ga:42156377</ns2:tableId><ns2:property name="ga:profileId" value="42156377" /><ns2:property name="ga:webPropertyId" value="UA-21313878-1" /><ns2:property name="ga:accountName" value="http://datagm.staging.ckan.net/" /></ns2:dataSource><ns2:aggregates xmlns:ns2="http://schemas.google.com/analytics/2009"><ns2:metric confidenceInterval="0.0" name="ga:visits" type="integer" value="122" /><ns2:metric confidenceInterval="0.0" name="ga:visitors" type="integer" value="526" /><ns2:metric confidenceInterval="0.0" name="ga:newVisits" type="integer" value="83" /><ns2:metric confidenceInterval="0.0" name="ga:uniquePageviews" type="integer" value="606" /></ns2:aggregates><ns0:updated>2011-04-05T03:08:57.106-07:00</ns0:updated><ns2:containsSampledData xmlns:ns2="http://schemas.google.com/analytics/2009">false</ns2:containsSampledData>
|
||||||
|
|
||||||
<ns0:entry ns1:etag="W/"C0EEQX47eSp7I2A9WhZSGUs."" ns1:kind="analytics#datarow"><ns0:id>http://www.google.com/analytics/feeds/data?ids=ga:42156377&ga:pagePath=/package/annakarenina&filters=ga:pagePath%3D~%5E/package/&start-date=2011-03-22&end-date=2011-04-05</ns0:id><ns0:updated>2011-04-04T17:00:00.001-07:00</ns0:updated><ns2:dimension name="ga:pagePath" value="/package/annakarenina" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns0:title>ga:pagePath=/package/annakarenina</ns0:title><ns2:metric confidenceInterval="0.0" name="ga:visits" type="integer" value="0" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns2:metric confidenceInterval="0.0" name="ga:visitors" type="integer" value="2" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns2:metric confidenceInterval="0.0" name="ga:newVisits" type="integer" value="0" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns2:metric confidenceInterval="0.0" name="ga:uniquePageviews" type="integer" value="2" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns0:link href="http://www.google.com/analytics" rel="alternate" type="text/html" /></ns0:entry>
|
<ns0:entry ns1:etag="W/"C0EEQX47eSp7I2A9WhZSGUs."" ns1:kind="analytics#datarow"><ns0:id>http://www.google.com/analytics/feeds/data?ids=ga:42156377&ga:pagePath=/dataset/annakarenina&filters=ga:pagePath%3D~%5E/dataset/&start-date=2011-03-22&end-date=2011-04-05</ns0:id><ns0:updated>2011-04-04T17:00:00.001-07:00</ns0:updated><ns2:dimension name="ga:pagePath" value="/dataset/annakarenina" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns0:title>ga:pagePath=/dataset/annakarenina</ns0:title><ns2:metric confidenceInterval="0.0" name="ga:visits" type="integer" value="0" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns2:metric confidenceInterval="0.0" name="ga:visitors" type="integer" value="2" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns2:metric confidenceInterval="0.0" name="ga:newVisits" type="integer" value="0" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns2:metric confidenceInterval="0.0" name="ga:uniquePageviews" type="integer" value="2" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns0:link href="http://www.google.com/analytics" rel="alternate" type="text/html" /></ns0:entry>
|
||||||
|
|
||||||
<ns0:entry ns1:etag="W/"C0EEQX47eSp7I2A9WhZSGUs."" ns1:kind="analytics#datarow"><ns0:id>http://www.google.com/analytics/feeds/data?ids=ga:42156377&ga:pagePath=/package/annakarenina/invalid&filters=ga:pagePath%3D~%5E/package/&start-date=2011-03-22&end-date=2011-04-05</ns0:id><ns0:updated>2011-04-04T17:00:00.001-07:00</ns0:updated><ns2:dimension name="ga:pagePath" value="/package/annakarenina/invalid" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns0:title>ga:pagePath=/package/annakarenina/invalid</ns0:title><ns2:metric confidenceInterval="0.0" name="ga:visits" type="integer" value="0" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns2:metric confidenceInterval="0.0" name="ga:visitors" type="integer" value="2" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns2:metric confidenceInterval="0.0" name="ga:newVisits" type="integer" value="0" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns2:metric confidenceInterval="0.0" name="ga:uniquePageviews" type="integer" value="2" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns0:link href="http://www.google.com/analytics" rel="alternate" type="text/html" /></ns0:entry>
|
<ns0:entry ns1:etag="W/"C0EEQX47eSp7I2A9WhZSGUs."" ns1:kind="analytics#datarow"><ns0:id>http://www.google.com/analytics/feeds/data?ids=ga:42156377&ga:pagePath=/dataset/annakarenina/invalid&filters=ga:pagePath%3D~%5E/dataset/&start-date=2011-03-22&end-date=2011-04-05</ns0:id><ns0:updated>2011-04-04T17:00:00.001-07:00</ns0:updated><ns2:dimension name="ga:pagePath" value="/dataset/annakarenina/invalid" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns0:title>ga:pagePath=/dataset/annakarenina/invalid</ns0:title><ns2:metric confidenceInterval="0.0" name="ga:visits" type="integer" value="0" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns2:metric confidenceInterval="0.0" name="ga:visitors" type="integer" value="2" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns2:metric confidenceInterval="0.0" name="ga:newVisits" type="integer" value="0" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns2:metric confidenceInterval="0.0" name="ga:uniquePageviews" type="integer" value="2" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns0:link href="http://www.google.com/analytics" rel="alternate" type="text/html" /></ns0:entry>
|
||||||
|
|
||||||
<ns0:entry ns1:etag="W/"C0EEQX47eSp7I2A9WhZSGUs."" ns1:kind="analytics#datarow"><ns0:id>http://www.google.com/analytics/feeds/data?ids=ga:42156377&ga:pagePath=/package/annakarenina-invalid&filters=ga:pagePath%3D~%5E/package/&start-date=2011-03-22&end-date=2011-04-05</ns0:id><ns0:updated>2011-04-04T17:00:00.001-07:00</ns0:updated><ns2:dimension name="ga:pagePath" value="/package/annakarenina-invalid" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns0:title>ga:pagePath=/package/annakarenina-invalid</ns0:title><ns2:metric confidenceInterval="0.0" name="ga:visits" type="integer" value="0" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns2:metric confidenceInterval="0.0" name="ga:visitors" type="integer" value="2" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns2:metric confidenceInterval="0.0" name="ga:newVisits" type="integer" value="0" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns2:metric confidenceInterval="0.0" name="ga:uniquePageviews" type="integer" value="2" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns0:link href="http://www.google.com/analytics" rel="alternate" type="text/html" /></ns0:entry>
|
<ns0:entry ns1:etag="W/"C0EEQX47eSp7I2A9WhZSGUs."" ns1:kind="analytics#datarow"><ns0:id>http://www.google.com/analytics/feeds/data?ids=ga:42156377&ga:pagePath=/dataset/annakarenina-invalid&filters=ga:pagePath%3D~%5E/dataset/&start-date=2011-03-22&end-date=2011-04-05</ns0:id><ns0:updated>2011-04-04T17:00:00.001-07:00</ns0:updated><ns2:dimension name="ga:pagePath" value="/dataset/annakarenina-invalid" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns0:title>ga:pagePath=/dataset/annakarenina-invalid</ns0:title><ns2:metric confidenceInterval="0.0" name="ga:visits" type="integer" value="0" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns2:metric confidenceInterval="0.0" name="ga:visitors" type="integer" value="2" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns2:metric confidenceInterval="0.0" name="ga:newVisits" type="integer" value="0" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns2:metric confidenceInterval="0.0" name="ga:uniquePageviews" type="integer" value="2" xmlns:ns2="http://schemas.google.com/analytics/2009" /><ns0:link href="http://www.google.com/analytics" rel="alternate" type="text/html" /></ns0:entry>
|
||||||
|
|
||||||
<ns0:generator version="1.0">Google Analytics</ns0:generator><ns2:startIndex xmlns:ns2="http://a9.com/-/spec/opensearchrss/1.0/">1</ns2:startIndex><ns0:title>Google Analytics Data for Profile 42156377</ns0:title><ns0:author><ns0:name>Google Analytics</ns0:name></ns0:author><ns0:link href="https://www.google.com/analytics/feeds/data?max-results=10000&sort=-ga%3AnewVisits&end-date=2011-04-05&start-date=2011-03-22&metrics=ga%3Avisits%2Cga%3Avisitors%2Cga%3AnewVisits%2Cga%3AuniquePageviews&ids=ga%3A42156377&dimensions=ga%3ApagePath&filters=ga%3ApagePath%3D%7E%5E%2Fpackage%2F" rel="self" type="application/atom+xml" /><ns2:endDate xmlns:ns2="http://schemas.google.com/analytics/2009">2011-04-05</ns2:endDate><ns2:totalResults xmlns:ns2="http://a9.com/-/spec/opensearchrss/1.0/">152</ns2:totalResults><ns2:startDate xmlns:ns2="http://schemas.google.com/analytics/2009">2011-03-22</ns2:startDate><ns2:itemsPerPage xmlns:ns2="http://a9.com/-/spec/opensearchrss/1.0/">10000</ns2:itemsPerPage></ns0:feed>
|
<ns0:generator version="1.0">Google Analytics</ns0:generator><ns2:startIndex xmlns:ns2="http://a9.com/-/spec/opensearchrss/1.0/">1</ns2:startIndex><ns0:title>Google Analytics Data for Profile 42156377</ns0:title><ns0:author><ns0:name>Google Analytics</ns0:name></ns0:author><ns0:link href="https://www.google.com/analytics/feeds/data?max-results=10000&sort=-ga%3AnewVisits&end-date=2011-04-05&start-date=2011-03-22&metrics=ga%3Avisits%2Cga%3Avisitors%2Cga%3AnewVisits%2Cga%3AuniquePageviews&ids=ga%3A42156377&dimensions=ga%3ApagePath&filters=ga%3ApagePath%3D%7E%5E%2Fdataset%2F" rel="self" type="application/atom+xml" /><ns2:endDate xmlns:ns2="http://schemas.google.com/analytics/2009">2011-04-05</ns2:endDate><ns2:totalResults xmlns:ns2="http://a9.com/-/spec/opensearchrss/1.0/">152</ns2:totalResults><ns2:startDate xmlns:ns2="http://schemas.google.com/analytics/2009">2011-03-22</ns2:startDate><ns2:itemsPerPage xmlns:ns2="http://a9.com/-/spec/opensearchrss/1.0/">10000</ns2:itemsPerPage></ns0:feed>
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import os
|
||||||
import httplib
|
import httplib
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
|
|
||||||
|
@ -18,13 +19,11 @@ class MockClient(httplib.HTTPConnection):
|
||||||
filters = http_request.uri.query.get('filters')
|
filters = http_request.uri.query.get('filters')
|
||||||
path = http_request.uri.path
|
path = http_request.uri.path
|
||||||
if filters:
|
if filters:
|
||||||
if "package" in filters:
|
if "dataset" in filters:
|
||||||
path += "/package"
|
path += "/dataset"
|
||||||
else:
|
else:
|
||||||
path += "/download"
|
path += "/download"
|
||||||
httplib.HTTPConnection.request(self,
|
httplib.HTTPConnection.request(self, http_request.method, path)
|
||||||
http_request.method,
|
|
||||||
path)
|
|
||||||
resp = self.getresponse()
|
resp = self.getresponse()
|
||||||
return resp
|
return resp
|
||||||
|
|
||||||
|
@ -42,6 +41,8 @@ class TestConfig(TestCase):
|
||||||
class TestLoadCommand(TestCase):
|
class TestLoadCommand(TestCase):
|
||||||
@classmethod
|
@classmethod
|
||||||
def setup_class(cls):
|
def setup_class(cls):
|
||||||
|
InitDB("initdb").run([]) # set up database tables
|
||||||
|
|
||||||
config = appconfig('config:test.ini', relative_to=conf_dir)
|
config = appconfig('config:test.ini', relative_to=conf_dir)
|
||||||
config.local_conf['ckan.plugins'] = 'googleanalytics'
|
config.local_conf['ckan.plugins'] = 'googleanalytics'
|
||||||
config.local_conf['googleanalytics.username'] = 'borf'
|
config.local_conf['googleanalytics.username'] = 'borf'
|
||||||
|
@ -69,7 +70,6 @@ class TestLoadCommand(TestCase):
|
||||||
assert code in response.body
|
assert code in response.body
|
||||||
|
|
||||||
def test_top_packages(self):
|
def test_top_packages(self):
|
||||||
InitDB("initdb").run([]) # set up database tables
|
|
||||||
command = LoadAnalytics("loadanalytics")
|
command = LoadAnalytics("loadanalytics")
|
||||||
command.TEST_HOST = MockClient('localhost', 6969)
|
command.TEST_HOST = MockClient('localhost', 6969)
|
||||||
command.CONFIG = self.config
|
command.CONFIG = self.config
|
||||||
|
@ -80,12 +80,16 @@ class TestLoadCommand(TestCase):
|
||||||
self.assertEquals(resources[0][1], 4)
|
self.assertEquals(resources[0][1], 4)
|
||||||
|
|
||||||
def test_download_count_inserted(self):
|
def test_download_count_inserted(self):
|
||||||
InitDB("initdb").run([]) # set up database tables
|
|
||||||
command = LoadAnalytics("loadanalytics")
|
command = LoadAnalytics("loadanalytics")
|
||||||
command.TEST_HOST = MockClient('localhost', 6969)
|
command.TEST_HOST = MockClient('localhost', 6969)
|
||||||
command.CONFIG = self.config
|
command.CONFIG = self.config
|
||||||
command.run([])
|
command.run([])
|
||||||
|
# command.run(['--config=%s' % os.path.join(conf_dir, 'test.ini')])
|
||||||
|
# config = appconfig('config:test.ini', relative_to=conf_dir)
|
||||||
|
# for k in config:
|
||||||
|
# print k
|
||||||
response = self.app.get(url_for(controller='package',
|
response = self.app.get(url_for(controller='package',
|
||||||
action='read',
|
action='read',
|
||||||
id='annakarenina'))
|
id='annakarenina'))
|
||||||
assert "(downloaded 4 times)" in response.body, response.body
|
assert "(downloaded 4 times)" in response.body
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue