From 522356c4ff626267f1cfc5872d2de87d8e8ba4b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Mon, 17 Sep 2018 18:44:34 +0200 Subject: [PATCH] Add support (and fix bug) for Python 3.7 --- CHANGELOG.md | 1 + pillarsdk/utils.py | 7 +++++-- setup.py | 1 + tests/test_utils.py | 6 ++++++ tox.ini | 2 +- 5 files changed, 14 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c120638..1359c99 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ Version 1.7 (in development) - Added support pickling/unpickling resources. - Added support for `datetime` objects in API requests. +- Added support for Python 3.7 Version 1.6 diff --git a/pillarsdk/utils.py b/pillarsdk/utils.py index c2838bb..0326052 100644 --- a/pillarsdk/utils.py +++ b/pillarsdk/utils.py @@ -57,10 +57,13 @@ def join_url(url, *paths): """ assert isinstance(url, string_type), 'URL must be string type, not %r' % url + url_parts = [url.rstrip('/')] for path in paths: assert isinstance(path, string_type), 'Path components must be string type, not %r' % path - url = re.sub(r'/?$', re.sub(r'^/?', '/', path), url) - return url + url_parts.append(path.strip('/')) + if paths and paths[-1].endswith('/'): + url_parts.append('') + return '/'.join(url_parts) def join_url_params(url, params): diff --git a/setup.py b/setup.py index ec3b378..8527e39 100644 --- a/setup.py +++ b/setup.py @@ -29,6 +29,7 @@ setup( 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', 'Topic :: Software Development :: Libraries :: Python Modules' ], keywords=['pillar', 'rest', 'sdk', 'tracking', 'film', 'production'] diff --git a/tests/test_utils.py b/tests/test_utils.py index dfc8060..f38a01a 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -91,3 +91,9 @@ class PillarUtilsTests(unittest.TestCase): self.assertFalse(utils.is_valid_id(u'55f…')) self.assertFalse(utils.is_valid_id(u'ประเทศไทย')) + + def test_join_api_me(self): + # This reproduces an issue we saw when upgrading to Python 3.7. + # It resulted in the '/users/me' part being doubled. + the_url = utils.join_url('https://cloud.blender.org/api/', '/users/me') + self.assertEqual('https://cloud.blender.org/api/users/me', the_url) diff --git a/tox.ini b/tox.ini index 0b170f1..ea509ba 100644 --- a/tox.ini +++ b/tox.ini @@ -1,6 +1,6 @@ [tox] # Environment changes have to be manually synced with '.travis.yml'. -envlist = py27,py35,py36 +envlist = py27,py35,py36,py37 [pytest] ;addopts = -v --cov pillarsdk --cov-report term-missing