diff --git a/requirements/base.txt b/requirements/base.txt
index 471f6f5..dede94b 100644
--- a/requirements/base.txt
+++ b/requirements/base.txt
@@ -15,7 +15,7 @@ cffi==1.16.0
     # via pynacl
 click==8.1.7
     # via edx-django-utils
-django==4.2.11
+django==4.2.13
     # via
     #   -c requirements/common_constraints.txt
     #   -r requirements/base.in
@@ -29,9 +29,9 @@ django-waffle==4.1.0
     # via edx-django-utils
 djangorestframework==3.15.1
     # via -r requirements/base.in
-edx-django-utils==5.12.0
+edx-django-utils==5.14.1
     # via -r requirements/base.in
-newrelic==9.8.0
+newrelic==9.10.0
     # via edx-django-utils
 pbr==6.0.0
     # via stevedore
@@ -41,9 +41,9 @@ pycparser==2.22
     # via cffi
 pynacl==1.5.0
     # via edx-django-utils
-sqlparse==0.4.4
+sqlparse==0.5.0
     # via django
 stevedore==5.2.0
     # via edx-django-utils
-typing-extensions==4.10.0
+typing-extensions==4.12.0
     # via asgiref
diff --git a/requirements/ci.txt b/requirements/ci.txt
index 255b0e7..3e92df7 100644
--- a/requirements/ci.txt
+++ b/requirements/ci.txt
@@ -6,7 +6,7 @@
 #
 distlib==0.3.8
     # via virtualenv
-filelock==3.13.3
+filelock==3.14.0
     # via
     #   tox
     #   virtualenv
@@ -14,11 +14,11 @@ packaging==24.0
     # via
     #   pyproject-api
     #   tox
-platformdirs==4.2.0
+platformdirs==4.2.2
     # via
     #   tox
     #   virtualenv
-pluggy==1.4.0
+pluggy==1.5.0
     # via tox
 py==1.11.0
     # via tox
@@ -34,5 +34,5 @@ tox==3.28.0
     #   tox-travis
 tox-travis==0.13
     # via -r requirements/ci.in
-virtualenv==20.25.1
+virtualenv==20.26.2
     # via tox
diff --git a/requirements/dev.txt b/requirements/dev.txt
index 569ce29..2200dac 100644
--- a/requirements/dev.txt
+++ b/requirements/dev.txt
@@ -8,7 +8,7 @@ asgiref==3.8.1
     # via
     #   -r requirements/quality.txt
     #   django
-astroid==3.1.0
+astroid==3.2.2
     # via
     #   -r requirements/quality.txt
     #   pylint
@@ -40,11 +40,11 @@ click-log==0.4.0
     # via
     #   -r requirements/quality.txt
     #   edx-lint
-code-annotations==1.7.0
+code-annotations==1.8.0
     # via
     #   -r requirements/quality.txt
     #   edx-lint
-coverage[toml]==7.4.4
+coverage[toml]==7.5.2
     # via
     #   -r requirements/quality.txt
     #   pytest-cov
@@ -58,7 +58,7 @@ distlib==0.3.8
     # via
     #   -r requirements/ci.txt
     #   virtualenv
-django==4.2.11
+django==4.2.13
     # via
     #   -c requirements/common_constraints.txt
     #   -r requirements/quality.txt
@@ -80,22 +80,22 @@ djangorestframework==3.15.1
     # via -r requirements/quality.txt
 edx-django-release-util==1.4.0
     # via -r requirements/quality.txt
-edx-django-utils==5.12.0
+edx-django-utils==5.14.1
     # via -r requirements/quality.txt
-edx-i18n-tools==1.3.0
+edx-i18n-tools==1.6.0
     # via -r requirements/dev.in
 edx-lint==5.3.6
     # via -r requirements/quality.txt
-exceptiongroup==1.2.0
+exceptiongroup==1.2.1
     # via
     #   -r requirements/quality.txt
     #   pytest
