diff --git a/common/djangoapps/track/admin.py b/common/djangoapps/track/admin.py index f450a923242f4bb753b8eb6debcd678c9f410b92..a0a3b20c6a82861b6a6ee35230ab267991bcfe94 100644 --- a/common/djangoapps/track/admin.py +++ b/common/djangoapps/track/admin.py @@ -2,6 +2,8 @@ django admin pages for courseware model ''' +from __future__ import absolute_import + from django.contrib import admin from track.models import TrackingLog diff --git a/common/djangoapps/track/contexts.py b/common/djangoapps/track/contexts.py index 377b9b76f60140397734efa319de5f8f15082c47..0954a8b5486bd43850b06e1f3e1701812144e246 100644 --- a/common/djangoapps/track/contexts.py +++ b/common/djangoapps/track/contexts.py @@ -1,4 +1,6 @@ """Generates common contexts""" +from __future__ import absolute_import + import logging from opaque_keys import InvalidKeyError diff --git a/common/djangoapps/track/event_transaction_utils.py b/common/djangoapps/track/event_transaction_utils.py index 6c24f9ede2a4220ee27db14703ae20035e429157..5a7d0938e916ee5beb35a67f4471bac4b970cfbb 100644 --- a/common/djangoapps/track/event_transaction_utils.py +++ b/common/djangoapps/track/event_transaction_utils.py @@ -2,6 +2,8 @@ Helper functions to access and update the id and type used in event tracking. """ +from __future__ import absolute_import + from uuid import UUID, uuid4 from openedx.core.lib.cache_utils import get_cache diff --git a/common/djangoapps/track/middleware.py b/common/djangoapps/track/middleware.py index 99a1c0e975f84cc0c748e03de5adc27ace2181f1..6ccb7617aff6dabcb5f43237dd5fa1b9c0f7cae0 100644 --- a/common/djangoapps/track/middleware.py +++ b/common/djangoapps/track/middleware.py @@ -6,6 +6,8 @@ framework. """ +from __future__ import absolute_import + import hashlib import hmac import json @@ -13,10 +15,11 @@ import logging import re import sys +import six from django.conf import settings +from eventtracking import tracker from ipware.ip import get_ip -from eventtracking import tracker from track import contexts, views log = logging.getLogger(__name__) @@ -137,7 +140,7 @@ class TrackMiddleware(object): 'username': self.get_username(request), 'ip': self.get_request_ip_address(request), } - for header_name, context_key in META_KEY_TO_CONTEXT_KEY.iteritems(): + for header_name, context_key in six.iteritems(META_KEY_TO_CONTEXT_KEY): # HTTP headers may contain Latin1 characters. Decoding using Latin1 encoding here # avoids encountering UnicodeDecodeError exceptions when these header strings are # output to tracking logs. diff --git a/common/djangoapps/track/models.py b/common/djangoapps/track/models.py index c59cf6502af15cd0c9feb7b1db46d75649e9e85c..c4fbb76c2a204c1778039580bda3f91a57860670 100644 --- a/common/djangoapps/track/models.py +++ b/common/djangoapps/track/models.py @@ -1,2 +1,4 @@ # pylint: disable=unused-import, missing-docstring +from __future__ import absolute_import + from track.backends.django import TrackingLog diff --git a/common/djangoapps/track/segment.py b/common/djangoapps/track/segment.py index de73bf24b067e7311f8bc1baf952c8a81a19f1ad..3a010d99ca21a930b81ec29b2a5b7019ce7754b2 100644 --- a/common/djangoapps/track/segment.py +++ b/common/djangoapps/track/segment.py @@ -8,11 +8,12 @@ required by server-side events. To use, call "from track import segment", then call segment.track() or segment.identify(). """ -from urlparse import urlunsplit +from __future__ import absolute_import import analytics from django.conf import settings from eventtracking import tracker +from six.moves.urllib.parse import urlunsplit def track(user_id, event_name, properties=None, context=None): diff --git a/common/djangoapps/track/shim.py b/common/djangoapps/track/shim.py index 5773539f94fc619d2b5fd510ae85e1bd3c8e86a3..b4446bff4336429d682cc59de71b14a0c9bf3344 100644 --- a/common/djangoapps/track/shim.py +++ b/common/djangoapps/track/shim.py @@ -1,5 +1,7 @@ """Map new event context values to old top-level field values. Ensures events can be parsed by legacy parsers.""" +from __future__ import absolute_import + import json from .transformers import EventTransformerRegistry diff --git a/common/djangoapps/track/tracker.py b/common/djangoapps/track/tracker.py index a3614c76e9e33bf5cda709780b09593813d84a89..42ea290972008f0541c9ec48fd30ef826f265d8b 100644 --- a/common/djangoapps/track/tracker.py +++ b/common/djangoapps/track/tracker.py @@ -18,9 +18,12 @@ below:: """ +from __future__ import absolute_import + import inspect from importlib import import_module +import six from django.conf import settings from track.backends import BaseBackend @@ -41,7 +44,7 @@ def _initialize_backends_from_django_settings(): config = getattr(settings, 'TRACKING_BACKENDS', {}) - for name, values in config.iteritems(): + for name, values in six.iteritems(config): # Ignore empty values to turn-off default tracker backends if values: engine = values['ENGINE'] @@ -86,7 +89,7 @@ def send(event): """ - for name, backend in backends.iteritems(): + for name, backend in six.iteritems(backends): backend.send(event) diff --git a/common/djangoapps/track/transformers.py b/common/djangoapps/track/transformers.py index 75a943f7730b2d7b4c3274a3ee1de6d896b3ef3e..634a93cca624e752fb1493e662f065edae44274c 100644 --- a/common/djangoapps/track/transformers.py +++ b/common/djangoapps/track/transformers.py @@ -5,9 +5,12 @@ by name (or name prefix) in the EventTransformerRegistry, which is used to apply them to the appropriate events. """ +from __future__ import absolute_import + import json import logging +import six from opaque_keys import InvalidKeyError from opaque_keys.edx.keys import UsageKey @@ -46,7 +49,7 @@ class DottedPathMapping(object): def __getitem__(self, key): if key in self._match_registry: return self._match_registry[key] - if isinstance(key, basestring): + if isinstance(key, six.string_types): # Reverse-sort the keys to find the longest matching prefix. for prefix in sorted(self._prefix_registry, reverse=True): if key.startswith(prefix): @@ -87,7 +90,7 @@ class DottedPathMapping(object): Return the keys of the mapping, including both exact matches and prefix matches. """ - return self._match_registry.keys() + self._prefix_registry.keys() + return list(self._match_registry.keys()) + list(self._prefix_registry.keys()) class EventTransformerRegistry(object): @@ -220,7 +223,7 @@ class EventTransformer(dict): Create a data version of self[u'event'] at self.event """ if u'event' in self: - if isinstance(self[u'event'], basestring): + if isinstance(self[u'event'], six.string_types): self.event = json.loads(self[u'event']) else: self.event = self[u'event'] @@ -231,7 +234,7 @@ class EventTransformer(dict): Keep the same format we were originally given. """ - if isinstance(self.get(u'event'), basestring): + if isinstance(self.get(u'event'), six.string_types): self[u'event'] = json.dumps(self.event) else: self[u'event'] = self.event diff --git a/common/djangoapps/track/urls.py b/common/djangoapps/track/urls.py index b1ada5a3adf016681f3e02e743ce9e08576dfb99..e014c198aafbc6d12dea66c236386c022fd053c8 100644 --- a/common/djangoapps/track/urls.py +++ b/common/djangoapps/track/urls.py @@ -2,6 +2,8 @@ URLs for track app """ +from __future__ import absolute_import + from django.conf import settings from django.conf.urls import url diff --git a/common/djangoapps/track/utils.py b/common/djangoapps/track/utils.py index 9a20fe249e01e17e9e81f120f6e21b01a962794b..8a6c42aea9b7af7cd1528fae32a3a7c0a10649f6 100644 --- a/common/djangoapps/track/utils.py +++ b/common/djangoapps/track/utils.py @@ -1,5 +1,7 @@ """Utility functions and classes for track backends""" +from __future__ import absolute_import + import json from datetime import date, datetime