-# -*- 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_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', ''),
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