-filelock==3.13.3
+filelock==3.14.0
     # via
     #   -r requirements/ci.txt
     #   tox
     #   virtualenv
-freezegun==1.4.0
+freezegun==1.5.1
     # via -r requirements/quality.txt
 importlib-metadata==6.11.0
     # via
@@ -110,12 +110,16 @@ isort==5.13.2
     # via
     #   -r requirements/quality.txt
     #   pylint
-jinja2==3.1.3
+jinja2==3.1.4
     # via
     #   -r requirements/quality.txt
     #   code-annotations
-lxml==5.2.1
-    # via edx-i18n-tools
+lxml[html-clean,html_clean]==5.2.2
+    # via
+    #   edx-i18n-tools
+    #   lxml-html-clean
+lxml-html-clean==0.1.1
+    # via lxml
 markupsafe==2.1.5
     # via
     #   -r requirements/quality.txt
@@ -124,7 +128,7 @@ mccabe==0.7.0
     # via
     #   -r requirements/quality.txt
     #   pylint
-newrelic==9.8.0
+newrelic==9.10.0
     # via
     #   -r requirements/quality.txt
     #   edx-django-utils
@@ -136,7 +140,7 @@ packaging==24.0
     #   build
     #   pytest
     #   tox
-path==16.10.0
+path==16.14.0
     # via edx-i18n-tools
 pbr==6.0.0
     # via
@@ -144,13 +148,13 @@ pbr==6.0.0
     #   stevedore
 pip-tools==7.4.1
     # via -r requirements/pip-tools.txt
-platformdirs==4.2.0
+platformdirs==4.2.2
     # via
     #   -r requirements/ci.txt
     #   -r requirements/quality.txt
     #   pylint
     #   virtualenv
-pluggy==1.4.0
+pluggy==1.5.0
     # via
     #   -r requirements/ci.txt
     #   -r requirements/quality.txt
@@ -174,7 +178,7 @@ pycparser==2.22
     #   cffi
 pydocstyle==6.3.0
     # via -r requirements/quality.txt
-pylint==3.1.0
+pylint==3.2.2
     # via
     #   -r requirements/quality.txt
     #   edx-lint
@@ -198,12 +202,12 @@ pynacl==1.5.0
     # via
     #   -r requirements/quality.txt
     #   edx-django-utils
-pyproject-hooks==1.0.0
+pyproject-hooks==1.1.0
     # via
     #   -r requirements/pip-tools.txt
     #   build
     #   pip-tools
-pytest==8.1.1
+pytest==8.2.1
     # via
     #   -r requirements/quality.txt
     #   pytest-cov
@@ -238,7 +242,7 @@ snowballstemmer==2.2.0
     # via
     #   -r requirements/quality.txt
     #   pydocstyle
-sqlparse==0.4.4
+sqlparse==0.5.0
     # via
     #   -r requirements/quality.txt
     #   django
@@ -260,10 +264,9 @@ tomli==2.0.1
     #   coverage
     #   pip-tools
     #   pylint
-    #   pyproject-hooks
     #   pytest
     #   tox
-tomlkit==0.12.4
+tomlkit==0.12.5
     # via
     #   -r requirements/quality.txt
     #   pylint
@@ -273,13 +276,13 @@ tox==3.28.0
     #   tox-travis
 tox-travis==0.13
     # via -r requirements/ci.txt
-typing-extensions==4.10.0
+typing-extensions==4.12.0
     # via
     #   -r requirements/quality.txt
     #   asgiref
     #   astroid
     #   pylint
-virtualenv==20.25.1
+virtualenv==20.26.2
     # via
     #   -r requirements/ci.txt
     #   tox
@@ -287,7 +290,7 @@ wheel==0.43.0
     # via
     #   -r requirements/pip-tools.txt
     #   pip-tools
-zipp==3.18.1
+zipp==3.19.0
     # via
     #   -r requirements/pip-tools.txt
     #   importlib-metadata
