X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/8f6f6d2cc234f08e48055a1804997f6773321b3e..6509b5cd1935677b4fc24ebf2f40f8fc2221dac5:/src/stats/utils.py?ds=sidebyside

diff --git a/src/stats/utils.py b/src/stats/utils.py
index fc473a6f0..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,11 +5,11 @@ 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