X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/357027375ff8867f42ca34bcbfb5a78b5b185fc3..16ca16378b89015b7762bfa27a042097844ce668:/src/stats/utils.py diff --git a/src/stats/utils.py b/src/stats/utils.py index 474d1b59a..d21eb3c3c 100644 --- a/src/stats/utils.py +++ b/src/stats/utils.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- # This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later. # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # @@ -6,22 +5,25 @@ from django.conf import settings from datetime import datetime import logging from functools import update_wrapper -import urllib +from urllib.parse import urlencode from random import random from inspect import isclass + +from django.utils.encoding import force_bytes + from .tasks import track_request logger = logging.getLogger(__name__) def piwik_url(request): - return urllib.urlencode(dict( + return urlencode(dict( idsite=getattr(settings, 'PIWIK_SITE_ID', '0'), rec=1, - url='http://%s%s' % (request.META['HTTP_HOST'], request.path), + url=force_bytes('http://%s%s' % (request.META['HTTP_HOST'], request.path)), rand=int(random() * 0x10000), apiv=PIWIK_API_VERSION, - urlref=request.META.get('HTTP_REFERER', ''), + urlref=force_bytes(request.META.get('HTTP_REFERER', '')), ua=request.META.get('HTTP_USER_AGENT', ''), lang=request.META.get('HTTP_ACCEPT_LANGUAGE', ''), token_auth=getattr(settings, 'PIWIK_TOKEN', ''), @@ -59,3 +61,16 @@ def piwik_track(klass_or_method): return klass else: return wrap + + +def piwik_track_view(view): + if not getattr(settings, 'PIWIK_SITE_ID', 0): + return view + + def wrap(request, *args, **kwargs): + if getattr(request, 'piwik_track', True): + track_request.delay(piwik_url(request)) + return view(request, *args, **kwargs) + + update_wrapper(wrap, view) + return wrap