diff --git a/requirements/doc.txt b/requirements/doc.txt
index d878c74..ab77aab 100644
--- a/requirements/doc.txt
+++ b/requirements/doc.txt
@@ -12,10 +12,12 @@ asgiref==3.8.1
     # via
     #   -r requirements/test.txt
     #   django
-babel==2.14.0
+babel==2.15.0
     # via
     #   pydata-sphinx-theme
     #   sphinx
+backports-tarfile==1.1.1
+    # via jaraco-context
 backports-zoneinfo==0.2.1 ; python_version < "3.9"
     # via
     #   -c requirements/constraints.txt
@@ -37,15 +39,15 @@ click==8.1.7
     # via
     #   -r requirements/test.txt
     #   edx-django-utils
-coverage[toml]==7.4.4
+coverage[toml]==7.5.2
     # via
     #   -r requirements/test.txt
     #   pytest-cov
-cryptography==42.0.5
+cryptography==42.0.7
     # via secretstorage
 ddt==1.7.2
     # via -r requirements/test.txt
-django==4.2.11
+django==4.2.13
     # via
     #   -c requirements/common_constraints.txt
     #   -r requirements/test.txt
@@ -71,15 +73,15 @@ docutils==0.19
     #   sphinx
 edx-django-release-util==1.4.0
     # via -r requirements/test.txt
-edx-django-utils==5.12.0
+edx-django-utils==5.14.1
     # via -r requirements/test.txt
-exceptiongroup==1.2.0
+exceptiongroup==1.2.1
     # via
     #   -r requirements/test.txt
     #   pytest
-freezegun==1.4.0
+freezegun==1.5.1
     # via -r requirements/test.txt
-idna==3.6
+idna==3.7
     # via requests
 imagesize==1.4.1
     # via sphinx
@@ -97,17 +99,17 @@ iniconfig==2.0.0
     #   pytest
 jaraco-classes==3.4.0
     # via keyring
-jaraco-context==4.3.0
+jaraco-context==5.3.0
     # via keyring
-jaraco-functools==4.0.0
+jaraco-functools==4.0.1
     # via keyring
 jeepney==0.8.0
     # via
     #   keyring
     #   secretstorage
-jinja2==3.1.3
+jinja2==3.1.4
     # via sphinx
-keyring==25.1.0
+keyring==25.2.1
     # via twine
 markdown-it-py==3.0.0
     # via rich
@@ -119,7 +121,7 @@ more-itertools==10.2.0
     # via
     #   jaraco-classes
     #   jaraco-functools
-newrelic==9.8.0
+newrelic==9.10.0
     # via
     #   -r requirements/test.txt
     #   edx-django-utils
@@ -137,7 +139,7 @@ pbr==6.0.0
     #   stevedore
 pkginfo==1.10.0
     # via twine
-pluggy==1.4.0
+pluggy==1.5.0
     # via
     #   -r requirements/test.txt
     #   pytest
@@ -151,7 +153,7 @@ pycparser==2.22
     #   cffi
 pydata-sphinx-theme==0.14.4
     # via sphinx-book-theme
-pygments==2.17.2
+pygments==2.18.0
     # via
     #   accessible-pygments
     #   pydata-sphinx-theme
@@ -162,7 +164,7 @@ pynacl==1.5.0
     # via
     #   -r requirements/test.txt
     #   edx-django-utils
-pytest==8.1.1
+pytest==8.2.1
     # via
     #   -r requirements/test.txt
     #   pytest-cov
@@ -185,7 +187,7 @@ readme-renderer==43.0
     # via
     #   -r requirements/doc.in
     #   twine
-requests==2.31.0
+requests==2.32.2
     # via
     #   requests-toolbelt
     #   sphinx
@@ -226,7 +228,7 @@ sphinxcontrib-qthelp==1.0.3
     # via sphinx
 sphinxcontrib-serializinghtml==1.1.5
     # via sphinx
