Skip to content

Commit 7187b82

Browse files
committed
Sem-Ver: api-break Drop support for python 2.7
* Sem-Ver: api-break Drop support for python 2.7 Signed-off-by: David Black <[email protected]> * Sem-Ver: bugfix upgrade the version of Django used for testing to be >= 2.2.8 and < 3.0.0. Signed-off-by: David Black <[email protected]> * Sem-Ver: bugfix Use the built in version of mock. Signed-off-by: David Black <[email protected]> * Sem-Ver: bugfix Fix various deprecation warnings. Signed-off-by: David Black <[email protected]>
1 parent d366cb4 commit 7187b82

File tree

11 files changed

+22
-48
lines changed

11 files changed

+22
-48
lines changed

.travis.yml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
sudo: false
22
language: python
33
python:
4-
- "2.7"
54
- "3.5"
65
- "3.6"
76
- "3.7"
87
install:
9-
- if [[ $TRAVIS_PYTHON_VERSION == 3.5 || $TRAVIS_PYTHON_VERSION == 3.6 || $TRAVIS_PYTHON_VERSION == 3.7 ]]; then pip install aiohttp==3.6.2 asynctest==0.13.0; fi
108
- pip install -q pycodestyle==2.6.0 flake8==3.8.1
119
script:
1210
- pycodestyle .
13-
- if [[ $TRAVIS_PYTHON_VERSION == 3.5 || $TRAVIS_PYTHON_VERSION == 3.6 || $TRAVIS_PYTHON_VERSION == 3.7 ]]; then flake8 . ; fi
11+
- flake8 .
1412
- python -Wd setup.py nosetests
Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +0,0 @@
1-
import sys
2-
3-
import nose
4-
5-
6-
if sys.version_info < (3, 5):
7-
raise nose.SkipTest('Skipping tests for Python version < 3.5')
8-
else:
9-
try:
10-
import asynctest # noqa
11-
except ImportError:
12-
raise nose.SkipTest(
13-
'Skipping tests because asynctest is not installed')
14-
15-
del sys
16-
del nose

atlassian_jwt_auth/frameworks/common/backend.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
from abc import ABCMeta, abstractmethod, abstractproperty
2-
try:
3-
from functools import lru_cache
4-
except ImportError:
5-
from backports.functools_lru_cache import lru_cache
2+
from functools import lru_cache
63

74
from atlassian_jwt_auth import HTTPSPublicKeyRetriever, JWTAuthVerifier
85

atlassian_jwt_auth/key.py

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import logging
44
import os
55
import re
6-
import sys
6+
from urllib.parse import unquote_plus
77

88
import cachecontrol
99
import cryptography.hazmat.backends
@@ -17,10 +17,6 @@
1717
PublicKeyRetrieverException,
1818
PrivateKeyRetrieverException)
1919

20-
if sys.version_info[0] >= 3:
21-
from urllib.parse import unquote_plus
22-
else:
23-
from urllib import unquote_plus
2420

2521
PEM_FILE_TYPE = 'application/x-pem-file'
2622

@@ -159,9 +155,10 @@ def retrieve(self, key_identifier, **requests_kwargs):
159155
except (RequestException, PublicKeyRetrieverException) as e:
160156
self.handle_retrieval_exception(retriever, e)
161157
logger = logging.getLogger(__name__)
162-
logger.warn('Unable to retrieve public key from store',
163-
extra={'underlying_error': str(e),
164-
'key repository': retriever.base_url})
158+
logger.warning(
159+
'Unable to retrieve public key from store',
160+
extra={'underlying_error': str(e),
161+
'key repository': retriever.base_url})
165162
raise PublicKeyRetrieverException(
166163
'Cannot load key from key repositories')
167164

atlassian_jwt_auth/tests/test_public_key_provider.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import os
22
import re
33
import unittest
4+
from unittest import mock
45

5-
import mock
66
import httptest
77
import requests
88

atlassian_jwt_auth/tests/test_signer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import datetime
22
import unittest
3+
from unittest import mock
34

4-
import mock
55
from cryptography.hazmat.primitives import serialization
66

77
import atlassian_jwt_auth

atlassian_jwt_auth/tests/test_signer_private_key_repo.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,12 @@ def test_picks_last_valid_key_id(self):
5555

5656
def test_fails_if_issuer_has_no_valid_keys(self):
5757
signer = self.create_signer_for_issuer('invalid-issuer')
58-
with self.assertRaisesRegexp(IOError, 'Issuer has no valid keys'):
58+
with self.assertRaisesRegex(IOError, 'Issuer has no valid keys'):
5959
signer.generate_jwt('audience')
6060

