+
Skip to content

Upgrade to CKAN 2.11 #2

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 15 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ckanext/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# this is a namespace package
# This is a namespace package
try:
import pkg_resources

Expand Down
69 changes: 45 additions & 24 deletions ckanext/googleanalytics/actions.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,51 +2,72 @@
import json

from ckan.plugins import toolkit
from .utils import (
db as db_utils,
ga as ga_utils
)

from ckanext.googleanalytics.model import (
get_package_stat,
get_resource_stat,
get_url_stat,
)
from ckanext.googleanalytics.logic import load_package_stats, load_url_stats

log = logging.getLogger(__name__)


@toolkit.side_effect_free
def package_stat(context, data_dict):
"""
Fetch package stats
"""
package_id = data_dict["package_id"]
result = 0
try:
result = get_package_stat(package_id)[0]
except Exception as e:
log.error("Package not found: {}".format(e))
return json.dumps(result)


@toolkit.side_effect_free
def resource_stat(context, data_dict):
'''
"""
Fetch resource stats
'''
resource_id = data_dict['resource_id']
"""
resource_id = data_dict["resource_id"]
result = 0
try:
result = db_utils.get_resource_stat(resource_id)[0]
result = get_resource_stat(resource_id)[0]
except Exception as e:
log.error("Resource not found: {}".format(e))
return json.dumps(result)


@toolkit.side_effect_free
def package_stat(context, data_dict):
'''
Fetch package stats
'''
package_id = data_dict['package_id']
def url_stat(context, data_dict):
"""
Fetch url stats
"""
url_id = data_dict["url_id"]
result = 0
try:
result = db_utils.get_package_stat(package_id)[0]
result = get_url_stat(url_id)[0]
except Exception as e:
log.error("Package not found: {}".format(e))
log.error("URL not found: {}".format(e))
return json.dumps(result)


def download_package_stat(context, data_dict):
'''
"""
Download package stats from Google analytics into the local database
'''
credentials_path = data_dict['credentials_path']
service = ga_utils.init_service(credentials_path)
packages_data = ga_utils.get_packages_data(service)
ga_utils.save_packages_data(packages_data)
return json.dumps({
'package_count': len(packages_data)
})
"""
credentials = data_dict["credentials_path"]
packages_data = load_package_stats(credentials)
return json.dumps({"package_count": len(packages_data)})


def download_url_stat(context, data_dict):
"""
Download URL stats from Google analytics into the local database
"""
credentials = data_dict["credentials_path"]
urls_data = load_url_stats(credentials)
return json.dumps({"url_count": len(urls_data)})
7 changes: 7 additions & 0 deletions ckanext/googleanalytics/blueprints/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from ckanext.googleanalytics.blueprints.googleanalytics_blueprint import (
googleanalytics_blueprint,
)

blueprints = [
googleanalytics_blueprint,
]
Original file line number Diff line number Diff line change
@@ -1,23 +1,26 @@
# -*- coding: utf-8 -*-

import hashlib
import logging
import six

from werkzeug.utils import import_string, ImportStringError
import ckan.views.resource as resource
import ckan.plugins.toolkit as tk
import ckan.views.api as api
from ckan.common import g
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can get this from the toolkit: toolkit.g

from flask import Blueprint
from werkzeug.utils import import_string, ImportStringError
import ckan.logic as logic
import ckan.model as model
from ckan.common import g
import ckan.plugins.toolkit as toolkit
import ckan.views.api as api
import ckan.views.resource as resource

from ckanext.googleanalytics.logic import post_analytics

CONFIG_HANDLER_PATH = "googleanalytics.download_handler"

log = logging.getLogger(__name__)
ga = Blueprint("google_analytics", "google_analytics")


googleanalytics_blueprint = Blueprint("google_analytics", __name__)


CONFIG_HANDLER_PATH = "googleanalytics.download_handler"


def action(logic_function, ver=api.API_MAX_VERSION):
Expand All @@ -30,29 +33,29 @@ def action(logic_function, ver=api.API_MAX_VERSION):
if "q" in request_data:
id = request_data["q"]
if "query" in request_data:
id = request_data[u"query"]
_post_analytics(g.user)
id = request_data["query"]
post_analytics(g.user)
except Exception as e:
log.debug(e)
pass

return api.action(logic_function, ver)


ga.add_url_rule(
googleanalytics_blueprint.add_url_rule(
"/api/action/<logic_function>",
methods=["GET", "POST"],
view_func=action,
)
ga.add_url_rule(
u"/api/<int(min=1, max={0}):ver>/action/<logic_function>".format(
googleanalytics_blueprint.add_url_rule(
"/api/<int(min=1, max={0}):ver>/action/<logic_function>".format(
api.API_MAX_VERSION
),
methods=["GET", "POST"],
view_func=action,
)
ga.add_url_rule(
u"/<int(min=3, max={0}):ver>/action/<logic_function>".format(
googleanalytics_blueprint.add_url_rule(
"/<int(min=3, max={0}):ver>/action/<logic_function>".format(
api.API_MAX_VERSION
),
methods=["GET", "POST"],
Expand All @@ -61,28 +64,30 @@ def action(logic_function, ver=api.API_MAX_VERSION):


def download(id, resource_id, filename=None, package_type="dataset"):
handler_path = tk.config.get("googleanalytics.download_handler")
handler_path = toolkit.config.get("googleanalytics.download_handler")
using_default_handler = False

if handler_path:
try:
download_handler = import_string(handler_path)
except (ImportError, ImportStringError) as e:
log.debug("`download_handler` configured but not found")
raise e
else:
log.debug("`download_handler` not configured, using CKAN's default which is: resource.download")
log.debug(
"`download_handler` not configured, using CKAN's default which is: resource.download"
)
download_handler = resource.download
using_default_handler = True

try:
_post_analytics(g.user)
post_analytics(g.user)
except Exception as e:
log.error(e)

if using_default_handler:
return download_handler(
package_type= 'dataset',
package_type="dataset",
id=id,
resource_id=resource_id,
filename=filename,
Expand All @@ -95,38 +100,10 @@ def download(id, resource_id, filename=None, package_type="dataset"):
)


ga.add_url_rule(
googleanalytics_blueprint.add_url_rule(
"/dataset/<id>/resource/<resource_id>/download", view_func=download
)
ga.add_url_rule(
googleanalytics_blueprint.add_url_rule(
"/dataset/<id>/resource/<resource_id>/download/<filename>",
view_func=download,
)


def _post_analytics(user):
from ckanext.googleanalytics.plugin import GoogleAnalyticsPlugin

path = tk.request.environ["PATH_INFO"]
path_id = path.split("/dataset/")[1].split("/")[0]
context = {
u'model': model,
u'session': model.Session,
u'user': user
}
package = tk.get_action("package_show")(context, {"id": path_id})
referer_link = "/dataset/{}".format(package.get("name"))

resource_data = {
"client_id": hashlib.md5(six.ensure_binary(tk.c.user)).hexdigest(),
"events": [
{
"name": "file_download",
"params" : {
"link_url": referer_link
}
}
]
}

GoogleAnalyticsPlugin.analytics_queue.put(resource_data)
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
# encoding: utf-8
import logging
import click

import ckan.plugins.toolkit as tk
import ckan.model as model
from .utils import (
db as db_utils,
ga as ga_utils
)
from ckanext.googleanalytics.model import init_tables
from ckanext.googleanalytics.logic import load_package_stats, load_url_stats


log = logging.getLogger(__name__)
Expand All @@ -17,7 +14,7 @@ def get_commands():
return [googleanalytics]


@click.group(short_help=u"GoogleAnalytics commands")
@click.group(short_help="GoogleAnalytics commands")
def googleanalytics():
pass

Expand All @@ -27,18 +24,22 @@ def init():
"""Initialise the local stats database tables"""
model.Session.remove()
model.Session.configure(bind=model.meta.engine)
db_utils.init_tables()
init_tables()
log.info("Set up statistics tables in main database")


@googleanalytics.command(short_help=u"Load data from Google Analytics API")
@googleanalytics.command(short_help="Load data from Google Analytics API")
@click.argument("credentials", type=click.Path(exists=True))
@click.option("-s", "--start-date", required=False)
def load(credentials, start_date):
"""Parse data from Google Analytics API and store it
in a local database
"""
service = ga_utils.init_service(credentials)
packages_data = ga_utils.get_packages_data(service)
ga_utils.save_packages_data(packages_data)
log.info("Saved %s records from google" % len(packages_data))
# Fetch package and resource download stats from GA and save them locally
packages_data = load_package_stats(credentials)

# Fetch url stats from GA and save them locally
urls_data = load_url_stats(credentials)

log.info("Saved %s packages visits from google" % len(packages_data))
log.info("Saved %s urls visits from google" % len(urls_data))
Loading
点击 这是indexloc提供的php浏览器服务,不要输入任何密码和下载