commit
c2c7b1ce9b
|
@ -19,7 +19,7 @@ jobs:
|
|||
needs: lint
|
||||
strategy:
|
||||
matrix:
|
||||
ckan-version: ["2.10", 2.9, 2.9-py2, 2.8, 2.7]
|
||||
ckan-version: ["2.10", 2.9, 2.9-py2, 2.8]
|
||||
fail-fast: false
|
||||
|
||||
name: CKAN ${{ matrix.ckan-version }}
|
||||
|
@ -49,19 +49,27 @@ jobs:
|
|||
- uses: actions/checkout@v2
|
||||
- name: Install requirements
|
||||
run: |
|
||||
pip install -r dev-requirements.txt
|
||||
pip install -r requirements.txt
|
||||
pip install -e .
|
||||
# Replace default path to CKAN core config file with the one on the container
|
||||
sed -i -e 's/use = config:.*/use = config:\/srv\/app\/src\/ckan\/test-core.ini/' test.ini
|
||||
- name: Setup extension (CKAN >= 2.9)
|
||||
if: ${{ matrix.ckan-version != '2.7' && matrix.ckan-version != '2.8' }}
|
||||
- name: Setup extension (CKAN 2.10)
|
||||
if: ${{ matrix.ckan-version == '2.10' }}
|
||||
run: |
|
||||
pip install -r dev-requirements.txt
|
||||
ckan -c test.ini db init
|
||||
ckan -c test.ini db upgrade -p googleanalytics
|
||||
- name: Setup extension (CKAN == 2.9)
|
||||
if: ${{ matrix.ckan-version == '2.9' || matrix.ckan-version == '2.9-py2' }}
|
||||
run: |
|
||||
pip install -r dev-requirements-2.9.txt
|
||||
ckan -c test.ini db init
|
||||
ckan -c test.ini db upgrade -p googleanalytics
|
||||
- name: Setup extension (CKAN < 2.9)
|
||||
if: ${{ matrix.ckan-version == '2.7' || matrix.ckan-version == '2.8' }}
|
||||
if: ${{ matrix.ckan-version == '2.8' }}
|
||||
run: |
|
||||
pip install -r dev-requirements-2.9.txt
|
||||
paster --plugin=ckan db init -c test.ini
|
||||
paster --plugin=ckanext-googleanalytics initdb -c test.ini
|
||||
- name: Run tests
|
||||
run: pytest --ckan-ini=test.ini --disable-warnings ckanext/googleanalytics/tests
|
||||
run: pytest --ckan-ini=test.ini --cov=ckanext.googleanalytics --disable-warnings ckanext/googleanalytics/tests
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
**Status:** Production
|
||||
|
||||
**CKAN Version:** >= 2.7
|
||||
**CKAN Version:** >= 2.8
|
||||
|
||||
A CKAN extension that both sends tracking data to Google Analytics and
|
||||
retrieves statistics from Google Analytics and inserts them into CKAN pages.
|
||||
|
@ -106,7 +106,7 @@ See `Googles' documentation<https://support.google.com/analytics/answer/1034342?
|
|||
set up the required database tables (of course, altering the
|
||||
``--config`` option to point to your site config file):
|
||||
|
||||
paster initdb --config=../ckan/development.ini
|
||||
ckan -c ../ckan/ckan.ini initdb
|
||||
|
||||
3. Follow the steps in the *Authorization* section below.
|
||||
|
||||
|
@ -160,9 +160,9 @@ Before ckanext-googleanalytics can retrieve statistics from Google Analytics, yo
|
|||
|
||||
There are some very high-level functional tests that you can run using::
|
||||
|
||||
(pyenv)~/pyenv/src/ckan$ nosetests --ckan ../ckanext-googleanalytics/tests/
|
||||
$ pip install -r dev-requirements.txt
|
||||
$ pytest --ckan-ini=test.ini
|
||||
|
||||
(note -- that's run from the CKAN software root, not the extension root)
|
||||
|
||||
## Future
|
||||
|
||||
|
|
|
@ -4,7 +4,6 @@ import logging
|
|||
from ckan.lib.base import BaseController, c, render, request
|
||||
from . import dbutil
|
||||
|
||||
import ckan.logic as logic
|
||||
import hashlib
|
||||
from . import plugin
|
||||
|
||||
|
@ -12,17 +11,9 @@ from paste.util.multidict import MultiDict
|
|||
|
||||
from ckan.controllers.api import ApiController
|
||||
|
||||
from ckan.exceptions import CkanVersionException
|
||||
import ckan.plugins.toolkit as tk
|
||||
from ckanext.googleanalytics import utils
|
||||
|
||||
try:
|
||||
tk.requires_ckan_version("2.9")
|
||||
except CkanVersionException:
|
||||
pass
|
||||
else:
|
||||
from builtins import str
|
||||
|
||||
|
||||
log = logging.getLogger("ckanext.googleanalytics")
|
||||
|
||||
|
@ -56,7 +47,7 @@ class GAApiController(ApiController):
|
|||
|
||||
def action(self, logic_function, ver=None):
|
||||
try:
|
||||
function = logic.get_action(logic_function)
|
||||
function = tk.get_action(logic_function)
|
||||
side_effect_free = getattr(function, "side_effect_free", False)
|
||||
request_data = self._get_request_data(
|
||||
try_url_params=side_effect_free
|
||||
|
|
|
@ -78,36 +78,6 @@ def get_resource_visits_for_url(url):
|
|||
return count and count[0] or ""
|
||||
|
||||
|
||||
""" get_top_packages is broken, and needs to be rewritten to work with
|
||||
CKAN 2.*. This is because ckan.authz has been removed in CKAN 2.*
|
||||
|
||||
See commit ffa86c010d5d25fa1881c6b915e48f3b44657612
|
||||
"""
|
||||
|
||||
|
||||
def get_top_packages(limit=20):
|
||||
items = []
|
||||
# caveat emptor: the query below will not filter out private
|
||||
# or deleted datasets (TODO)
|
||||
q = model.Session.query(model.Package)
|
||||
connection = model.Session.connection()
|
||||
package_stats = get_table("package_stats")
|
||||
s = select(
|
||||
[
|
||||
package_stats.c.package_id,
|
||||
package_stats.c.visits_recently,
|
||||
package_stats.c.visits_ever,
|
||||
]
|
||||
).order_by(package_stats.c.visits_recently.desc())
|
||||
res = connection.execute(s).fetchmany(limit)
|
||||
for package_id, recent, ever in res:
|
||||
item = q.filter(text("package.id = '%s'" % package_id))
|
||||
if not item.count():
|
||||
continue
|
||||
items.append((item.first(), recent, ever))
|
||||
return items
|
||||
|
||||
|
||||
def get_top_resources(limit=20):
|
||||
items = []
|
||||
connection = model.Session.connection()
|
||||
|
|
|
@ -3,16 +3,25 @@ import factory
|
|||
|
||||
from factory.alchemy import SQLAlchemyModelFactory
|
||||
from pytest_factoryboy import register
|
||||
from ckan.plugins import toolkit
|
||||
|
||||
import ckan.model as model
|
||||
|
||||
from ckanext.googleanalytics.model import PackageStats, ResourceStats
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
def clean_db(reset_db, migrate_db_for):
|
||||
reset_db()
|
||||
migrate_db_for("googleanalytics")
|
||||
if toolkit.check_ckan_version("2.9"):
|
||||
@pytest.fixture()
|
||||
def clean_db(reset_db, migrate_db_for):
|
||||
reset_db()
|
||||
migrate_db_for("googleanalytics")
|
||||
else:
|
||||
from ckanext.googleanalytics.dbutil import init_tables
|
||||
|
||||
@pytest.fixture()
|
||||
def clean_db(reset_db):
|
||||
reset_db()
|
||||
init_tables()
|
||||
|
||||
|
||||
@register
|
||||
|
|
|
@ -7,7 +7,6 @@ import six
|
|||
from flask import Blueprint
|
||||
from werkzeug.utils import import_string
|
||||
|
||||
import ckan.logic as logic
|
||||
import ckan.plugins.toolkit as tk
|
||||
import ckan.views.api as api
|
||||
import ckan.views.resource as resource
|
||||
|
@ -22,7 +21,7 @@ ga = Blueprint("google_analytics", "google_analytics")
|
|||
|
||||
def action(logic_function, ver=api.API_MAX_VERSION):
|
||||
try:
|
||||
function = logic.get_action(logic_function)
|
||||
function = tk.get_action(logic_function)
|
||||
side_effect_free = getattr(function, "side_effect_free", False)
|
||||
request_data = api._get_request_data(try_url_params=side_effect_free)
|
||||
if isinstance(request_data, dict):
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
pytest<=6.0.2
|
||||
pytest-ckan
|
||||
pytest-factoryboy
|
||||
pytest-cov
|
|
@ -1,2 +1 @@
|
|||
pytest-ckan
|
||||
pytest-factoryboy
|
||||
pytest-ckan
|
Loading…
Reference in New Issue