diff --git a/.travis.yml b/.travis.yml index 06c4a75..6adc4b7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,8 @@ language: python sudo: false python: - "2.7" + - "3.4" + - "3.5" env: - DJANGO="Django>=1.7,<1.8" @@ -9,7 +11,8 @@ env: - DJANGO="Django>=1.9,<1.10" - DJANGO="Django>=1.10,<1.11" -install: pip install $DJANGO --use-mirrors +install: + - python setup.py install + - pip install $DJANGO script: script/test - diff --git a/setup.py b/setup.py index 71a5049..26091f7 100644 --- a/setup.py +++ b/setup.py @@ -18,7 +18,7 @@ def read(fname): packages = find_packages('src'), package_dir = {'': 'src'}, - install_requires = ['setuptools'], + install_requires = ['setuptools', 'six'], classifiers = [ 'Development Status :: 5 - Production/Stable', diff --git a/src/shorturls/__init__.py b/src/shorturls/__init__.py index 885a81c..ae22f1f 100644 --- a/src/shorturls/__init__.py +++ b/src/shorturls/__init__.py @@ -12,7 +12,7 @@ mod_name, conv_name = settings.SHORTURLS_DEFAULT_CONVERTER.rsplit('.', 1) try: mod = import_module(mod_name) - except ImportError, e: + except ImportError as e: raise ImproperlyConfigured( 'Could not load converter specified by SHORTURLS_DEFAULT_CONVERTER. Error was: {0!s}'.format(e)) try: diff --git a/src/shorturls/templatetags/shorturl.py b/src/shorturls/templatetags/shorturl.py index 1dbb46d..6009425 100644 --- a/src/shorturls/templatetags/shorturl.py +++ b/src/shorturls/templatetags/shorturl.py @@ -1,4 +1,5 @@ -import urlparse +from six.moves.urllib.parse import urljoin + from django import template from django.conf import settings from django.core import urlresolvers @@ -33,7 +34,7 @@ def render(self, context): tinyid = converter.from_decimal(obj.pk) if hasattr(settings, 'SHORT_BASE_URL') and settings.SHORT_BASE_URL: - return urlparse.urljoin(settings.SHORT_BASE_URL, prefix + tinyid) + return urljoin(settings.SHORT_BASE_URL, prefix + tinyid) try: return urlresolvers.reverse(views.redirect, kwargs={ diff --git a/src/shorturls/tests/test_baseconv.py b/src/shorturls/tests/test_baseconv.py index 7adce5e..6bb5dd3 100644 --- a/src/shorturls/tests/test_baseconv.py +++ b/src/shorturls/tests/test_baseconv.py @@ -5,7 +5,7 @@ class BaseConvTests(unittest.TestCase): def _test_converter(self, converter): - nums = [-10 ** 10, 10 ** 10] + range(-100, 100) + nums = [-10 ** 10, 10 ** 10] + list(range(-100, 100)) for before in nums: after = converter.to_decimal(converter.from_decimal(before)) self.assertEqual(before, after) diff --git a/src/shorturls/views.py b/src/shorturls/views.py index 8200b2d..9249b6f 100644 --- a/src/shorturls/views.py +++ b/src/shorturls/views.py @@ -1,4 +1,5 @@ -import urlparse +from six.moves.urllib.parse import urljoin, urlsplit + from django.apps import apps from django.conf import settings from django.contrib.sites.shortcuts import get_current_site @@ -43,7 +44,7 @@ def redirect(request, prefix, tiny, converter=default_converter): # actually returns a domain-relative URL -- into a fully qualified one. # If we got a fully-qualified URL, sweet. - if urlparse.urlsplit(url)[0]: + if urlsplit(url)[0]: return HttpResponsePermanentRedirect(url) # Otherwise, we need to make a full URL by prepending a base URL. @@ -55,4 +56,4 @@ def redirect(request, prefix, tiny, converter=default_converter): else: base = 'http://{0!s}/'.format(get_current_site(request).domain) - return HttpResponsePermanentRedirect(urlparse.urljoin(base, url)) + return HttpResponsePermanentRedirect(urljoin(base, url))