diff --git a/.github/workflows/bump_version.yml b/.github/workflows/bump_version.yml
index 1d1d62cce..6ba170943 100644
--- a/.github/workflows/bump_version.yml
+++ b/.github/workflows/bump_version.yml
@@ -11,7 +11,7 @@ jobs:
       previous_tag: ${{ steps.tag_version.outputs.previous_tag }}
       bump_commit_sha: ${{ steps.bumpversion.outputs.commit_hash }}
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
         with:
           token: ${{ secrets.PAT }}
       - name: Get next version
@@ -23,7 +23,7 @@ jobs:
           default_prerelease_bump: false
           dry_run: true
       - name: Set up Python 3.8
-        uses: actions/setup-python@v4
+        uses: actions/setup-python@v5
         with:
           python-version: "3.8"
       - name: Create bumpversion
@@ -53,7 +53,7 @@ jobs:
       tag: ${{ steps.tag_version.outputs.new_tag }}
       changelog: ${{ steps.tag_version.outputs.changelog }}
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
         with:
           token: ${{ secrets.PAT }}
       - name: Create tag
diff --git a/.github/workflows/commitlint.yml b/.github/workflows/commitlint.yml
index af8a615ec..ff9fc5905 100644
--- a/.github/workflows/commitlint.yml
+++ b/.github/workflows/commitlint.yml
@@ -5,7 +5,7 @@ jobs:
   commitlint:
     runs-on: ubuntu-latest
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
         with:
           fetch-depth: 0
       - uses: wagoid/commitlint-github-action@v5
diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml
index c15d6ab5e..b6b4fef1b 100644
--- a/.github/workflows/labeler.yml
+++ b/.github/workflows/labeler.yml
@@ -10,7 +10,7 @@ jobs:
     runs-on: ubuntu-latest
     name: Label the PR size
     steps:
-      - uses: CodelyTV/pr-size-labeler@v1
+      - uses: codelytv/pr-size-labeler@v1.7.0
         with:
           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
           xs_max_size: '10'
diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml
index 835bd2830..a9b7d6e77 100644
--- a/.github/workflows/python-publish.yml
+++ b/.github/workflows/python-publish.yml
@@ -23,7 +23,7 @@ jobs:
     steps:
     - uses: actions/checkout@v4
     - name: Set up Python
-      uses: actions/setup-python@v4
+      uses: actions/setup-python@v5
       with:
         python-version: '3.10'
     - name: Install dependencies
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index b64222596..d33565cf4 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -11,8 +11,8 @@ jobs:
     strategy:
       max-parallel: 2
       matrix:
-        python-version: ["3.8"]
-        django: ["32"]
+        python-version: ["3.8", "3.10", "3.11"]
+        django: ["32", "42"]
     steps:
       - name: Checkout
         uses: actions/checkout@v4
@@ -25,7 +25,7 @@ jobs:
           restore-keys: |
             ${{ runner.os }}-pip-
       - name: Set up Python ${{ matrix.python-version }}
-        uses: actions/setup-python@v4
+        uses: actions/setup-python@v5
         with:
           python-version: ${{ matrix.python-version }}
 
diff --git a/Makefile b/Makefile
index bb903b9c5..13b9768c3 100644
--- a/Makefile
+++ b/Makefile
@@ -25,6 +25,7 @@ bumpversion: ## Tag the current version using semantinc versioning and git tags
 
 install-dev-dependencies: ## install tox
 	pip install -r requirements/tox.txt
+	pip install -r requirements/test.txt
 
 clean: ## Remove generated byte code, coverage reports, and build artifacts
 	find . -name '__pycache__' -exec rm -rf {} +
diff --git a/README.rst b/README.rst
index 1a0312622..231fdb00e 100644
--- a/README.rst
+++ b/README.rst
@@ -52,6 +52,8 @@ Compatibility Notes
 +------------------+--------------+
 | Palm             | >= 9.0       |
 +------------------+--------------+
+| Quince           | >= 10.0       |
++------------------+--------------+
 
 **NOTE**: The Maple version does not support Django 2.2 but it does support Django 3.2 as of eox-core 7.0.
 