-sqlparse==0.4.4
+sqlparse==0.5.0
     # via
     #   -r requirements/test.txt
     #   django
@@ -239,9 +241,9 @@ tomli==2.0.1
     #   -r requirements/test.txt
     #   coverage
     #   pytest
-twine==5.0.0
+twine==5.1.0
     # via -r requirements/doc.in
-typing-extensions==4.10.0
+typing-extensions==4.12.0
     # via
     #   -r requirements/test.txt
     #   asgiref
@@ -251,7 +253,7 @@ urllib3==2.2.1
     # via
     #   requests
     #   twine
-zipp==3.18.1
+zipp==3.19.0
     # via
     #   importlib-metadata
     #   importlib-resources
diff --git a/requirements/pip-tools.txt b/requirements/pip-tools.txt
index 6401f54..1e18892 100644
--- a/requirements/pip-tools.txt
+++ b/requirements/pip-tools.txt
@@ -16,7 +16,7 @@ packaging==24.0
     # via build
 pip-tools==7.4.1
     # via -r requirements/pip-tools.in
-pyproject-hooks==1.0.0
+pyproject-hooks==1.1.0
     # via
     #   build
     #   pip-tools
@@ -24,10 +24,9 @@ tomli==2.0.1
     # via
     #   build
     #   pip-tools
-    #   pyproject-hooks
 wheel==0.43.0
     # via pip-tools
-zipp==3.18.1
+zipp==3.19.0
     # via importlib-metadata
 
 # The following packages are considered to be unsafe in a requirements file:
diff --git a/requirements/pip.txt b/requirements/pip.txt
index cf44902..8a72bb0 100644
--- a/requirements/pip.txt
+++ b/requirements/pip.txt
@@ -10,5 +10,5 @@ wheel==0.43.0
 # The following packages are considered to be unsafe in a requirements file:
 pip==24.0
     # via -r requirements/pip.in
-setuptools==69.2.0
+setuptools==70.0.0
     # via -r requirements/pip.in
diff --git a/requirements/quality.txt b/requirements/quality.txt
index 73a97df..7678d2c 100644
--- a/requirements/quality.txt
+++ b/requirements/quality.txt
@@ -8,7 +8,7 @@ asgiref==3.8.1
     # via
     #   -r requirements/test.txt
     #   django
-astroid==3.1.0
+astroid==3.2.2
     # via
     #   pylint
     #   pylint-celery
@@ -31,9 +31,9 @@ click==8.1.7
     #   edx-lint
 click-log==0.4.0
     # via edx-lint
-code-annotations==1.7.0
+code-annotations==1.8.0
     # via edx-lint
-coverage[toml]==7.4.4
+coverage[toml]==7.5.2
     # via
     #   -r requirements/test.txt
     #   pytest-cov
@@ -41,7 +41,7 @@ ddt==1.7.2
     # via -r requirements/test.txt
 dill==0.3.8
     # via pylint
-django==4.2.11
+django==4.2.13
     # via
     #   -c requirements/common_constraints.txt
     #   -r requirements/test.txt
@@ -62,15 +62,15 @@ djangorestframework==3.15.1
     # via -r requirements/test.txt
 edx-django-release-util==1.4.0
     # via -r requirements/test.txt
-edx-django-utils==5.12.0
+edx-django-utils==5.14.1
     # via -r requirements/test.txt
 edx-lint==5.3.6
     # via -r requirements/quality.in
-exceptiongroup==1.2.0
+exceptiongroup==1.2.1
     # via
     #   -r requirements/test.txt
     #   pytest
-freezegun==1.4.0
+freezegun==1.5.1
     # via -r requirements/test.txt
 iniconfig==2.0.0
     # via
@@ -78,13 +78,13 @@ iniconfig==2.0.0
     #   pytest
 isort==5.13.2
     # via pylint
