X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/63f861861578b33416a0b2d801252b27443fabde..4fb23ed3c3396d23a37a718fc857ecc8b36b0c7f:/src/stats/utils.py?ds=inline diff --git a/src/stats/utils.py b/src/stats/utils.py index fc473a6f0..109e2bbe2 100644 --- a/src/stats/utils.py +++ b/src/stats/utils.py @@ -1,16 +1,15 @@ -# -*- 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. +# This file is part of Wolne Lektury, licensed under GNU Affero GPLv3 or later. +# Copyright © Fundacja Wolne Lektury. See NOTICE for more information. # 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_str +from django.utils.encoding import force_bytes from .tasks import track_request @@ -18,13 +17,13 @@ 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=force_str('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=force_str(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', ''), @@ -62,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