@@ -82,7 +84,7 @@ not listed, then the accumulation of changes from previous releases is enough.
    EOX_CORE_PRE_ENROLLMENT_BACKEND: "eox_core.edxapp_wrapper.backends.pre_enrollment_l_v1"
    EOX_CORE_ENROLLMENT_BACKEND: "eox_core.edxapp_wrapper.backends.enrollment_l_v1"
 
-**Olive**
+**Olive, Palm and Quince**
 
 .. code-block:: yaml
 
diff --git a/eox_core/tests/test_middleware.py b/eox_core/tests/test_middleware.py
index bfa809609..eb4666baf 100644
--- a/eox_core/tests/test_middleware.py
+++ b/eox_core/tests/test_middleware.py
@@ -18,7 +18,7 @@ class PathRedirectionMiddlewareTest(TestCase):
     def setUp(self):
         """ setup """
         self.request_factory = RequestFactory()
-        self.middleware_instance = PathRedirectionMiddleware()
+        self.middleware_instance = PathRedirectionMiddleware(get_response=lambda req: None)
 
     @mock.patch('eox_core.middleware.PathRedirectionMiddleware.process_mktg_redirect')
     @mock.patch('eox_core.middleware.PathRedirectionMiddleware.process_custom_path_redirect')
@@ -132,7 +132,7 @@ class RedirectionMiddlewareTest(TestCase):
     def setUp(self):
         """ setup """
         self.request_factory = RequestFactory()