-jinja2==3.1.3
+jinja2==3.1.4
     # via code-annotations
 markupsafe==2.1.5
     # via jinja2
 mccabe==0.7.0
     # via pylint
-newrelic==9.8.0
+newrelic==9.10.0
     # via
     #   -r requirements/test.txt
     #   edx-django-utils
@@ -96,9 +96,9 @@ pbr==6.0.0
     # via
     #   -r requirements/test.txt
     #   stevedore
-platformdirs==4.2.0
+platformdirs==4.2.2
     # via pylint
-pluggy==1.4.0
+pluggy==1.5.0
     # via
     #   -r requirements/test.txt
     #   pytest
@@ -114,7 +114,7 @@ pycparser==2.22
     #   cffi
 pydocstyle==6.3.0
     # via -r requirements/quality.in
-pylint==3.1.0
+pylint==3.2.2
     # via
     #   edx-lint
     #   pylint-celery
@@ -132,7 +132,7 @@ pynacl==1.5.0
     # via
     #   -r requirements/test.txt
     #   edx-django-utils
-pytest==8.1.1
+pytest==8.2.1
     # via
     #   -r requirements/test.txt
     #   pytest-cov
@@ -160,7 +160,7 @@ six==1.16.0
     #   python-dateutil
 snowballstemmer==2.2.0
     # via pydocstyle
-sqlparse==0.4.4
+sqlparse==0.5.0
     # via
     #   -r requirements/test.txt
     #   django
@@ -177,9 +177,9 @@ tomli==2.0.1
     #   coverage
     #   pylint
     #   pytest
-tomlkit==0.12.4
+tomlkit==0.12.5
     # via pylint
-typing-extensions==4.10.0
+typing-extensions==4.12.0
     # via
     #   -r requirements/test.txt
     #   asgiref
diff --git a/requirements/test.txt b/requirements/test.txt
index 4ab1515..5cabb89 100644
--- a/requirements/test.txt
+++ b/requirements/test.txt
@@ -22,7 +22,7 @@ click==8.1.7
     # via
     #   -r requirements/base.txt
     #   edx-django-utils
-coverage[toml]==7.4.4
+coverage[toml]==7.5.2
     # via pytest-cov
 ddt==1.7.2
     # via -r requirements/test.in
@@ -45,15 +45,15 @@ django-waffle==4.1.0
     # via -r requirements/base.txt
 edx-django-release-util==1.4.0
     # via -r requirements/test.in
-edx-django-utils==5.12.0
+edx-django-utils==5.14.1
     # via -r requirements/base.txt
-exceptiongroup==1.2.0
+exceptiongroup==1.2.1
     # via pytest
-freezegun==1.4.0
+freezegun==1.5.1
     # via -r requirements/test.in
 iniconfig==2.0.0
     # via pytest
-newrelic==9.8.0
+newrelic==9.10.0
     # via
     #   -r requirements/base.txt
     #   edx-django-utils
@@ -63,7 +63,7 @@ pbr==6.0.0
     # via
     #   -r requirements/base.txt
     #   stevedore
-pluggy==1.4.0
+pluggy==1.5.0
     # via pytest
 psutil==5.9.8
     # via
@@ -77,7 +77,7 @@ pynacl==1.5.0
     # via
     #   -r requirements/base.txt
     #   edx-django-utils
-pytest==8.1.1
+pytest==8.2.1
     # via
     #   pytest-cov
     #   pytest-django
@@ -93,7 +93,7 @@ six==1.16.0
     # via
     #   edx-django-release-util
     #   python-dateutil
-sqlparse==0.4.4
+sqlparse==0.5.0
     # via
     #   -r requirements/base.txt
     #   django
@@ -105,7 +105,7 @@ tomli==2.0.1
     # via
     #   coverage
     #   pytest
-typing-extensions==4.10.0
+typing-extensions==4.12.0
     # via
     #   -r requirements/base.txt
     #   asgiref