6161
def test_fails_if_issuer_does_not_exist(self):
6262
signer = self.create_signer_for_issuer('this-does-not-exist')
63-
with self.assertRaisesRegexp(OSError, 'No such file or directory'):
63+
with self.assertRaisesRegex(OSError, 'No such file or directory'):
6464
signer.generate_jwt('audience')
6565

6666

atlassian_jwt_auth/tests/test_verifier.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import datetime
22
import unittest
3+
from unittest import mock
34

45
import jwt
56
import jwt.exceptions
6-
import mock
77

88
import atlassian_jwt_auth
99
import atlassian_jwt_auth.exceptions
@@ -94,7 +94,7 @@ def test_verify_jwt_with_key_identifier_not_starting_with_issuer(self):
9494
algorithm=self.algorithm,
9595
)
9696
a_jwt = signer.generate_jwt(self._example_aud)
97-
with self.assertRaisesRegexp(ValueError, 'Issuer does not own'):
97+
with self.assertRaisesRegex(ValueError, 'Issuer does not own'):
9898
verifier.verify_jwt(a_jwt, self._example_aud)
9999

100100
@mock.patch('atlassian_jwt_auth.verifier.jwt.decode')
@@ -113,7 +113,7 @@ def test_verify_jwt_with_non_matching_sub_and_iss(self, m_j_decode):
113113
ValueError,
114114
atlassian_jwt_auth.exceptions.SubjectDoesNotMatchIssuerException,
115115
]:
116-
with self.assertRaisesRegexp(exception, expected_msg):
116+
with self.assertRaisesRegex(exception, expected_msg):
117117
verifier.verify_jwt(a_jwt, self._example_aud)
118118

119119
@mock.patch('atlassian_jwt_auth.verifier.jwt.decode')
@@ -129,7 +129,7 @@ def test_verify_jwt_with_jwt_lasting_gt_max_time(self, m_j_decode):
129129
m_j_decode.return_value = claims
130130
a_jwt = self._jwt_auth_signer.generate_jwt(self._example_aud)
131131
verifier = self._setup_jwt_auth_verifier(self._public_key_pem)
132-
with self.assertRaisesRegexp(ValueError, expected_msg):
132+
with self.assertRaisesRegex(ValueError, expected_msg):
133133
verifier.verify_jwt(a_jwt, self._example_aud)
134134

135135
def test_verify_jwt_with_jwt_with_already_seen_jti(self):
@@ -146,7 +146,7 @@ def test_verify_jwt_with_jwt_with_already_seen_jti(self):
146146
for exception in [
147147
ValueError,
148148
atlassian_jwt_auth.exceptions.JtiUniquenessException]:
149-
with self.assertRaisesRegexp(exception, 'has already been used'):
149+
with self.assertRaisesRegex(exception, 'has already been used'):
150150
verifier.verify_jwt(a_jwt, self._example_aud)
151151

152152
def assert_jwt_accepted_more_than_once(self, verifier, a_jwt):
@@ -180,8 +180,8 @@ def test_verify_jwt_subject_should_match_issuer(self):
180180
a_jwt = self._jwt_auth_signer.generate_jwt(
181181
self._example_aud,
182182
additional_claims={'sub': 'not-' + self._example_issuer})
183-
with self.assertRaisesRegexp(ValueError,
184-
'Issuer does not match the subject.'):
183+
with self.assertRaisesRegex(ValueError,
184+
'Issuer does not match the subject.'):
185185
verifier.verify_jwt(a_jwt, self._example_aud)
186186

187187
def test_verify_jwt_subject_does_not_need_to_match_issuer(self):
@@ -204,7 +204,7 @@ def test_verify_jwt_with_missing_aud_claim(self, m_j_decode):
204204
m_j_decode.return_value = claims
205205
a_jwt = self._jwt_auth_signer.generate_jwt(self._example_aud)
206206
verifier = self._setup_jwt_auth_verifier(self._public_key_pem)
207-
with self.assertRaisesRegexp(KeyError, expected_msg):
207+
with self.assertRaisesRegex(KeyError, expected_msg):
208208
verifier.verify_jwt(a_jwt, self._example_aud)
209209

210210
def test_verify_jwt_with_none_aud(self):

requirements.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,3 @@ cryptography>=3.2.1,<3.3.0
22
PyJWT>=1.5.2,<2.0.0
33
requests>=2.8.1,<3.0.0
44
CacheControl==0.12.6
5-
backports.functools-lru-cache==1.6.1

setup.cfg

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ classifier =
1010
Intended Audience :: Developers
1111
Operating System :: OS Independent
1212
Programming Language :: Python
13-
Programming Language :: Python :: 2
14-
Programming Language :: Python :: 2.7
1513
Programming Language :: Python :: 3
1614
Programming Language :: Python :: 3.5
1715
Programming Language :: Python :: 3.6

0 commit comments

Comments
 (0)