diff --git a/CHANGELOG.md b/CHANGELOG.md index 25f82d4..88de9ea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file. The format is based on ## [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to ## [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [v7.3.0](https://github.com/eduNEXT/eox-tagging/compare/v7.2.0...v7.3.0) - (2024-10-01) + +### Added + +- **JWT Support**: API for `Tags` now supports JWT (JSON Web Tokens) authentication + aiming to mitigate the deprecation of Bearer and keep available the token-based authorization + ## [v7.2.0](https://github.com/eduNEXT/eox-tagging/compare/v7.1.0...v7.2.0) - (2024-08-06) ### Added diff --git a/docs/resources/eox-tagging-env.postman_environment.json b/docs/resources/eox-tagging-env.postman_environment.json new file mode 100644 index 0000000..78626f4 --- /dev/null +++ b/docs/resources/eox-tagging-env.postman_environment.json @@ -0,0 +1,75 @@ +{ + "id": "dcb570d2-743a-4d70-a131-7dae785995ab", + "name": "eox-tagging-env", + "values": [ + { + "key": "domain", + "value": "https://tenant-a.redwood.releases.edunext.link", + "type": "default", + "enabled": true + }, + { + "key": "token", + "value": "", + "type": "default", + "enabled": true + }, + { + "key": "username", + "value": "edx", + "type": "default", + "enabled": true + }, + { + "key": "email", + "value": "edx@mail.co", + "type": "default", + "enabled": true + }, + { + "key": "client_id", + "value": "", + "type": "default", + "enabled": true + }, + { + "key": "client_secret", + "value": "", + "type": "default", + "enabled": true + }, + { + "key": "course_id", + "value": "course-v1:OpenedX+DemoX+DemoCourse", + "type": "default", + "enabled": true + }, + { + "key": "course_mode", + "value": "verified", + "type": "default", + "enabled": true + }, + { + "key": "user_tag_key", + "value": "", + "type": "any", + "enabled": true + }, + { + "key": "courseenrollment_tag_key", + "value": "", + "type": "any", + "enabled": true + }, + { + "key": "courseoverview_tag_key", + "value": "", + "type": "any", + "enabled": true + } + ], + "_postman_variable_scope": "environment", + "_postman_exported_at": "2024-09-30T14:32:21.097Z", + "_postman_exported_using": "Postman/11.14.1" +} diff --git a/docs/resources/eox-tagging.postman_collection.json b/docs/resources/eox-tagging.postman_collection.json new file mode 100644 index 0000000..4887d3e --- /dev/null +++ b/docs/resources/eox-tagging.postman_collection.json @@ -0,0 +1,440 @@ +{ + "info": { + "_postman_id": "38bc871c-b234-4b57-8f26-d94ec15ac109", + "name": "eox-tagging", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", + "_exporter_id": "29599880" + }, + "item": [ + { + "name": "Authorization", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "pm.environment.set(\"token\", jsonData.access_token);" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "client_id", + "value": "{{client_id}}", + "type": "text" + }, + { + "key": "client_secret", + "value": "{{client_secret}}", + "type": "text" + }, + { + "key": "grant_type", + "value": "client_credentials", + "type": "text" + }, + { + "key": "token_type", + "value": "JWT", + "type": "text" + } + ] + }, + "url": { + "raw": "{{domain}}/oauth2/access_token/", + "host": [ + "{{domain}}" + ], + "path": [ + "oauth2", + "access_token", + "" + ] + } + }, + "response": [] + }, + { + "name": "1. Create User", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "" + ], + "type": "text/javascript" + } + } + ], + "request": { + "auth": { + "type": "noauth" + }, + "method": "POST", + "header": [ + { + "key": "Authorization", + "value": "JWT {{token}}", + "type": "text" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"username\": \"{{username}}\",\n \"email\": \"{{email}}\",\n \"password\": \"p@ssword\",\n \"fullname\": \"Edunext test\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{domain}}/eox-core/api/v1/user/", + "host": [ + "{{domain}}" + ], + "path": [ + "eox-core", + "api", + "v1", + "user", + "" + ] + } + }, + "response": [] + }, + { + "name": "2. Enroll User", + "request": { + "auth": { + "type": "noauth" + }, + "method": "POST", + "header": [ + { + "key": "Authorization", + "value": "JWT {{token}}", + "type": "text" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"username\": \"{{username}}\",\n \"is_active\": true,\n \"mode\": \"{{course_mode}}\",\n \"enrollment_attributes\": [],\n \"course_id\": \"{{course_id}}\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{domain}}/eox-core/api/v1/enrollment/", + "host": [ + "{{domain}}" + ], + "path": [ + "eox-core", + "api", + "v1", + "enrollment", + "" + ] + } + }, + "response": [] + }, + { + "name": "3. Tags - User", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "pm.environment.set(\"user_tag_key\", jsonData.key);" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "method": "POST", + "header": [ + { + "key": "Authorization", + "value": "JWT {{token}}", + "type": "text" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"tag_value\": \"free\",\n \"tag_type\": \"subscription_level\",\n \"access\": \"public\",\n \"activation_date\": \"2021-05-10T20:50:04.934Z\",\n \"expiration_date\": \"2025-05-10T20:50:04.934Z\",\n \"target_type\": \"user\",\n \"target_id\": \"{{username}}\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{domain}}/eox-tagging/api/v1/tags/", + "host": [ + "{{domain}}" + ], + "path": [ + "eox-tagging", + "api", + "v1", + "tags", + "" + ] + } + }, + "response": [] + }, + { + "name": "4. Tags - Course Enrollment", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "pm.environment.set(\"courseenrollment_tag_key\", jsonData.key);" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "method": "POST", + "header": [ + { + "key": "Authorization", + "value": "JWT {{token}}", + "type": "text" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"tag_value\": \"premium\",\n \"tag_type\": \"subscription_level_enrollment\",\n \"access\": \"public\",\n \"activation_date\": \"2021-05-10T20:50:04.934Z\",\n \"expiration_date\": \"2025-05-10T20:50:04.934Z\",\n \"target_type\": \"courseenrollment\",\n \"target_id\": \"{{username}}:{{course_id}}\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{domain}}/eox-tagging/api/v1/tags/", + "host": [ + "{{domain}}" + ], + "path": [ + "eox-tagging", + "api", + "v1", + "tags", + "" + ] + } + }, + "response": [] + }, + { + "name": "5. Tags - Course Overview", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "var jsonData = JSON.parse(responseBody);", + "pm.environment.set(\"courseoverview_tag_key\", jsonData.key);" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "method": "POST", + "header": [ + { + "key": "Authorization", + "value": "JWT {{token}}", + "type": "text" + } + ], + "body": { + "mode": "raw", + "raw": "{\n \"tag_value\": \"premium\",\n \"tag_type\": \"subscription_level_course\",\n \"access\": \"public\",\n \"activation_date\": \"2021-05-10T20:50:04.934Z\",\n \"expiration_date\": \"2025-05-10T20:50:04.934Z\",\n \"target_type\": \"courseoverview\",\n \"target_id\": \"{{course_id}}\"\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "{{domain}}/eox-tagging/api/v1/tags/", + "host": [ + "{{domain}}" + ], + "path": [ + "eox-tagging", + "api", + "v1", + "tags", + "" + ] + } + }, + "response": [] + }, + { + "name": "6. Tags", + "event": [ + { + "listen": "test", + "script": { + "exec": [ + "" + ], + "type": "text/javascript", + "packages": {} + } + } + ], + "request": { + "method": "GET", + "header": [ + { + "key": "Authorization", + "value": "JWT {{token}}", + "type": "text" + } + ], + "url": { + "raw": "{{domain}}/eox-tagging/api/v1/tags/", + "host": [ + "{{domain}}" + ], + "path": [ + "eox-tagging", + "api", + "v1", + "tags", + "" + ], + "query": [ + { + "key": "key", + "value": "{{user_tag_key}}", + "disabled": true + }, + { + "key": "key", + "value": "{{courseenrollment_tag_key}}", + "disabled": true + }, + { + "key": "key", + "value": "{{courseoverview_tag_key}}", + "disabled": true + } + ] + } + }, + "response": [] + }, + { + "name": "7. Tags - User", + "request": { + "method": "DELETE", + "header": [ + { + "key": "Authorization", + "value": "JWT {{token}}", + "type": "text" + } + ], + "url": { + "raw": "{{domain}}/eox-tagging/api/v1/tags/{{user_tag_key}}/", + "host": [ + "{{domain}}" + ], + "path": [ + "eox-tagging", + "api", + "v1", + "tags", + "{{user_tag_key}}" + ] + } + }, + "response": [] + }, + { + "name": "8. Tags - Course Enrollment", + "request": { + "method": "DELETE", + "header": [ + { + "key": "Authorization", + "value": "JWT {{token}}", + "type": "text" + } + ], + "url": { + "raw": "{{domain}}/eox-tagging/api/v1/tags/{{courseenrollment_tag_key}}/", + "host": [ + "{{domain}}" + ], + "path": [ + "eox-tagging", + "api", + "v1", + "tags", + "{{courseenrollment_tag_key}}" + ] + } + }, + "response": [] + }, + { + "name": "9. Tags - Course Overview", + "request": { + "method": "DELETE", + "header": [ + { + "key": "Authorization", + "value": "JWT {{token}}", + "type": "text" + } + ], + "url": { + "raw": "{{domain}}/eox-tagging/api/v1/tags/{{courseoverview_tag_key}}/", + "host": [ + "{{domain}}" + ], + "path": [ + "eox-tagging", + "api", + "v1", + "tags", + "{{courseoverview_tag_key}}" + ] + } + }, + "response": [] + } + ] +} diff --git a/eox_tagging/__init__.py b/eox_tagging/__init__.py index 60d38e1..fc69d25 100644 --- a/eox_tagging/__init__.py +++ b/eox_tagging/__init__.py @@ -4,4 +4,4 @@ from __future__ import unicode_literals -__version__ = '7.2.0' +__version__ = '7.3.0' diff --git a/eox_tagging/api/v1/viewset.py b/eox_tagging/api/v1/viewset.py index 2cf1a19..1e930d9 100644 --- a/eox_tagging/api/v1/viewset.py +++ b/eox_tagging/api/v1/viewset.py @@ -2,6 +2,7 @@ Viewset for Tags. """ from edx_api_doc_tools import query_parameter, schema_for +from edx_rest_framework_extensions.auth.jwt.authentication import JwtAuthentication from rest_framework import status, viewsets from rest_framework.authentication import SessionAuthentication @@ -207,7 +208,7 @@ class TagViewSet(viewsets.ModelViewSet): """Viewset for listing and creating Tags.""" serializer_class = TagSerializer - authentication_classes = (BearerAuthentication, SessionAuthentication) + authentication_classes = [BearerAuthentication, SessionAuthentication, JwtAuthentication,] permission_classes = (EoxTaggingAPIPermission,) pagination_class = TagApiPagination filter_backends = (FilterBackend,) diff --git a/requirements/base.in b/requirements/base.in index bdc6e8f..1e7fb53 100644 --- a/requirements/base.in +++ b/requirements/base.in @@ -2,3 +2,4 @@ -c constraints.txt eox-core +edx-drf-extensions diff --git a/requirements/base.txt b/requirements/base.txt index 6ca417f..1221f66 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.10 # by the following command: # # make upgrade @@ -10,17 +10,17 @@ appdirs==1.4.4 # via fs asgiref==3.8.1 # via django -attrs==23.2.0 +attrs==24.2.0 # via openedx-events -billiard==4.2.0 +billiard==4.2.1 # via celery celery==5.4.0 # via # eox-core # event-tracking -certifi==2024.7.4 +certifi==2024.8.30 # via requests -cffi==1.16.0 +cffi==1.17.1 # via # cryptography # pynacl @@ -43,7 +43,7 @@ click-repl==0.3.0 # via celery code-annotations==1.8.0 # via edx-toggles -cryptography==43.0.0 +cryptography==43.0.1 # via # jwcrypto # pyjwt @@ -52,14 +52,13 @@ defusedxml==0.8.0rc2 # via # python3-openid # social-auth-core -django==4.2.14 +django==4.2.16 # via - # -c requirements/constraints.txt + # -c https://raw.githubusercontent.com/openedx/edx-lint/master/edx_lint/files/common_constraints.txt # django-crum # django-filter # django-model-utils # django-oauth-toolkit - # django-simple-history # django-waffle # djangorestframework # drf-jwt @@ -80,19 +79,25 @@ django-crum==0.7.9 # edx-proctoring # edx-toggles django-filter==23.5 - # via eox-core + # via + # -c requirements/constraints.txt + # eox-core django-ipware==7.0.1 # via edx-proctoring -django-model-utils==4.5.1 +django-model-utils==5.0.0 # via # edx-proctoring # edx-when django-oauth-toolkit==2.4.0 - # via eox-core + # via + # -c requirements/constraints.txt + # eox-core django-oauth2-provider==0.2.6.1 # via eox-core django-simple-history==3.0.0 - # via edx-proctoring + # via + # -c https://raw.githubusercontent.com/openedx/edx-lint/master/edx_lint/files/common_constraints.txt + # edx-proctoring django-waffle==4.1.0 # via # edx-django-utils @@ -100,27 +105,26 @@ django-waffle==4.1.0 # edx-proctoring # edx-toggles # eox-core -django-webpack-loader==3.1.0 +django-webpack-loader==3.1.1 # via edx-proctoring djangorestframework==3.15.1 # via + # -c requirements/constraints.txt # drf-jwt # drf-yasg # edx-api-doc-tools # edx-drf-extensions # edx-proctoring # eox-core -dnspython==2.6.1 - # via pymongo drf-jwt==1.19.2 # via edx-drf-extensions drf-yasg==1.21.7 # via edx-api-doc-tools -edx-api-doc-tools==1.8.0 +edx-api-doc-tools==2.0.0 # via eox-core edx-ccx-keys==1.3.0 # via openedx-events -edx-django-utils==5.14.2 +edx-django-utils==5.15.0 # via # edx-drf-extensions # edx-rest-api-client @@ -128,37 +132,39 @@ edx-django-utils==5.14.2 # edx-when # event-tracking # openedx-events -edx-drf-extensions==10.3.0 +edx-drf-extensions==10.4.0 # via + # -r requirements/base.in # edx-proctoring # edx-when # eox-core -edx-opaque-keys[django]==2.10.0 +edx-opaque-keys[django]==2.11.0 # via # edx-ccx-keys # edx-drf-extensions - # edx-opaque-keys # edx-proctoring # edx-when # eox-core # openedx-events edx-proctoring==4.18.1 # via eox-core -edx-rest-api-client==5.7.1 +edx-rest-api-client==6.0.0 # via edx-proctoring edx-toggles==5.2.0 # via event-tracking edx-when==2.5.0 # via edx-proctoring -eox-core==10.5.1 +eox-core==10.6.0 # via -r requirements/base.in event-tracking==2.4.0 - # via edx-proctoring -fastavro==1.9.5 + # via + # -c https://raw.githubusercontent.com/openedx/edx-lint/master/edx_lint/files/common_constraints.txt + # edx-proctoring +fastavro==1.9.7 # via openedx-events fs==2.4.16 # via xblock -idna==3.7 +idna==3.10 # via requests inflection==0.5.1 # via drf-yasg @@ -168,9 +174,9 @@ jsonfield==3.1.0 # via edx-proctoring jwcrypto==1.5.6 # via django-oauth-toolkit -kombu==5.3.7 +kombu==5.4.2 # via celery -lxml==5.2.2 +lxml==5.3.0 # via xblock mako==1.3.5 # via xblock @@ -179,22 +185,22 @@ markupsafe==2.1.5 # jinja2 # mako # xblock -newrelic==9.12.0 +newrelic==9.13.0 # via edx-django-utils oauthlib==3.2.2 # via # django-oauth-toolkit # requests-oauthlib # social-auth-core -openedx-events==9.11.0 +openedx-events==9.14.1 # via # eox-core # event-tracking packaging==24.1 # via drf-yasg -pbr==6.0.0 +pbr==6.1.0 # via stevedore -prompt-toolkit==3.0.47 +prompt-toolkit==3.0.48 # via click-repl psutil==6.0.0 # via edx-django-utils @@ -202,13 +208,12 @@ pycparser==2.22 # via cffi pycryptodomex==3.20.0 # via edx-proctoring -pyjwt[crypto]==2.8.0 +pyjwt[crypto]==2.9.0 # via # drf-jwt # edx-drf-extensions # edx-proctoring # edx-rest-api-client - # pyjwt # social-auth-core pymongo==3.13.0 # via @@ -227,14 +232,14 @@ python-slugify==8.0.4 # via code-annotations python3-openid==3.2.0 # via social-auth-core -pytz==2024.1 +pytz==2024.2 # via # django-oauth-toolkit # drf-yasg # edx-proctoring # event-tracking # xblock -pyyaml==6.0.1 +pyyaml==6.0.2 # via # code-annotations # drf-yasg @@ -245,17 +250,16 @@ requests==2.32.3 # edx-drf-extensions # edx-rest-api-client # requests-oauthlib - # slumber # social-auth-core requests-oauthlib==2.0.0 # via social-auth-core -rules==3.4 +rules==3.5 # via edx-proctoring semantic-version==2.10.0 # via edx-drf-extensions shortuuid==1.0.13 # via django-oauth2-provider -simplejson==3.19.2 +simplejson==3.19.3 # via xblock six==1.16.0 # via @@ -264,13 +268,11 @@ six==1.16.0 # event-tracking # fs # python-dateutil -slumber==0.7.1 - # via edx-rest-api-client social-auth-core==4.5.4 # via eox-core sqlparse==0.5.1 # via django -stevedore==5.2.0 +stevedore==5.3.0 # via # code-annotations # edx-django-utils @@ -279,13 +281,16 @@ text-unidecode==1.3 # via python-slugify typing-extensions==4.12.2 # via + # asgiref # edx-opaque-keys # jwcrypto -tzdata==2024.1 - # via celery +tzdata==2024.2 + # via + # celery + # kombu uritemplate==4.1.1 # via drf-yasg -urllib3==2.2.2 +urllib3==2.2.3 # via requests vine==5.1.0 # via @@ -296,9 +301,9 @@ wcwidth==0.2.13 # via prompt-toolkit web-fragments==2.2.0 # via xblock -webob==1.8.7 +webob==1.8.8 # via xblock -xblock==5.0.0 +xblock==5.1.0 # via edx-when # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/constraints.txt b/requirements/constraints.txt index f9630fa..a01f177 100644 --- a/requirements/constraints.txt +++ b/requirements/constraints.txt @@ -18,4 +18,7 @@ django-filter<24.1 # Adding pin to avoid any major upgrade. # 3.15.1 is the latest version that works with Django 3.2 -djangorestframework<3.15.2 \ No newline at end of file +djangorestframework<3.15.2 + +# Latest version compatible with Django 3.2 +django-oauth-toolkit==2.4.0 \ No newline at end of file diff --git a/requirements/django42.txt b/requirements/django42.txt index 1facfe2..64aaf99 100644 --- a/requirements/django42.txt +++ b/requirements/django42.txt @@ -1 +1 @@ -django==4.2.10 +django==4.2.16 diff --git a/requirements/docs.txt b/requirements/docs.txt index ca7b2a4..f67879c 100644 --- a/requirements/docs.txt +++ b/requirements/docs.txt @@ -1,20 +1,20 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.10 # by the following command: # # make upgrade # alabaster==1.0.0 # via sphinx -babel==2.15.0 +babel==2.16.0 # via sphinx -certifi==2024.7.4 +certifi==2024.8.30 # via requests charset-normalizer==3.3.2 # via requests docutils==0.21.2 # via sphinx -idna==3.7 +idna==3.10 # via requests imagesize==1.4.1 # via sphinx @@ -30,7 +30,7 @@ requests==2.32.3 # via sphinx snowballstemmer==2.2.0 # via sphinx -sphinx==8.0.0 +sphinx==8.0.2 # via -r requirements/docs.in sphinxcontrib-applehelp==2.0.0 # via sphinx @@ -44,5 +44,7 @@ sphinxcontrib-qthelp==2.0.0 # via sphinx sphinxcontrib-serializinghtml==2.0.0 # via sphinx -urllib3==2.2.2 +tomli==2.0.1 + # via sphinx +urllib3==2.2.3 # via requests diff --git a/requirements/pip-tools.txt b/requirements/pip-tools.txt index b544e9f..99531e3 100644 --- a/requirements/pip-tools.txt +++ b/requirements/pip-tools.txt @@ -1,10 +1,10 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.10 # by the following command: # # make upgrade # -build==1.2.1 +build==1.2.2 # via pip-tools click==8.1.7 # via pip-tools @@ -16,7 +16,11 @@ pyproject-hooks==1.1.0 # via # build # pip-tools -wheel==0.43.0 +tomli==2.0.1 + # via + # build + # pip-tools +wheel==0.44.0 # via pip-tools # The following packages are considered to be unsafe in a requirements file: diff --git a/requirements/test.txt b/requirements/test.txt index d387893..66ad3dd 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.10 # by the following command: # # make upgrade @@ -18,11 +18,11 @@ asgiref==3.8.1 # django astroid==2.13.5 # via pylint -attrs==23.2.0 +attrs==24.2.0 # via # -r requirements/base.txt # openedx-events -billiard==4.2.0 +billiard==4.2.1 # via # -r requirements/base.txt # celery @@ -31,11 +31,11 @@ celery==5.4.0 # -r requirements/base.txt # eox-core # event-tracking -certifi==2024.7.4 +certifi==2024.8.30 # via # -r requirements/base.txt # requests -cffi==1.16.0 +cffi==1.17.1 # via # -r requirements/base.txt # cryptography @@ -70,9 +70,9 @@ code-annotations==1.8.0 # via # -r requirements/base.txt # edx-toggles -coverage==7.6.0 +coverage==7.6.1 # via -r requirements/test.in -cryptography==43.0.0 +cryptography==43.0.1 # via # -r requirements/base.txt # jwcrypto @@ -86,14 +86,13 @@ defusedxml==0.8.0rc2 dill==0.3.8 # via pylint # via - # -c requirements/constraints.txt + # -c https://raw.githubusercontent.com/openedx/edx-lint/master/edx_lint/files/common_constraints.txt # -r requirements/base.txt # -r requirements/test.in # django-crum # django-filter # django-model-utils # django-oauth-toolkit - # django-simple-history # django-waffle # djangorestframework # drf-jwt @@ -119,6 +118,7 @@ django-fake-model==0.1.4 # via -r requirements/test.in django-filter==23.5 # via + # -c requirements/constraints.txt # -r requirements/base.txt # -r requirements/test.in # eox-core @@ -126,13 +126,14 @@ django-ipware==7.0.1 # via # -r requirements/base.txt # edx-proctoring -django-model-utils==4.5.1 +django-model-utils==5.0.0 # via # -r requirements/base.txt # edx-proctoring # edx-when django-oauth-toolkit==2.4.0 # via + # -c requirements/constraints.txt # -r requirements/base.txt # eox-core django-oauth2-provider==0.2.6.1 @@ -143,6 +144,7 @@ django-oauth2-provider==0.2.6.1 django-simple-history==3.0.0 # via # -c https://raw.githubusercontent.com/openedx/edx-lint/master/edx_lint/files/common_constraints.txt + # -r requirements/base.txt # edx-proctoring django-waffle==4.1.0 # via @@ -152,12 +154,13 @@ django-waffle==4.1.0 # edx-proctoring # edx-toggles # eox-core -django-webpack-loader==3.1.0 +django-webpack-loader==3.1.1 # via # -r requirements/base.txt # edx-proctoring djangorestframework==3.15.1 # via + # -c requirements/constraints.txt # -r requirements/base.txt # drf-jwt # drf-yasg @@ -167,10 +170,6 @@ djangorestframework==3.15.1 # eox-core djangorestframework-oauth==1.1.0 # via -r requirements/test.in -dnspython==2.6.1 - # via - # -r requirements/base.txt - # pymongo drf-jwt==1.19.2 # via # -r requirements/base.txt @@ -179,7 +178,7 @@ drf-yasg==1.21.7 # via # -r requirements/base.txt # edx-api-doc-tools -edx-api-doc-tools==1.8.0 +edx-api-doc-tools==2.0.0 # via # -r requirements/base.txt # eox-core @@ -187,7 +186,7 @@ edx-ccx-keys==1.3.0 # via # -r requirements/base.txt # openedx-events -edx-django-utils==5.14.2 +edx-django-utils==5.15.0 # via # -r requirements/base.txt # edx-drf-extensions @@ -196,19 +195,18 @@ edx-django-utils==5.14.2 # edx-when # event-tracking # openedx-events -edx-drf-extensions==10.3.0 +edx-drf-extensions==10.4.0 # via # -r requirements/base.txt # edx-proctoring # edx-when # eox-core -edx-opaque-keys[django]==2.10.0 +edx-opaque-keys[django]==2.11.0 # via # -r requirements/base.txt # -r requirements/test.in # edx-ccx-keys # edx-drf-extensions - # edx-opaque-keys # edx-proctoring # edx-when # eox-core @@ -217,7 +215,7 @@ edx-proctoring==4.18.1 # via # -r requirements/base.txt # eox-core -edx-rest-api-client==5.7.1 +edx-rest-api-client==6.0.0 # via # -r requirements/base.txt # edx-proctoring @@ -229,13 +227,14 @@ edx-when==2.5.0 # via # -r requirements/base.txt # edx-proctoring -eox-core==10.5.1 +eox-core==10.6.0 # via -r requirements/base.txt event-tracking==2.4.0 # via + # -c https://raw.githubusercontent.com/openedx/edx-lint/master/edx_lint/files/common_constraints.txt # -r requirements/base.txt # edx-proctoring -fastavro==1.9.5 +fastavro==1.9.7 # via # -r requirements/base.txt # openedx-events @@ -243,7 +242,7 @@ fs==2.4.16 # via # -r requirements/base.txt # xblock -idna==3.7 +idna==3.10 # via # -r requirements/base.txt # requests @@ -265,13 +264,13 @@ jwcrypto==1.5.6 # via # -r requirements/base.txt # django-oauth-toolkit -kombu==5.3.7 +kombu==5.4.2 # via # -r requirements/base.txt # celery lazy-object-proxy==1.10.0 # via astroid -lxml==5.2.2 +lxml==5.3.0 # via # -r requirements/base.txt # xblock @@ -289,7 +288,7 @@ mccabe==0.7.0 # via pylint mock==5.1.0 # via -r requirements/test.in -newrelic==9.12.0 +newrelic==9.13.0 # via # -r requirements/base.txt # edx-django-utils @@ -299,7 +298,7 @@ oauthlib==3.2.2 # django-oauth-toolkit # requests-oauthlib # social-auth-core -openedx-events==9.11.0 +openedx-events==9.14.1 # via # -r requirements/base.txt # eox-core @@ -308,13 +307,13 @@ packaging==24.1 # via # -r requirements/base.txt # drf-yasg -pbr==6.0.0 +pbr==6.1.0 # via # -r requirements/base.txt # stevedore -platformdirs==4.2.2 +platformdirs==4.3.6 # via pylint -prompt-toolkit==3.0.47 +prompt-toolkit==3.0.48 # via # -r requirements/base.txt # click-repl @@ -322,7 +321,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 @@ -332,14 +331,13 @@ pycryptodomex==3.20.0 # via # -r requirements/base.txt # edx-proctoring -pyjwt[crypto]==2.8.0 +pyjwt[crypto]==2.9.0 # via # -r requirements/base.txt # drf-jwt # edx-drf-extensions # edx-proctoring # edx-rest-api-client - # pyjwt # social-auth-core pylint==2.15.10 # via -r requirements/test.in @@ -370,7 +368,7 @@ python3-openid==3.2.0 # via # -r requirements/base.txt # social-auth-core -pytz==2024.1 +pytz==2024.2 # via # -r requirements/base.txt # django-oauth-toolkit @@ -378,7 +376,7 @@ pytz==2024.1 # edx-proctoring # event-tracking # xblock -pyyaml==6.0.1 +pyyaml==6.0.2 # via # -r requirements/base.txt # -r requirements/test.in @@ -392,13 +390,12 @@ requests==2.32.3 # edx-drf-extensions # edx-rest-api-client # requests-oauthlib - # slumber # social-auth-core requests-oauthlib==2.0.0 # via # -r requirements/base.txt # social-auth-core -rules==3.4 +rules==3.5 # via # -r requirements/base.txt # edx-proctoring @@ -410,7 +407,7 @@ shortuuid==1.0.13 # via # -r requirements/base.txt # django-oauth2-provider -simplejson==3.19.2 +simplejson==3.19.3 # via # -r requirements/base.txt # xblock @@ -422,10 +419,6 @@ six==1.16.0 # event-tracking # fs # python-dateutil -slumber==0.7.1 - # via - # -r requirements/base.txt - # edx-rest-api-client social-auth-core==4.5.4 # via # -r requirements/base.txt @@ -434,7 +427,7 @@ 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 @@ -444,22 +437,27 @@ text-unidecode==1.3 # via # -r requirements/base.txt # python-slugify -tomlkit==0.13.0 +tomli==2.0.1 + # via pylint +tomlkit==0.13.2 # via pylint typing-extensions==4.12.2 # via # -r requirements/base.txt + # asgiref + # astroid # edx-opaque-keys # jwcrypto -tzdata==2024.1 +tzdata==2024.2 # via # -r requirements/base.txt # celery + # kombu uritemplate==4.1.1 # via # -r requirements/base.txt # drf-yasg -urllib3==2.2.2 +urllib3==2.2.3 # via # -r requirements/base.txt # requests @@ -477,13 +475,13 @@ web-fragments==2.2.0 # via # -r requirements/base.txt # xblock -webob==1.8.7 +webob==1.8.8 # via # -r requirements/base.txt # xblock wrapt==1.16.0 # via astroid -xblock==5.0.0 +xblock==5.1.0 # via # -r requirements/base.txt # edx-when diff --git a/requirements/tox.txt b/requirements/tox.txt index e8cfb9e..1657932 100644 --- a/requirements/tox.txt +++ b/requirements/tox.txt @@ -1,10 +1,10 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.10 # by the following command: # # make upgrade # -cachetools==5.4.0 +cachetools==5.5.0 # via tox chardet==5.2.0 # via tox @@ -12,7 +12,7 @@ colorama==0.4.6 # via tox distlib==0.3.8 # via virtualenv -filelock==3.15.4 +filelock==3.16.1 # via # tox # virtualenv @@ -20,15 +20,19 @@ packaging==24.1 # via # pyproject-api # tox -platformdirs==4.2.2 +platformdirs==4.3.6 # via # tox # virtualenv pluggy==1.5.0 # via tox -pyproject-api==1.7.1 +pyproject-api==1.8.0 # via tox -tox==4.16.0 +tomli==2.0.1 + # via + # pyproject-api + # tox +tox==4.20.0 # via -r requirements/tox.in -virtualenv==20.26.3 +virtualenv==20.26.5 # via tox diff --git a/setup.cfg b/setup.cfg index 5975420..cb88d5a 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 7.2.0 +current_version = 7.3.0 commit = False tag = False