-        self.middleware_instance = RedirectionsMiddleware()
+        self.middleware_instance = RedirectionsMiddleware(get_response=lambda req: None)
 
     def test_disabled_feature(self):
         """
diff --git a/requirements/base.txt b/requirements/base.txt
index 0718b83f4..399599df8 100644
--- a/requirements/base.txt
+++ b/requirements/base.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
@@ -10,17 +10,12 @@ appdirs==1.4.4
     # via fs
 asgiref==3.7.2
     # via django
-attrs==23.1.0
+attrs==23.2.0
     # via openedx-events
-backports-zoneinfo[tzdata]==0.2.1
-    # via
-    #   celery
-    #   kombu
 billiard==4.2.0
     # via celery
 celery==5.3.6
     # via
-    #   -c requirements/constraints.txt
     #   -r requirements/base.in
     #   event-tracking
 certifi==2023.11.17
@@ -46,15 +41,18 @@ click-plugins==1.1.1
     # via celery
 click-repl==0.3.0
     # via celery
-cryptography==41.0.5
+cryptography==42.0.1
     # via
+    #   jwcrypto
     #   pyjwt
     #   social-auth-core
 defusedxml==0.8.0rc2
     # via
     #   python3-openid
     #   social-auth-core
-django==3.2.23
+deprecated==1.2.14
+    # via jwcrypto
+django==4.2.9
     # via
     #   -c requirements/constraints.txt
     #   -r requirements/base.in
@@ -62,6 +60,7 @@ django==3.2.23
     #   django-filter
     #   django-model-utils
     #   django-oauth-toolkit
+    #   django-waffle
     #   djangorestframework
     #   drf-jwt
     #   drf-yasg
@@ -77,18 +76,15 @@ django-crum==0.7.9
     # via
     #   edx-django-utils
     #   edx-proctoring
-django-filter==23.4
-    # via
-    #   -c requirements/constraints.txt
-    #   -r requirements/base.in
-django-ipware==6.0.0
+django-filter==23.5
+    # via -r requirements/base.in
+django-ipware==6.0.3
     # via edx-proctoring
 django-model-utils==4.3.1
     # via
-    #   -c requirements/constraints.txt
     #   edx-proctoring
     #   edx-when
-django-oauth-toolkit==1.3.2
+django-oauth-toolkit==1.7.1
     # via
     #   -c requirements/constraints.txt
     #   -r requirements/base.in
@@ -96,18 +92,16 @@ django-oauth2-provider==0.2.6.1
     # via -r requirements/base.in
 django-simple-history==3.4.0
     # via edx-proctoring
-django-waffle==3.0.0
+django-waffle==4.1.0
     # via
-    #   -c requirements/constraints.txt
     #   -r requirements/base.in
     #   edx-django-utils
     #   edx-drf-extensions
     #   edx-proctoring
-django-webpack-loader==2.0.1
+django-webpack-loader==3.0.1
     # via edx-proctoring
-djangorestframework==3.12.4
+djangorestframework==3.14.0
     # via
-    #   -c requirements/constraints.txt
     #   -r requirements/base.in
     #   drf-jwt
     #   drf-yasg
@@ -118,13 +112,10 @@ drf-jwt==1.19.2
     # via edx-drf-extensions
 drf-yasg==1.21.7
     # via edx-api-doc-tools
-edx-api-doc-tools==1.6.0
-    # via
-    #   -c requirements/constraints.txt
-    #   -r requirements/base.in
-edx-django-utils==5.8.0
+edx-api-doc-tools==1.7.0
+    # via -r requirements/base.in
+edx-django-utils==5.10.1
     # via
-    #   -c requirements/constraints.txt
     #   edx-drf-extensions
     #   edx-rest-api-client
     #   edx-when
@@ -137,7 +128,6 @@ edx-drf-extensions==8.13.1
     #   edx-when
 edx-opaque-keys[django]==2.5.1
     # via
-    #   -c requirements/constraints.txt
     #   -r requirements/base.in
     #   edx-drf-extensions
     #   edx-opaque-keys
@@ -145,59 +135,55 @@ edx-opaque-keys[django]==2.5.1
     #   edx-when
     #   openedx-events
 edx-proctoring==4.16.1
-    # via
-    #   -c requirements/constraints.txt
-    #   -r requirements/base.in
+    # via -r requirements/base.in
 edx-rest-api-client==5.6.1
     # via edx-proctoring
-edx-when==2.3.0
-    # via
-    #   -c requirements/constraints.txt
-    #   edx-proctoring
+edx-when==2.4.0
+    # via edx-proctoring
 event-tracking==2.2.0
     # via edx-proctoring
-fastavro==1.9.0
+fastavro==1.9.3
     # via openedx-events
 fs==2.4.16
     # via xblock
-idna==3.4
+idna==3.6
     # via requests
 inflection==0.5.1
     # via drf-yasg
 jsonfield==3.1.0
-    # via
-    #   -c requirements/constraints.txt
-    #   edx-proctoring
-kombu==5.3.4
+    # via edx-proctoring
+jwcrypto==1.5.1
+    # via django-oauth-toolkit
+kombu==5.3.5
     # via celery
-lxml==4.9.3
+lxml==5.1.0
     # via xblock
 mako==1.3.0
     # via xblock
-markupsafe==2.1.3
+markupsafe==2.1.4
     # via
     #   mako
     #   xblock
-newrelic==9.2.0
+newrelic==9.6.0
     # via edx-django-utils
 oauthlib==3.2.2
     # via
     #   django-oauth-toolkit
     #   requests-oauthlib
     #   social-auth-core
-openedx-events==9.2.0
+openedx-events==9.3.0
     # via -r requirements/base.in
 packaging==23.2
     # via drf-yasg
 pbr==6.0.0
     # via stevedore
-prompt-toolkit==3.0.41
+prompt-toolkit==3.0.43
     # via click-repl
-psutil==5.9.6
+psutil==5.9.8
     # via edx-django-utils
 pycparser==2.21
     # via cffi
-pycryptodomex==3.19.0
+pycryptodomex==3.20.0
     # via edx-proctoring
 pyjwt[crypto]==2.8.0
     # via
@@ -218,13 +204,13 @@ python-dateutil==2.8.2
     #   celery
     #   edx-proctoring
     #   xblock
-python-ipware==2.0.0
+python-ipware==2.0.1
     # via django-ipware
 python3-openid==3.2.0
     # via social-auth-core
-pytz==2023.3.post1
+pytz==2023.4
     # via
-    #   django
+    #   djangorestframework
     #   drf-yasg
     #   edx-proctoring
     #   event-tracking
@@ -259,7 +245,7 @@ six==1.16.0
     #   python-dateutil
 slumber==0.7.1
     # via edx-rest-api-client
-social-auth-core==4.5.0
+social-auth-core==4.5.2
     # via -r requirements/base.in
 sqlparse==0.4.4
     # via django
@@ -267,15 +253,12 @@ stevedore==5.1.0
     # via
     #   edx-django-utils
     #   edx-opaque-keys
-typing-extensions==4.8.0
+typing-extensions==4.9.0
     # via
     #   asgiref
     #   edx-opaque-keys
-    #   kombu
-tzdata==2023.3
-    # via
-    #   backports-zoneinfo
-    #   celery
+tzdata==2023.4
+    # via celery
 uritemplate==4.1.1
     # via drf-yasg
 urllib3==2.1.0
@@ -285,13 +268,15 @@ vine==5.1.0
     #   amqp
     #   celery
     #   kombu
-wcwidth==0.2.12
+wcwidth==0.2.13
     # via prompt-toolkit
 web-fragments==2.1.0
     # via xblock
 webob==1.8.7
     # via xblock
-xblock==1.8.1
+wrapt==1.16.0
+    # via deprecated
+xblock==1.10.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 2fc625fa7..d41622e63 100644
--- a/requirements/constraints.txt
+++ b/requirements/constraints.txt
@@ -8,25 +8,10 @@
 # pin when possible.  Writing an issue against the offending project and
 # linking to it here is good.
 
-# Test dependencies
-pylint<3.0
-pycodestyle==2.8.0
-factory-boy==3.2.1
-django-countries<8.0
-
 # Keep same platform version
-click>=8.0,<9.0
-celery>=5.2.2,<6.0.0
-django<4.0
-djangorestframework==3.12.4
-django-filter<24.0
-django-model-utils<5.0
-django-oauth-toolkit==1.3.2
-django-waffle==3.0.0
-edx-api-doc-tools==1.6.0
-edx-drf-extensions<9.0
-edx-opaque-keys<3.0
-edx-proctoring<5.0
-jsonfield==3.1.0
-edx-django-utils>=5.2.0
-edx-when==2.3.0
+pylint<3.0
+pycodestyle<2.9.0
+django<5.0
+click<9.0
+django-oauth-toolkit<2.0.0
+edx-drf-extensions<9.0
\ No newline at end of file
diff --git a/requirements/django32.txt b/requirements/django32.txt
new file mode 100644
index 000000000..d296127a5
--- /dev/null
+++ b/requirements/django32.txt
@@ -0,0 +1 @@
+django==3.2.23
diff --git a/requirements/django42.txt b/requirements/django42.txt
new file mode 100644
index 000000000..5ecb3ea76
--- /dev/null
+++ b/requirements/django42.txt
@@ -0,0 +1 @@
+Django==4.2.8
\ No newline at end of file
diff --git a/requirements/pip-tools.txt b/requirements/pip-tools.txt
index 598494b9d..d00745138 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
@@ -10,8 +10,6 @@ click==8.1.7
     # via
     #   -c requirements/constraints.txt
     #   pip-tools
-importlib-metadata==6.8.0
-    # via build
 packaging==23.2
     # via build
 pip-tools==7.3.0
@@ -23,10 +21,8 @@ tomli==2.0.1
     #   build
     #   pip-tools
     #   pyproject-hooks
-wheel==0.41.3
+wheel==0.42.0
     # via pip-tools
-zipp==3.17.0
-    # via importlib-metadata
 
 # The following packages are considered to be unsafe in a requirements file:
 # pip
diff --git a/requirements/test.txt b/requirements/test.txt
index 0872699bc..0999cbe1e 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
@@ -19,23 +19,16 @@ asgiref==3.7.2
     #   django-countries
 astroid==2.15.8
     # via pylint
-attrs==23.1.0
+attrs==23.2.0
     # via
     #   -r requirements/base.txt
     #   openedx-events
-backports-zoneinfo[tzdata]==0.2.1
-    # via
-    #   -r requirements/base.txt
-    #   backports-zoneinfo
-    #   celery
-    #   kombu
 billiard==4.2.0
     # via
     #   -r requirements/base.txt
     #   celery
 celery==5.3.6
     # via
-    #   -c requirements/constraints.txt
     #   -r requirements/base.txt
     #   event-tracking
 certifi==2023.11.17
@@ -72,11 +65,12 @@ click-repl==0.3.0
     # via
     #   -r requirements/base.txt
     #   celery
-coverage==7.3.2
+coverage==7.4.1
     # via -r requirements/test.in
-cryptography==41.0.5
+cryptography==42.0.1
     # via
     #   -r requirements/base.txt
+    #   jwcrypto
     #   pyjwt
     #   social-auth-core
 defusedxml==0.8.0rc2
@@ -84,7 +78,11 @@ defusedxml==0.8.0rc2
     #   -r requirements/base.txt
     #   python3-openid
     #   social-auth-core
-dill==0.3.7
+deprecated==1.2.14
+    # via
+    #   -r requirements/base.txt
+    #   jwcrypto
+dill==0.3.8
     # via pylint
     # via
     #   -c requirements/constraints.txt
@@ -93,6 +91,7 @@ dill==0.3.7
     #   django-filter
     #   django-model-utils
     #   django-oauth-toolkit
+    #   django-waffle
     #   djangorestframework
     #   drf-jwt
     #   drf-yasg
@@ -105,29 +104,24 @@ dill==0.3.7
     #   jsonfield
     #   openedx-events
 django-countries==7.5.1
-    # via
-    #   -c requirements/constraints.txt
-    #   -r requirements/test.in
+    # via -r requirements/test.in
 django-crum==0.7.9
     # via
     #   -r requirements/base.txt
     #   edx-django-utils
     #   edx-proctoring
-django-filter==23.4
-    # via
-    #   -c requirements/constraints.txt
-    #   -r requirements/base.txt
-django-ipware==6.0.0
+django-filter==23.5
+    # via -r requirements/base.txt
+django-ipware==6.0.3
     # via
     #   -r requirements/base.txt
     #   edx-proctoring
 django-model-utils==4.3.1
     # via
-    #   -c requirements/constraints.txt
     #   -r requirements/base.txt
     #   edx-proctoring
     #   edx-when
-django-oauth-toolkit==1.3.2
+django-oauth-toolkit==1.7.1
     # via
     #   -c requirements/constraints.txt
     #   -r requirements/base.txt
@@ -137,20 +131,18 @@ django-simple-history==3.4.0
     # via
     #   -r requirements/base.txt
     #   edx-proctoring
-django-waffle==3.0.0
+django-waffle==4.1.0
     # via
-    #   -c requirements/constraints.txt
     #   -r requirements/base.txt
     #   edx-django-utils
     #   edx-drf-extensions
     #   edx-proctoring
-django-webpack-loader==2.0.1
+django-webpack-loader==3.0.1
     # via
     #   -r requirements/base.txt
     #   edx-proctoring
-djangorestframework==3.12.4
+djangorestframework==3.14.0
     # via
-    #   -c requirements/constraints.txt
     #   -r requirements/base.txt
     #   drf-jwt
     #   drf-yasg
@@ -165,13 +157,10 @@ drf-yasg==1.21.7
     # via
     #   -r requirements/base.txt
     #   edx-api-doc-tools
-edx-api-doc-tools==1.6.0
-    # via
-    #   -c requirements/constraints.txt
-    #   -r requirements/base.txt
-edx-django-utils==5.8.0
+edx-api-doc-tools==1.7.0
+    # via -r requirements/base.txt
+edx-django-utils==5.10.1
     # via
-    #   -c requirements/constraints.txt
     #   -r requirements/base.txt
     #   edx-drf-extensions
     #   edx-rest-api-client
@@ -185,7 +174,6 @@ edx-drf-extensions==8.13.1
     #   edx-when
 edx-opaque-keys[django]==2.5.1
     # via
-    #   -c requirements/constraints.txt
     #   -r requirements/base.txt
     #   edx-drf-extensions
     #   edx-opaque-keys
@@ -193,16 +181,13 @@ edx-opaque-keys[django]==2.5.1
     #   edx-when
     #   openedx-events
 edx-proctoring==4.16.1
-    # via
-    #   -c requirements/constraints.txt
-    #   -r requirements/base.txt
+    # via -r requirements/base.txt
 edx-rest-api-client==5.6.1
     # via
     #   -r requirements/base.txt
     #   edx-proctoring
-edx-when==2.3.0
+edx-when==2.4.0
     # via
-    #   -c requirements/constraints.txt
     #   -r requirements/base.txt
     #   edx-proctoring
 event-tracking==2.2.0
@@ -211,13 +196,11 @@ event-tracking==2.2.0
     #   edx-proctoring
 exceptiongroup==1.2.0
     # via pytest
-factory-boy==3.2.1
-    # via
-    #   -c requirements/constraints.txt
-    #   -r requirements/test.in
-faker==20.1.0
+factory-boy==3.3.0
+    # via -r requirements/test.in
+faker==22.6.0
     # via factory-boy
-fastavro==1.9.0
+fastavro==1.9.3
     # via
     #   -r requirements/base.txt
     #   openedx-events
@@ -225,7 +208,7 @@ fs==2.4.16
     # via
     #   -r requirements/base.txt
     #   xblock
-idna==3.4
+idna==3.6
     # via
     #   -r requirements/base.txt
     #   requests
@@ -235,20 +218,23 @@ inflection==0.5.1
     #   drf-yasg
 iniconfig==2.0.0
     # via pytest
-isort==5.12.0
+isort==5.13.2
     # via pylint
 jsonfield==3.1.0
     # via
-    #   -c requirements/constraints.txt
     #   -r requirements/base.txt
     #   edx-proctoring
-kombu==5.3.4
+jwcrypto==1.5.1
+    # via
+    #   -r requirements/base.txt
+    #   django-oauth-toolkit
+kombu==5.3.5
     # via
     #   -r requirements/base.txt
     #   celery
-lazy-object-proxy==1.9.0
+lazy-object-proxy==1.10.0
     # via astroid
-lxml==4.9.3
+lxml==5.1.0
     # via
     #   -r requirements/base.txt
     #   xblock
@@ -256,7 +242,7 @@ mako==1.3.0
     # via
     #   -r requirements/base.txt
     #   xblock
-markupsafe==2.1.3
+markupsafe==2.1.4
     # via
     #   -r requirements/base.txt
     #   mako
@@ -265,7 +251,7 @@ mccabe==0.7.0
     # via pylint
 mock==5.1.0
     # via -r requirements/test.in
-newrelic==9.2.0
+newrelic==9.6.0
     # via
     #   -r requirements/base.txt
     #   edx-django-utils
@@ -275,7 +261,7 @@ oauthlib==3.2.2
     #   django-oauth-toolkit
     #   requests-oauthlib
     #   social-auth-core
-openedx-events==9.2.0
+openedx-events==9.3.0
     # via -r requirements/base.txt
 packaging==23.2
     # via
@@ -286,15 +272,15 @@ pbr==6.0.0
     # via
     #   -r requirements/base.txt
     #   stevedore
-platformdirs==4.0.0
+platformdirs==4.1.0
     # via pylint
-pluggy==1.3.0
+pluggy==1.4.0
     # via pytest
-prompt-toolkit==3.0.41
+prompt-toolkit==3.0.43
     # via
     #   -r requirements/base.txt
     #   click-repl
-psutil==5.9.6
+psutil==5.9.8
     # via
     #   -r requirements/base.txt
     #   edx-django-utils
@@ -306,7 +292,7 @@ pycparser==2.21
     # via
     #   -r requirements/base.txt
     #   cffi
-pycryptodomex==3.19.0
+pycryptodomex==3.20.0
     # via
     #   -r requirements/base.txt
     #   edx-proctoring
@@ -332,7 +318,7 @@ pynacl==1.5.0
     # via
     #   -r requirements/base.txt
     #   edx-django-utils
-pytest==7.4.3
+pytest==8.0.0
     # via
     #   -r requirements/test.in
     #   pytest-django
@@ -345,7 +331,7 @@ python-dateutil==2.8.2
     #   edx-proctoring
     #   faker
     #   xblock
-python-ipware==2.0.0
+python-ipware==2.0.1
     # via
     #   -r requirements/base.txt
     #   django-ipware
@@ -353,10 +339,10 @@ python3-openid==3.2.0
     # via
     #   -r requirements/base.txt
     #   social-auth-core
-pytz==2023.3.post1
+pytz==2023.4
     # via
     #   -r requirements/base.txt
-    #   django
+    #   djangorestframework
     #   drf-yasg
     #   edx-proctoring
     #   event-tracking
@@ -405,7 +391,7 @@ slumber==0.7.1
     # via
     #   -r requirements/base.txt
     #   edx-rest-api-client
-social-auth-core==4.5.0
+social-auth-core==4.5.2
     # via -r requirements/base.txt
 sqlparse==0.4.4
     # via
@@ -424,20 +410,16 @@ tomli==2.0.1
     #   pytest
 tomlkit==0.12.3
     # via pylint
-typing-extensions==4.8.0
+typing-extensions==4.9.0
     # via
     #   -r requirements/base.txt
     #   asgiref
     #   astroid
     #   django-countries
     #   edx-opaque-keys
-    #   faker
-    #   kombu
-    #   pylint
-tzdata==2023.3
+tzdata==2023.4
     # via
     #   -r requirements/base.txt
-    #   backports-zoneinfo
     #   celery
 uritemplate==4.1.1
     # via
@@ -453,7 +435,7 @@ vine==5.1.0
     #   amqp
     #   celery
     #   kombu
-wcwidth==0.2.12
+wcwidth==0.2.13
     # via
     #   -r requirements/base.txt
     #   prompt-toolkit
@@ -466,8 +448,11 @@ webob==1.8.7
     #   -r requirements/base.txt
     #   xblock
 wrapt==1.16.0
-    # via astroid
-xblock==1.8.1
+    # via
+    #   -r requirements/base.txt
+    #   astroid
+    #   deprecated
+xblock==1.10.0
     # via
     #   -r requirements/base.txt
     #   edx-when
diff --git a/requirements/tox.txt b/requirements/tox.txt
index 219e1f9d7..6c8c60a51 100644
--- a/requirements/tox.txt
+++ b/requirements/tox.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
@@ -10,7 +10,7 @@ chardet==5.2.0
     # via tox
 colorama==0.4.6
     # via tox
-distlib==0.3.7
+distlib==0.3.8
     # via virtualenv
 filelock==3.13.1
     # via
@@ -20,11 +20,11 @@ packaging==23.2
     # via
     #   pyproject-api
     #   tox
-platformdirs==4.0.0
+platformdirs==4.1.0
     # via
     #   tox
     #   virtualenv
-pluggy==1.3.0
+pluggy==1.4.0
     # via tox
 pyproject-api==1.6.1
     # via tox
@@ -32,7 +32,7 @@ tomli==2.0.1
     # via
     #   pyproject-api
     #   tox
-tox==4.11.3
+tox==4.12.1
     # via -r requirements/tox.in
-virtualenv==20.24.7
+virtualenv==20.25.0
     # via tox
diff --git a/tox.ini b/tox.ini
index fe5315f8a..7b1dca8c4 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,5 +1,5 @@
 [tox]
-envlist = py{38, 310}-django{32}
+envlist = py{38, 310, 311}-django{32, 42}
 
 
 [testenv]
@@ -7,9 +7,11 @@ passenv = TEST_INTEGRATION
 envdir=
     py38: {toxworkdir}/py38
     py310: {toxworkdir}/py310
+    py311: {toxworkdir}/py311
 
 deps =
-    django32: -r requirements/django.txt
+    django32: -r requirements/django32.txt
+    django42: -r requirements/django42.txt
     -rrequirements/test.txt
 commands =
     {posargs}