From 8453c7346de108d1d092d2a694e034329ee77887 Mon Sep 17 00:00:00 2001 From: Yagnesh Date: Mon, 6 Nov 2023 21:12:35 +0530 Subject: [PATCH] feat: DEPR EdxRestApiClient --- CHANGELOG.rst | 4 + edx_rest_api_client/client.py | 71 +---------- edx_rest_api_client/exceptions.py | 1 - edx_rest_api_client/tests/test_client.py | 143 +---------------------- requirements/base.in | 1 - requirements/base.txt | 30 ++--- requirements/ci.txt | 4 +- requirements/common_constraints.txt | 14 +-- requirements/dev.txt | 96 +++++++-------- requirements/pip-tools.txt | 14 +-- requirements/pip.txt | 8 +- requirements/test.txt | 77 +++++------- 12 files changed, 107 insertions(+), 356 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index d21cbec..f894335 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -17,6 +17,10 @@ Unreleased ---------- * Nothing +[6.0.0] +-------- +Breaking Changes: The EdxRestApiClient` has been deprecated and removed in this release. + [5.7.1] -------- chore: Update Requirements specifically to unpin the requests library diff --git a/edx_rest_api_client/client.py b/edx_rest_api_client/client.py index f738508..8f58a7a 100644 --- a/edx_rest_api_client/client.py +++ b/edx_rest_api_client/client.py @@ -1,17 +1,16 @@ import datetime import json -import os import socket +import os import crum import requests import requests.utils -import slumber from edx_django_utils.cache import TieredCache from edx_django_utils.monitoring import set_custom_attribute from edx_rest_api_client.__version__ import __version__ -from edx_rest_api_client.auth import BearerAuth, JwtAuth, SuppliedJwtAuth +from edx_rest_api_client.auth import SuppliedJwtAuth # When caching tokens, use this value to err on expiring tokens a little early so they are # sure to be valid at the time they are used. @@ -299,69 +298,3 @@ def request(self, method, url, headers=None, **kwargs): # pylint: disable=argum set_custom_attribute('api_client', 'OAuthAPIClient') self._ensure_authentication() return super().request(method, url, headers=headers, **kwargs) - - -class EdxRestApiClient(slumber.API): - """ - API client for edX REST API. - - (deprecated) See docs/decisions/0002-oauth-api-client-replacement.rst. - """ - - @classmethod - def user_agent(cls): - return USER_AGENT - - @classmethod - def get_oauth_access_token(cls, url, client_id, client_secret, token_type='bearer', - timeout=(REQUEST_CONNECT_TIMEOUT, REQUEST_READ_TIMEOUT)): - # 'To help transition to OAuthAPIClient, use EdxRestApiClient.get_and_cache_jwt_oauth_access_token instead' - # 'of EdxRestApiClient.get_oauth_access_token to share cached jwt token used by OAuthAPIClient.' - return get_oauth_access_token(url, client_id, client_secret, token_type=token_type, timeout=timeout) - - @classmethod - def get_and_cache_jwt_oauth_access_token(cls, url, client_id, client_secret, - timeout=(REQUEST_CONNECT_TIMEOUT, REQUEST_READ_TIMEOUT)): - return get_and_cache_oauth_access_token(url, client_id, client_secret, token_type="jwt", timeout=timeout) - - def __init__(self, url, signing_key=None, username=None, full_name=None, email=None, - timeout=5, issuer=None, expires_in=30, tracking_context=None, oauth_access_token=None, - session=None, jwt=None, **kwargs): - """ - EdxRestApiClient is deprecated. Use OAuthAPIClient instead. - - Instantiate a new client. You can pass extra kwargs to Slumber like - 'append_slash'. - - Raises: - ValueError: If a URL is not provided. - - """ - set_custom_attribute('api_client', 'EdxRestApiClient') - if not url: - raise ValueError('An API url must be supplied!') - - if jwt: - auth = SuppliedJwtAuth(jwt) - elif oauth_access_token: - auth = BearerAuth(oauth_access_token) - elif signing_key and username: - auth = JwtAuth(username, full_name, email, signing_key, - issuer=issuer, expires_in=expires_in, tracking_context=tracking_context) - else: - auth = None - - session = session or requests.Session() - session.headers['User-Agent'] = self.user_agent() - - session.timeout = timeout - super().__init__( - url, - session=session, - auth=auth, - **kwargs - ) - - -EdxRestApiClient.user_agent.__func__.__doc__ = user_agent.__doc__ -EdxRestApiClient.get_oauth_access_token.__func__.__doc__ = get_oauth_access_token.__doc__ diff --git a/edx_rest_api_client/exceptions.py b/edx_rest_api_client/exceptions.py index 068d8c1..7d29fc9 100644 --- a/edx_rest_api_client/exceptions.py +++ b/edx_rest_api_client/exceptions.py @@ -1,3 +1,2 @@ # noinspection PyUnresolvedReferences from requests.exceptions import Timeout # pylint: disable=unused-import -from slumber.exceptions import * # pylint: disable=wildcard-import diff --git a/edx_rest_api_client/tests/test_client.py b/edx_rest_api_client/tests/test_client.py index cfae193..f2cb9a0 100644 --- a/edx_rest_api_client/tests/test_client.py +++ b/edx_rest_api_client/tests/test_client.py @@ -1,6 +1,5 @@ import datetime import json -import os from unittest import TestCase, mock import ddt @@ -10,9 +9,8 @@ from freezegun import freeze_time from edx_rest_api_client import __version__ -from edx_rest_api_client.auth import JwtAuth -from edx_rest_api_client.client import (EdxRestApiClient, OAuthAPIClient, get_and_cache_oauth_access_token, - get_oauth_access_token, user_agent) +from edx_rest_api_client.client import (OAuthAPIClient, get_and_cache_oauth_access_token, + get_oauth_access_token) from edx_rest_api_client.tests.mixins import AuthenticationTestMixin URL = 'http://example.com/api/v2' @@ -27,124 +25,12 @@ JWT = 'abc.123.doremi' -@ddt.ddt -class EdxRestApiClientTests(TestCase): - """ - Tests for the edX Rest API client. - """ - - @ddt.unpack - @ddt.data( - ({'url': URL, 'signing_key': SIGNING_KEY, 'username': USERNAME, - 'full_name': FULL_NAME, 'email': EMAIL}, JwtAuth), - ({'url': URL, 'signing_key': SIGNING_KEY, 'username': USERNAME, 'full_name': None, 'email': EMAIL}, JwtAuth), - ({'url': URL, 'signing_key': SIGNING_KEY, 'username': USERNAME, - 'full_name': FULL_NAME, 'email': None}, JwtAuth), - ({'url': URL, 'signing_key': SIGNING_KEY, 'username': USERNAME, 'full_name': None, 'email': None}, JwtAuth), - ({'url': URL, 'signing_key': SIGNING_KEY, 'username': USERNAME}, JwtAuth), - ({'url': URL, 'signing_key': None, 'username': USERNAME}, type(None)), - ({'url': URL, 'signing_key': SIGNING_KEY, 'username': None}, type(None)), - ({'url': URL, 'signing_key': None, 'username': None, 'oauth_access_token': None}, type(None)) - ) - def test_valid_configuration(self, kwargs, auth_type): - """ - The constructor should return successfully if all arguments are valid. - We also check that the auth type of the api is what we expect. - """ - api = EdxRestApiClient(**kwargs) - self.assertIsInstance(api._store['session'].auth, auth_type) # pylint: disable=protected-access - - @ddt.data( - {'url': None, 'signing_key': SIGNING_KEY, 'username': USERNAME}, - {'url': None, 'signing_key': None, 'username': None, 'oauth_access_token': None}, - ) - def test_invalid_configuration(self, kwargs): - """ - If the constructor arguments are invalid, an InvalidConfigurationError should be raised. - """ - self.assertRaises(ValueError, EdxRestApiClient, **kwargs) - - @mock.patch('edx_rest_api_client.auth.JwtAuth.__init__', return_value=None) - def test_tracking_context(self, mock_auth): - """ - Ensure the tracking context is included with API requests if specified. - """ - EdxRestApiClient(URL, SIGNING_KEY, USERNAME, FULL_NAME, EMAIL, tracking_context=TRACKING_CONTEXT) - self.assertIn(TRACKING_CONTEXT, mock_auth.call_args[1].values()) - - def test_oauth2(self): - """ - Ensure OAuth2 authentication is used when an access token is supplied to the constructor. - """ - - with mock.patch('edx_rest_api_client.auth.BearerAuth.__init__', return_value=None) as mock_auth: - EdxRestApiClient(URL, oauth_access_token=ACCESS_TOKEN) - mock_auth.assert_called_with(ACCESS_TOKEN) - - def test_supplied_jwt(self): - """Ensure JWT authentication is used when a JWT is supplied to the constructor.""" - with mock.patch('edx_rest_api_client.auth.SuppliedJwtAuth.__init__', return_value=None) as mock_auth: - EdxRestApiClient(URL, jwt=JWT) - mock_auth.assert_called_with(JWT) - - def test_user_agent(self): - """Make sure our custom User-Agent is getting built correctly.""" - with mock.patch('socket.gethostbyname', return_value='test_hostname'): - default_user_agent = user_agent() - self.assertIn('python-requests', default_user_agent) - self.assertIn(f'edx-rest-api-client/{__version__}', default_user_agent) - self.assertIn('test_hostname', default_user_agent) - - with mock.patch('socket.gethostbyname') as mock_gethostbyname: - mock_gethostbyname.side_effect = ValueError() - default_user_agent = user_agent() - self.assertIn('unknown_client_name', default_user_agent) - - with mock.patch.dict(os.environ, {'EDX_REST_API_CLIENT_NAME': "awesome_app"}): - uagent = user_agent() - self.assertIn('awesome_app', uagent) - - self.assertEqual(user_agent(), EdxRestApiClient.user_agent()) - - @ddt.ddt class ClientCredentialTests(AuthenticationTestMixin, TestCase): """ Test client credentials requests. """ - @responses.activate - def test_get_client_credential_access_token_success(self): - """ - Test that the get access token method handles 200 responses and returns the access token. - """ - code = 200 - body = {"access_token": "my-token", "expires_in": 1000} - now = datetime.datetime.utcnow() - - expected_return = ("my-token", now + datetime.timedelta(seconds=1000)) - - with freeze_time(now): - self._mock_auth_api(OAUTH_URL, code, body=body) - self.assertEqual( - EdxRestApiClient.get_oauth_access_token(OAUTH_URL, "client_id", "client_secret"), - expected_return - ) - - @ddt.data( - (400, {"error": "denied"}), - (500, None) - ) - @ddt.unpack - @responses.activate - def test_get_client_credential_access_token_failure(self, code, body): - """ - Test that the get access token method handles failure responses. - """ - with self.assertRaises(requests.RequestException): - self._mock_auth_api(OAUTH_URL, code, body=body) - EdxRestApiClient.get_oauth_access_token(OAUTH_URL, "client_id", "client_secret") - def test_refresh_token_required(self): self._mock_auth_api(OAUTH_URL, 200, body=None) with self.assertRaises(AssertionError): @@ -160,31 +46,6 @@ def setUp(self): super().setUp() TieredCache.dangerous_clear_all_tiers() - @responses.activate - def test_shared_client_credential_jwt_access_token(self): - """ - Test that get_and_cache_jwt_oauth_access_token returns the same access token used by the OAuthAPIClient. - """ - body = {'access_token': "my-token", 'expires_in': 1000} - now = datetime.datetime.utcnow() - expected_return = ('my-token', now + datetime.timedelta(seconds=1000)) - - with freeze_time(now): - self._mock_auth_api(OAUTH_URL, 200, body=body) - actual_return = EdxRestApiClient.get_and_cache_jwt_oauth_access_token( - OAUTH_URL, 'client_id', 'client_secret' - ) - self.assertEqual(actual_return, expected_return) - self.assertEqual(len(responses.calls), 1) - - # ensure OAuthAPIClient uses the same cached auth token without re-requesting the token from the server - oauth_client = OAuthAPIClient(OAUTH_URL, 'client_id', 'client_secret') - self._mock_auth_api(URL, 200, {'status': 'ok'}) - oauth_client.post(URL, data={'test': 'ok'}) - self.assertEqual(oauth_client.auth.token, actual_return[0]) - self.assertEqual(len(responses.calls), 2) - self.assertEqual(URL, responses.calls[1][0].url) - @responses.activate def test_token_caching(self): """ diff --git a/requirements/base.in b/requirements/base.in index 58e5f38..01e2f4b 100644 --- a/requirements/base.in +++ b/requirements/base.in @@ -3,5 +3,4 @@ edx-django-utils requests -slumber PyJWT diff --git a/requirements/base.txt b/requirements/base.txt index 6ba97f1..3ad9c42 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -1,24 +1,20 @@ # -# This file is autogenerated by pip-compile with Python 3.8 +# This file is autogenerated by pip-compile with Python 3.10 # by the following command: # # make upgrade # asgiref==3.8.1 # via django -backports-zoneinfo==0.2.1 ; python_version < "3.9" - # via - # -c requirements/constraints.txt - # django -certifi==2024.6.2 +certifi==2024.8.30 # via requests -cffi==1.16.0 +cffi==1.17.1 # via pynacl charset-normalizer==3.3.2 # via requests click==8.1.7 # via edx-django-utils -django==4.2.13 +django==4.2.16 # via # -c requirements/common_constraints.txt # django-crum @@ -28,31 +24,27 @@ django-crum==0.7.9 # via edx-django-utils django-waffle==4.1.0 # via edx-django-utils -edx-django-utils==5.14.2 +edx-django-utils==5.15.0 # via -r requirements/base.in -idna==3.7 +idna==3.8 # via requests -newrelic==9.11.0 +newrelic==9.13.0 # via edx-django-utils -pbr==6.0.0 +pbr==6.1.0 # via stevedore psutil==6.0.0 # via edx-django-utils pycparser==2.22 # via cffi -pyjwt==2.8.0 +pyjwt==2.9.0 # via -r requirements/base.in pynacl==1.5.0 # via edx-django-utils requests==2.32.3 - # via - # -r requirements/base.in - # slumber -slumber==0.7.1 # via -r requirements/base.in -sqlparse==0.5.0 +sqlparse==0.5.1 # via django -stevedore==5.2.0 +stevedore==5.3.0 # via edx-django-utils typing-extensions==4.12.2 # via asgiref diff --git a/requirements/ci.txt b/requirements/ci.txt index 8d922db..3822bef 100644 --- a/requirements/ci.txt +++ b/requirements/ci.txt @@ -1,10 +1,10 @@ # -# This file is autogenerated by pip-compile with Python 3.8 +# This file is autogenerated by pip-compile with Python 3.10 # by the following command: # # make upgrade # -cachetools==5.3.3 +cachetools==5.5.0 # via tox chardet==5.2.0 # via tox diff --git a/requirements/common_constraints.txt b/requirements/common_constraints.txt index 22beac8..5ba9104 100644 --- a/requirements/common_constraints.txt +++ b/requirements/common_constraints.txt @@ -22,15 +22,15 @@ Django<5.0 # elasticsearch>=7.14.0 includes breaking changes in it which caused issues in discovery upgrade process. # elastic search changelog: https://www.elastic.co/guide/en/enterprise-search/master/release-notes-7.14.0.html +# See https://github.com/openedx/edx-platform/issues/35126 for more info elasticsearch<7.14.0 # django-simple-history>3.0.0 adds indexing and causes a lot of migrations to be affected django-simple-history==3.0.0 -# opentelemetry requires version 6.x at the moment: -# https://github.com/open-telemetry/opentelemetry-python/issues/3570 -# Normally this could be added as a constraint in edx-django-utils, where we're -# adding the opentelemetry dependency. However, when we compile pip-tools.txt, -# that uses version 7.x, and then there's no undoing that when compiling base.txt. -# So we need to pin it globally, for now. -# Ticket for unpinning: https://github.com/openedx/edx-lint/issues/407 +# Cause: https://github.com/openedx/event-tracking/pull/290 +# event-tracking 2.4.1 upgrades to pymongo 4.4.0 which is not supported on edx-platform. +# We will pin event-tracking to do not break existing installations +# This can be unpinned once https://github.com/openedx/edx-platform/issues/34586 +# has been resolved and edx-platform is running with pymongo>=4.4.0 +event-tracking<2.4.1 diff --git a/requirements/dev.txt b/requirements/dev.txt index f425b2c..1ea5475 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.8 +# This file is autogenerated by pip-compile with Python 3.10 # by the following command: # # make upgrade @@ -8,7 +8,7 @@ asgiref==3.8.1 # via # -r requirements/test.txt # django -astroid==3.2.2 +astroid==3.2.4 # via # -r requirements/test.txt # pylint @@ -17,24 +17,19 @@ backports-tarfile==1.2.0 # via # -r requirements/test.txt # jaraco-context -backports-zoneinfo==0.2.1 ; python_version < "3.9" - # via - # -c requirements/constraints.txt - # -r requirements/test.txt - # django build==1.2.1 # via # -r requirements/pip-tools.txt # pip-tools -cachetools==5.3.3 +cachetools==5.5.0 # via # -r requirements/ci.txt # tox -certifi==2024.6.2 +certifi==2024.8.30 # via # -r requirements/test.txt # requests -cffi==1.16.0 +cffi==1.17.1 # via # -r requirements/test.txt # cryptography @@ -68,11 +63,11 @@ colorama==0.4.6 # via # -r requirements/ci.txt # tox -coverage[toml]==7.5.4 +coverage[toml]==7.6.1 # via # -r requirements/test.txt # pytest-cov -cryptography==42.0.8 +cryptography==43.0.1 # via # -r requirements/test.txt # secretstorage @@ -86,7 +81,7 @@ distlib==0.3.8 # via # -r requirements/ci.txt # virtualenv -django==4.2.13 +django==4.2.16 # via # -c requirements/common_constraints.txt # -r requirements/test.txt @@ -101,40 +96,34 @@ django-waffle==4.1.0 # via # -r requirements/test.txt # edx-django-utils -docutils==0.20.1 +docutils==0.21.2 # via # -r requirements/test.txt # readme-renderer -edx-django-utils==5.14.2 +edx-django-utils==5.15.0 # via -r requirements/test.txt -edx-lint==5.3.6 +edx-lint==5.4.0 # via -r requirements/test.txt -exceptiongroup==1.2.1 +exceptiongroup==1.2.2 # via # -r requirements/test.txt # pytest -filelock==3.14.0 +filelock==3.15.4 # via # -r requirements/ci.txt # tox # virtualenv freezegun==1.5.1 # via -r requirements/test.txt -idna==3.7 +idna==3.8 # via # -r requirements/test.txt # requests -importlib-metadata==7.2.1 +importlib-metadata==8.4.0 # via - # -r requirements/pip-tools.txt # -r requirements/test.txt - # build # keyring # twine -importlib-resources==6.4.0 - # via - # -r requirements/test.txt - # keyring iniconfig==2.0.0 # via # -r requirements/test.txt @@ -147,11 +136,11 @@ jaraco-classes==3.4.0 # via # -r requirements/test.txt # keyring -jaraco-context==5.3.0 +jaraco-context==6.0.1 # via # -r requirements/test.txt # keyring -jaraco-functools==4.0.1 +jaraco-functools==4.0.2 # via # -r requirements/test.txt # keyring @@ -164,7 +153,7 @@ jinja2==3.1.4 # via # -r requirements/test.txt # code-annotations -keyring==25.2.1 +keyring==25.3.0 # via # -r requirements/test.txt # twine @@ -184,16 +173,16 @@ mdurl==0.1.2 # via # -r requirements/test.txt # markdown-it-py -more-itertools==10.3.0 +more-itertools==10.5.0 # via # -r requirements/test.txt # jaraco-classes # jaraco-functools -newrelic==9.11.0 +newrelic==9.13.0 # via # -r requirements/test.txt # edx-django-utils -nh3==0.2.17 +nh3==0.2.18 # via # -r requirements/test.txt # readme-renderer @@ -207,13 +196,13 @@ packaging==23.2 # pyproject-api # pytest # tox -pbr==6.0.0 +pbr==6.1.0 # via # -r requirements/test.txt # stevedore pip-tools==7.4.1 # via -r requirements/pip-tools.txt -pkginfo==1.11.1 +pkginfo==1.10.0 # via # -r requirements/test.txt # twine @@ -234,7 +223,7 @@ psutil==6.0.0 # via # -r requirements/test.txt # edx-django-utils -pycodestyle==2.12.0 +pycodestyle==2.12.1 # via -r requirements/test.txt pycparser==2.22 # via @@ -245,9 +234,9 @@ pygments==2.18.0 # -r requirements/test.txt # readme-renderer # rich -pyjwt==2.8.0 +pyjwt==2.9.0 # via -r requirements/test.txt -pylint==3.2.3 +pylint==3.2.7 # via # -r requirements/test.txt # edx-lint @@ -280,14 +269,14 @@ pyproject-hooks==1.1.0 # -r requirements/pip-tools.txt # build # pip-tools -pytest==8.2.2 +pytest==8.3.2 # via # -r requirements/test.txt # pytest-cov # pytest-django pytest-cov==5.0.0 # via -r requirements/test.txt -pytest-django==4.8.0 +pytest-django==4.9.0 # via -r requirements/test.txt python-dateutil==2.9.0.post0 # via @@ -297,12 +286,12 @@ python-slugify==8.0.4 # via # -r requirements/test.txt # code-annotations -pyyaml==6.0.1 +pyyaml==6.0.2 # via # -r requirements/test.txt # code-annotations # responses -readme-renderer==43.0 +readme-renderer==44.0 # via # -r requirements/test.txt # twine @@ -311,7 +300,6 @@ requests==2.32.3 # -r requirements/test.txt # requests-toolbelt # responses - # slumber # twine requests-toolbelt==1.0.0 # via @@ -323,7 +311,7 @@ rfc3986==2.0.0 # via # -r requirements/test.txt # twine -rich==13.7.1 +rich==13.8.0 # via # -r requirements/test.txt # twine @@ -336,13 +324,11 @@ six==1.16.0 # -r requirements/test.txt # edx-lint # python-dateutil -slumber==0.7.1 - # via -r requirements/test.txt -sqlparse==0.5.0 +sqlparse==0.5.1 # via # -r requirements/test.txt # django -stevedore==5.2.0 +stevedore==5.3.0 # via # -r requirements/test.txt # code-annotations @@ -363,49 +349,45 @@ tomli==2.0.1 # pyproject-api # pytest # tox -tomlkit==0.12.5 +tomlkit==0.13.2 # via # -r requirements/test.txt # pylint tox==4.15.1 # via -r requirements/ci.txt -twine==5.1.0 +twine==5.1.1 # via -r requirements/test.txt typing-extensions==4.12.2 # via # -r requirements/test.txt # asgiref # astroid - # pylint - # rich urllib3==2.2.2 # via # -r requirements/test.txt # requests # responses # twine -virtualenv==20.26.2 +virtualenv==20.26.3 # via # -r requirements/ci.txt # tox -wheel==0.43.0 +wheel==0.44.0 # via # -r requirements/pip-tools.txt # pip-tools zipp==3.17.0 # via # -c requirements/constraints.txt - # -r requirements/pip-tools.txt # -r requirements/test.txt # importlib-metadata - # importlib-resources # The following packages are considered to be unsafe in a requirements file: -pip==24.1 +pip==24.2 # via # -r requirements/pip-tools.txt # pip-tools -setuptools==70.1.1 +setuptools==74.1.2 # via # -r requirements/pip-tools.txt # pip-tools diff --git a/requirements/pip-tools.txt b/requirements/pip-tools.txt index ac0ec63..0052461 100644 --- a/requirements/pip-tools.txt +++ b/requirements/pip-tools.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.8 +# This file is autogenerated by pip-compile with Python 3.10 # by the following command: # # make upgrade @@ -8,8 +8,6 @@ build==1.2.1 # via pip-tools click==8.1.7 # via pip-tools -importlib-metadata==7.2.1 - # via build packaging==23.2 # via # -c requirements/constraints.txt @@ -24,15 +22,11 @@ tomli==2.0.1 # via # build # pip-tools -wheel==0.43.0 +wheel==0.44.0 # via pip-tools -zipp==3.17.0 - # via - # -c requirements/constraints.txt - # importlib-metadata # The following packages are considered to be unsafe in a requirements file: -pip==24.1 +pip==24.2 # via pip-tools -setuptools==70.1.1 +setuptools==74.1.2 # via pip-tools diff --git a/requirements/pip.txt b/requirements/pip.txt index c7fd078..075aa28 100644 --- a/requirements/pip.txt +++ b/requirements/pip.txt @@ -1,14 +1,14 @@ # -# This file is autogenerated by pip-compile with Python 3.8 +# This file is autogenerated by pip-compile with Python 3.10 # by the following command: # # make upgrade # -wheel==0.43.0 +wheel==0.44.0 # via -r requirements/pip.in # The following packages are considered to be unsafe in a requirements file: -pip==24.1 +pip==24.2 # via -r requirements/pip.in -setuptools==70.1.1 +setuptools==74.1.2 # via -r requirements/pip.in diff --git a/requirements/test.txt b/requirements/test.txt index 8d04bf0..e537059 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.8 +# This file is autogenerated by pip-compile with Python 3.10 # by the following command: # # make upgrade @@ -8,22 +8,17 @@ asgiref==3.8.1 # via # -r requirements/base.txt # django -astroid==3.2.2 +astroid==3.2.4 # via # pylint # pylint-celery backports-tarfile==1.2.0 # via jaraco-context -backports-zoneinfo==0.2.1 ; python_version < "3.9" - # via - # -c requirements/constraints.txt - # -r requirements/base.txt - # django -certifi==2024.6.2 +certifi==2024.8.30 # via # -r requirements/base.txt # requests -cffi==1.16.0 +cffi==1.17.1 # via # -r requirements/base.txt # cryptography @@ -43,9 +38,9 @@ click-log==0.4.0 # via edx-lint code-annotations==1.8.0 # via edx-lint -coverage[toml]==7.5.4 +coverage[toml]==7.6.1 # via pytest-cov -cryptography==42.0.8 +cryptography==43.0.1 # via secretstorage ddt==1.7.2 # via -r requirements/test.in @@ -65,35 +60,33 @@ django-waffle==4.1.0 # via # -r requirements/base.txt # edx-django-utils -docutils==0.20.1 +docutils==0.21.2 # via readme-renderer -edx-django-utils==5.14.2 +edx-django-utils==5.15.0 # via -r requirements/base.txt -edx-lint==5.3.6 +edx-lint==5.4.0 # via -r requirements/test.in -exceptiongroup==1.2.1 +exceptiongroup==1.2.2 # via pytest freezegun==1.5.1 # via -r requirements/test.in -idna==3.7 +idna==3.8 # via # -r requirements/base.txt # requests -importlib-metadata==7.2.1 +importlib-metadata==8.4.0 # via # keyring # twine -importlib-resources==6.4.0 - # via keyring iniconfig==2.0.0 # via pytest isort==5.13.2 # via pylint jaraco-classes==3.4.0 # via keyring -jaraco-context==5.3.0 +jaraco-context==6.0.1 # via keyring -jaraco-functools==4.0.1 +jaraco-functools==4.0.2 # via keyring jeepney==0.8.0 # via @@ -101,7 +94,7 @@ jeepney==0.8.0 # secretstorage jinja2==3.1.4 # via code-annotations -keyring==25.2.1 +keyring==25.3.0 # via twine markdown-it-py==3.0.0 # via rich @@ -111,25 +104,25 @@ mccabe==0.7.0 # via pylint mdurl==0.1.2 # via markdown-it-py -more-itertools==10.3.0 +more-itertools==10.5.0 # via # jaraco-classes # jaraco-functools -newrelic==9.11.0 +newrelic==9.13.0 # via # -r requirements/base.txt # edx-django-utils -nh3==0.2.17 +nh3==0.2.18 # via readme-renderer packaging==23.2 # via # -c requirements/constraints.txt # pytest -pbr==6.0.0 +pbr==6.1.0 # via # -r requirements/base.txt # stevedore -pkginfo==1.11.1 +pkginfo==1.10.0 # via twine platformdirs==4.2.2 # via pylint @@ -139,7 +132,7 @@ psutil==6.0.0 # via # -r requirements/base.txt # edx-django-utils -pycodestyle==2.12.0 +pycodestyle==2.12.1 # via -r requirements/test.in pycparser==2.22 # via @@ -149,9 +142,9 @@ pygments==2.18.0 # via # readme-renderer # rich -pyjwt==2.8.0 +pyjwt==2.9.0 # via -r requirements/base.txt -pylint==3.2.3 +pylint==3.2.7 # via # edx-lint # pylint-celery @@ -169,30 +162,29 @@ pynacl==1.5.0 # via # -r requirements/base.txt # edx-django-utils -pytest==8.2.2 +pytest==8.3.2 # via # pytest-cov # pytest-django pytest-cov==5.0.0 # via -r requirements/test.in -pytest-django==4.8.0 +pytest-django==4.9.0 # via -r requirements/test.in python-dateutil==2.9.0.post0 # via freezegun python-slugify==8.0.4 # via code-annotations -pyyaml==6.0.1 +pyyaml==6.0.2 # via # code-annotations # responses -readme-renderer==43.0 +readme-renderer==44.0 # via twine requests==2.32.3 # via # -r requirements/base.txt # requests-toolbelt # responses - # slumber # twine requests-toolbelt==1.0.0 # via twine @@ -200,7 +192,7 @@ responses==0.25.3 # via -r requirements/test.in rfc3986==2.0.0 # via twine -rich==13.7.1 +rich==13.8.0 # via twine secretstorage==3.3.3 # via keyring @@ -208,13 +200,11 @@ six==1.16.0 # via # edx-lint # python-dateutil -slumber==0.7.1 - # via -r requirements/base.txt -sqlparse==0.5.0 +sqlparse==0.5.1 # via # -r requirements/base.txt # django -stevedore==5.2.0 +stevedore==5.3.0 # via # -r requirements/base.txt # code-annotations @@ -226,17 +216,15 @@ tomli==2.0.1 # coverage # pylint # pytest -tomlkit==0.12.5 +tomlkit==0.13.2 # via pylint -twine==5.1.0 +twine==5.1.1 # via -r requirements/test.in typing-extensions==4.12.2 # via # -r requirements/base.txt # asgiref # astroid - # pylint - # rich urllib3==2.2.2 # via # -r requirements/base.txt @@ -247,4 +235,3 @@ zipp==3.17.0 # via # -c requirements/constraints.txt # importlib-metadata - # importlib-resources