diff --git a/enterprise_access/apps/provisioning/admin.py b/enterprise_access/apps/provisioning/admin.py
index ae79000b..b27bf50c 100644
--- a/enterprise_access/apps/provisioning/admin.py
+++ b/enterprise_access/apps/provisioning/admin.py
@@ -6,7 +6,7 @@
from django.shortcuts import render
from django.urls import reverse
from django.utils import timezone
-from django.utils.safestring import mark_safe
+from django.utils.html import format_html
from django.utils.translation import gettext_lazy as _
from djangoql.admin import DjangoQLSearchMixin
@@ -41,7 +41,7 @@ class ProvisionNewCustomerWorkflowAdmin(DjangoQLSearchMixin, admin.ModelAdmin):
'create_admin_users_step_link',
'create_catalog_step_link',
'create_customer_agreement_step_link',
- 'create_subscription_plan_step_link',
+ 'create_trial_subscription_plan_step_link',
'enterprise_customer_admin_link',
'subscription_plan_link',
)
@@ -56,10 +56,11 @@ def create_customer_step_link(self, obj):
step_record = obj.get_create_customer_step()
if not step_record:
return None
- return mark_safe('{}'.format(
+ return format_html(
+ '{}',
reverse("admin:provisioning_getcreatecustomerstep_change", args=(step_record.pk,)),
step_record.pk,
- ))
+ )
@admin.display(
description='Create Admin Users Step'
@@ -71,10 +72,11 @@ def create_admin_users_step_link(self, obj):
step_record = obj.get_create_enterprise_admin_users_step()
if not step_record:
return None
- return mark_safe('{}'.format(
+ return format_html(
+ '{}',
reverse("admin:provisioning_getcreateenterpriseadminusersstep_change", args=(step_record.pk,)),
step_record.pk,
- ))
+ )
@admin.display(
description='Create Catalog Step'
@@ -86,10 +88,11 @@ def create_catalog_step_link(self, obj):
step_record = obj.get_create_catalog_step()
if not step_record:
return None
- return mark_safe('{}'.format(
+ return format_html(
+ '{}',
reverse("admin:provisioning_getcreatecatalogstep_change", args=(step_record.pk,)),
step_record.pk,
- ))
+ )
@admin.display(
description='Create Customer Agreement Step'
@@ -101,25 +104,27 @@ def create_customer_agreement_step_link(self, obj):
step_record = obj.get_create_customer_agreement_step()
if not step_record:
return None
- return mark_safe('{}'.format(
+ return format_html(
+ '{}',
reverse("admin:provisioning_getcreatecustomeragreementstep_change", args=(step_record.pk,)),
step_record.pk,
- ))
+ )
@admin.display(
- description='Create Subscription Plan Step'
+ description='Create Trial Subscription Plan Step'
)
- def create_subscription_plan_step_link(self, obj):
+ def create_trial_subscription_plan_step_link(self, obj):
"""
Returns a link to the subscription plan creation step admin page for this workflow.
"""
- step_record = obj.get_create_subscription_plan_step()
+ step_record = obj.get_create_trial_subscription_plan_step()
if not step_record:
return None
- return mark_safe('{}'.format(
- reverse("admin:provisioning_getcreatesubscriptionplanstep_change", args=(step_record.pk,)),
+ return format_html(
+ '{}',
+ reverse("admin:provisioning_getcreatetrialsubscriptionplanstep_change", args=(step_record.pk,)),
step_record.pk,
- ))
+ )
@admin.display(
description='Enterprise Customer Record (LMS)'
@@ -131,7 +136,7 @@ def enterprise_customer_admin_link(self, obj):
step_record = obj.get_create_customer_step()
customer_uuid = step_record.output_object.uuid
url = f'{settings.LMS_URL}/admin/enterprise/enterprisecustomer/{customer_uuid}/change/'
- return mark_safe(f'{url}')
+ return format_html('{}', url, url)
@admin.display(
description='Subscription Plan Record (License Manager)'
@@ -140,10 +145,10 @@ def subscription_plan_link(self, obj):
"""
Link to the EnterpriseCustomer Admin record in the LMS service.
"""
- step_record = obj.get_create_subscription_plan_step()
+ step_record = obj.get_create_trial_subscription_plan_step()
plan_uuid = step_record.output_object.uuid
url = f'{settings.LICENSE_MANAGER_URL}/admin/subscriptions/subscriptionplan/{plan_uuid}/change/'
- return mark_safe(f'{url}')
+ return format_html('{}', url, url)
class ProvisionWorkflowStepAdminBase(admin.ModelAdmin):
@@ -179,10 +184,11 @@ def workflow_record_link(self, obj):
workflow_record = obj.get_workflow_record()
if not workflow_record:
return None
- return mark_safe('{}'.format(
+ return format_html(
+ '{}',
reverse("admin:provisioning_provisionnewcustomerworkflow_change", args=(workflow_record.pk,)),
workflow_record.pk,
- ))
+ )
@admin.action(description='Re-process the input for this step')
def process_input(self, request, queryset):
@@ -218,10 +224,11 @@ def preceding_step_link(self, obj):
step_record = obj.get_preceding_step_record()
if not step_record:
return None
- return mark_safe('{}'.format(
+ return format_html(
+ '{}',
reverse("admin:provisioning_getcreatecustomerstep_change", args=(step_record.pk,)),
step_record.pk,
- ))
+ )
@admin.register(models.GetCreateCatalogStep)
@@ -242,10 +249,11 @@ def preceding_step_link(self, obj):
step_record = obj.get_preceding_step_record()
if not step_record:
return None
- return mark_safe('{}'.format(
+ return format_html(
+ '{}',
reverse("admin:provisioning_getcreateenterpriseadminusersstep_change", args=(step_record.pk,)),
step_record.pk,
- ))
+ )
@admin.register(models.AssociateAcademyStep)
@@ -266,10 +274,11 @@ def preceding_step_link(self, obj):
step_record = obj.get_preceding_step_record()
if not step_record:
return None
- return mark_safe('{}'.format(
+ return format_html(
+ '{}',
reverse("admin:provisioning_getcreatecatalogstep_change", args=(step_record.pk,)),
step_record.pk,
- ))
+ )
@admin.register(models.GetCreateCustomerAgreementStep)
@@ -293,10 +302,11 @@ def preceding_step_link(self, obj):
admin_change_url = "admin:provisioning_associateacademystep_change"
if isinstance(step_record, models.GetCreateCatalogStep):
admin_change_url = "admin:provisioning_getcreatecatalogstep_change"
- return mark_safe('{}'.format(
+ return format_html(
+ '{}',
reverse(admin_change_url, args=(step_record.pk,)),
step_record.pk,
- ))
+ )
@admin.register(models.GetCreateTrialSubscriptionPlanStep)
@@ -317,10 +327,11 @@ def preceding_step_link(self, obj):
step_record = obj.get_preceding_step_record()
if not step_record:
return None
- return mark_safe('{}'.format(
+ return format_html(
+ '{}',
reverse("admin:provisioning_getcreatecustomeragreementstep_change", args=(step_record.pk,)),
step_record.pk,
- ))
+ )
@admin.register(models.GetCreateSubscriptionPlanRenewalStep)
diff --git a/requirements/base.txt b/requirements/base.txt
index 39c8f1dc..dcdb06e1 100644
--- a/requirements/base.txt
+++ b/requirements/base.txt
@@ -10,7 +10,7 @@ amqp==5.3.1
# via kombu
analytics-python==1.4.post1
# via -r requirements/base.in
-asgiref==3.11.1
+asgiref==3.12.1
# via
# django
# django-cors-headers
@@ -30,9 +30,9 @@ backoff==1.10.0
# via analytics-python
billiard==4.2.4
# via celery
-boto3==1.43.40
+boto3==1.43.55
# via snowflake-connector-python
-botocore==1.43.40
+botocore==1.43.55
# via
# boto3
# s3transfer
@@ -44,15 +44,15 @@ celery==5.6.3
# -r requirements/base.in
# django-celery-results
# edx-celeryutils
-certifi==2026.6.17
+certifi==2026.7.22
# via
# requests
# snowflake-connector-python
-cffi==2.0.0
+cffi==2.1.0
# via
# cryptography
# pynacl
-charset-normalizer==3.4.7
+charset-normalizer==3.4.9
# via
# requests
# snowflake-connector-python
@@ -88,7 +88,7 @@ defusedxml==0.7.1
# via
# python3-openid
# social-auth-core
-django==5.2.15
+django==5.2.16
# via
# -c requirements/common_constraints.txt
# -r requirements/base.in
@@ -138,7 +138,7 @@ django-crum==0.7.9
# edx-toggles
django-extensions==4.1
# via -r requirements/base.in
-django-filter==25.2
+django-filter==26.1
# via -r requirements/base.in
django-log-request-id==2.1.2
# via -r requirements/base.in
@@ -148,7 +148,7 @@ django-model-utils==5.0.0
# edx-rbac
django-object-actions==5.1.2
# via -r requirements/base.in
-django-simple-history==3.12.0
+django-simple-history==3.13.0
# via -r requirements/base.in
django-waffle==5.0.0
# via
@@ -173,7 +173,7 @@ dnspython==2.8.0
# via pymongo
drf-jwt==1.19.2
# via edx-drf-extensions
-drf-spectacular==0.29.0
+drf-spectacular==0.30.0
# via -r requirements/base.in
drf-yasg==1.21.15
# via edx-api-doc-tools
@@ -226,7 +226,7 @@ fastavro==1.12.2
# -r requirements/base.in
# confluent-kafka
# openedx-events
-filelock==3.29.4
+filelock==3.32.0
# via snowflake-connector-python
idna==3.18
# via
@@ -271,7 +271,7 @@ packaging==26.2
# drf-yasg
# kombu
# snowflake-connector-python
-platformdirs==4.10.0
+platformdirs==4.11.0
# via snowflake-connector-python
ply==3.11
# via djangoql
@@ -343,7 +343,7 @@ rpds-py==2026.6.3
# referencing
rules==3.5
# via -r requirements/base.in
-s3transfer==0.19.0
+s3transfer==0.19.2
# via boto3
semantic-version==2.10.0
# via edx-drf-extensions
@@ -355,14 +355,16 @@ six==1.17.0
# edx-django-release-util
# edx-rbac
# python-dateutil
-snowflake-connector-python==4.7.0
+snowflake-connector-python==4.7.1
# via -r requirements/base.in
social-auth-app-django==5.9.0
# via
+ # -c requirements/common_constraints.txt
# -c requirements/constraints.txt
# edx-auth-backends
social-auth-core==4.9.1
# via
+ # -c requirements/common_constraints.txt
# -c requirements/constraints.txt
# edx-auth-backends
# social-auth-app-django
@@ -375,11 +377,11 @@ stevedore==5.9.0
# code-annotations
# edx-django-utils
# edx-opaque-keys
-stripe==15.3.0
+stripe==15.3.1
# via -r requirements/base.in
text-unidecode==1.3
# via python-slugify
-tomlkit==0.15.0
+tomlkit==0.15.1
# via snowflake-connector-python
typing-extensions==4.16.0
# via
@@ -390,7 +392,7 @@ typing-extensions==4.16.0
# referencing
# snowflake-connector-python
# stripe
-tzdata==2026.2
+tzdata==2026.3
# via kombu
tzlocal==5.4.4
# via celery
diff --git a/requirements/common_constraints.txt b/requirements/common_constraints.txt
index 367be40f..e13dd441 100644
--- a/requirements/common_constraints.txt
+++ b/requirements/common_constraints.txt
@@ -19,3 +19,9 @@ Django<6.0
# 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
+
+# 2026-07-06: Constrain social-auth-* packages to the latest version compatible with
+# edx-drf-extensions<=10.6.0. (Newer versions require a POST instead of a GET.)
+# Tracking issue: https://github.com/openedx/edx-drf-extensions/issues/561
+social-auth-app-django<6.0.0
+social-auth-core<5.0.0
diff --git a/requirements/dev.txt b/requirements/dev.txt
index a745fc97..85f429e7 100644
--- a/requirements/dev.txt
+++ b/requirements/dev.txt
@@ -12,7 +12,7 @@ amqp==5.3.1
# kombu
analytics-python==1.4.post1
# via -r requirements/validation.txt
-asgiref==3.11.1
+asgiref==3.12.1
# via
# -r requirements/validation.txt
# django
@@ -47,11 +47,11 @@ billiard==4.2.4
# via
# -r requirements/validation.txt
# celery
-boto3==1.43.40
+boto3==1.43.55
# via
# -r requirements/validation.txt
# snowflake-connector-python
-botocore==1.43.40
+botocore==1.43.55
# via
# -r requirements/validation.txt
# boto3
@@ -61,7 +61,7 @@ build==1.5.0
# via
# -r requirements/pip-tools.txt
# pip-tools
-cachetools==7.1.4
+cachetools==7.1.6
# via
# -r requirements/validation.txt
# tox
@@ -72,19 +72,19 @@ celery==5.6.3
# -r requirements/validation.txt
# django-celery-results
# edx-celeryutils
-certifi==2026.6.17
+certifi==2026.7.22
# via
# -r requirements/validation.txt
# requests
# snowflake-connector-python
-cffi==2.0.0
+cffi==2.1.0
# via
# -r requirements/validation.txt
# cryptography
# pynacl
chardet==7.4.3
# via diff-cover
-charset-normalizer==3.4.7
+charset-normalizer==3.4.9
# via
# -r requirements/validation.txt
# requests
@@ -129,7 +129,7 @@ colorama==0.4.6
# tox
confluent-kafka[avro,schema-registry]==2.6.1
# via -r requirements/validation.txt
-coverage[toml]==7.15.0
+coverage[toml]==7.15.2
# via
# -r requirements/validation.txt
# pytest-cov
@@ -150,11 +150,11 @@ defusedxml==0.7.1
# -r requirements/validation.txt
# python3-openid
# social-auth-core
-dictdiffer==0.9.0
+dictdiffer==0.10.0
# via
# -r requirements/validation.txt
# pytest-dictsdiff
-diff-cover==10.3.0
+diff-cover==10.4.0
# via -r requirements/dev.in
dill==0.4.1
# via
@@ -164,7 +164,7 @@ distlib==0.4.3
# via
# -r requirements/validation.txt
# virtualenv
-django==5.2.15
+django==5.2.16
# via
# -r requirements/validation.txt
# crispy-bootstrap5
@@ -219,7 +219,7 @@ django-dynamic-fixture==4.0.1
# via -r requirements/validation.txt
django-extensions==4.1
# via -r requirements/validation.txt
-django-filter==25.2
+django-filter==26.1
# via -r requirements/validation.txt
django-log-request-id==2.1.2
# via -r requirements/validation.txt
@@ -230,7 +230,7 @@ django-model-utils==5.0.0
# edx-rbac
django-object-actions==5.1.2
# via -r requirements/validation.txt
-django-simple-history==3.12.0
+django-simple-history==3.13.0
# via -r requirements/validation.txt
django-test-migrations==1.5.0
# via -r requirements/validation.txt
@@ -265,7 +265,7 @@ drf-jwt==1.19.2
# via
# -r requirements/validation.txt
# edx-drf-extensions
-drf-spectacular==0.29.0
+drf-spectacular==0.30.0
# via -r requirements/validation.txt
drf-yasg==1.21.15
# via
@@ -323,7 +323,7 @@ edx-toggles==6.0.0
# edx-event-bus-kafka
factory-boy==3.3.3
# via -r requirements/validation.txt
-faker==40.28.1
+faker==40.35.0
# via
# -r requirements/validation.txt
# factory-boy
@@ -332,7 +332,7 @@ fastavro==1.12.2
# -r requirements/validation.txt
# confluent-kafka
# openedx-events
-filelock==3.29.4
+filelock==3.32.0
# via
# -r requirements/validation.txt
# python-discovery
@@ -371,7 +371,7 @@ jaraco-context==6.1.2
# via
# -r requirements/validation.txt
# keyring
-jaraco-functools==4.5.0
+jaraco-functools==4.6.0
# via
# -r requirements/validation.txt
# keyring
@@ -475,9 +475,9 @@ packaging==26.2
# wheel
path==16.16.0
# via edx-i18n-tools
-pip-tools==7.5.3
+pip-tools==7.6.0
# via -r requirements/pip-tools.txt
-platformdirs==4.10.0
+platformdirs==4.11.0
# via
# -r requirements/validation.txt
# pylint
@@ -541,7 +541,7 @@ pylint-celery==0.3
# via
# -r requirements/validation.txt
# edx-lint
-pylint-django==2.7.0
+pylint-django==2.8.0
# via
# -r requirements/validation.txt
# edx-lint
@@ -564,7 +564,7 @@ pyopenssl==26.3.0
# via
# -r requirements/validation.txt
# snowflake-connector-python
-pyproject-api==1.10.1
+pyproject-api==1.11.0
# via
# -r requirements/validation.txt
# tox
@@ -593,7 +593,7 @@ python-dateutil==2.9.0.post0
# botocore
# celery
# freezegun
-python-discovery==1.4.2
+python-discovery==1.5.0
# via
# -r requirements/validation.txt
# tox
@@ -666,7 +666,7 @@ rpds-py==2026.6.3
# referencing
rules==3.5
# via -r requirements/validation.txt
-s3transfer==0.19.0
+s3transfer==0.19.2
# via
# -r requirements/validation.txt
# boto3
@@ -692,7 +692,7 @@ snowballstemmer==3.1.1
# via
# -r requirements/validation.txt
# pydocstyle
-snowflake-connector-python==4.7.0
+snowflake-connector-python==4.7.1
# via -r requirements/validation.txt
social-auth-app-django==5.9.0
# via
@@ -718,7 +718,7 @@ stevedore==5.9.0
# code-annotations
# edx-django-utils
# edx-opaque-keys
-stripe==15.3.0
+stripe==15.3.1
# via -r requirements/validation.txt
text-unidecode==1.3
# via
@@ -728,13 +728,13 @@ tomli-w==1.2.0
# via
# -r requirements/validation.txt
# tox
-tomlkit==0.15.0
+tomlkit==0.15.1
# via
# -r requirements/validation.txt
# edx-lint
# pylint
# snowflake-connector-python
-tox==4.56.1
+tox==4.58.0
# via -r requirements/validation.txt
twine==6.2.0
# via -r requirements/validation.txt
@@ -750,7 +750,7 @@ typing-extensions==4.16.0
# referencing
# snowflake-connector-python
# stripe
-tzdata==2026.2
+tzdata==2026.3
# via
# -r requirements/validation.txt
# kombu
@@ -776,7 +776,7 @@ vine==5.1.0
# amqp
# celery
# kombu
-virtualenv==21.5.1
+virtualenv==21.7.0
# via
# -r requirements/validation.txt
# tox
diff --git a/requirements/django.txt b/requirements/django.txt
index f480bed0..bdfb6f12 100644
--- a/requirements/django.txt
+++ b/requirements/django.txt
@@ -1 +1 @@
-django==5.2.15
+django==5.2.16
diff --git a/requirements/doc.txt b/requirements/doc.txt
index 3149a155..34315601 100644
--- a/requirements/doc.txt
+++ b/requirements/doc.txt
@@ -16,7 +16,7 @@ amqp==5.3.1
# kombu
analytics-python==1.4.post1
# via -r requirements/test.txt
-asgiref==3.11.1
+asgiref==3.12.1
# via
# -r requirements/test.txt
# django
@@ -57,17 +57,17 @@ billiard==4.2.4
# via
# -r requirements/test.txt
# celery
-boto3==1.43.40
+boto3==1.43.55
# via
# -r requirements/test.txt
# snowflake-connector-python
-botocore==1.43.40
+botocore==1.43.55
# via
# -r requirements/test.txt
# boto3
# s3transfer
# snowflake-connector-python
-cachetools==7.1.4
+cachetools==7.1.6
# via
# -r requirements/test.txt
# tox
@@ -78,17 +78,17 @@ celery==5.6.3
# -r requirements/test.txt
# django-celery-results
# edx-celeryutils
-certifi==2026.6.17
+certifi==2026.7.22
# via
# -r requirements/test.txt
# requests
# snowflake-connector-python
-cffi==2.0.0
+cffi==2.1.0
# via
# -r requirements/test.txt
# cryptography
# pynacl
-charset-normalizer==3.4.7
+charset-normalizer==3.4.9
# via
# -r requirements/test.txt
# requests
@@ -133,7 +133,7 @@ confluent-kafka[avro,schema-registry]==2.6.1
# via
# -c requirements/constraints.txt
# -r requirements/test.txt
-coverage[toml]==7.15.0
+coverage[toml]==7.15.2
# via
# -r requirements/test.txt
# pytest-cov
@@ -153,7 +153,7 @@ defusedxml==0.7.1
# -r requirements/test.txt
# python3-openid
# social-auth-core
-dictdiffer==0.9.0
+dictdiffer==0.10.0
# via
# -r requirements/test.txt
# pytest-dictsdiff
@@ -165,7 +165,7 @@ distlib==0.4.3
# via
# -r requirements/test.txt
# virtualenv
-django==5.2.15
+django==5.2.16
# via
# -c requirements/common_constraints.txt
# -r requirements/test.txt
@@ -217,7 +217,7 @@ django-dynamic-fixture==4.0.1
# via -r requirements/test.txt
django-extensions==4.1
# via -r requirements/test.txt
-django-filter==25.2
+django-filter==26.1
# via -r requirements/test.txt
django-log-request-id==2.1.2
# via -r requirements/test.txt
@@ -228,7 +228,7 @@ django-model-utils==5.0.0
# edx-rbac
django-object-actions==5.1.2
# via -r requirements/test.txt
-django-simple-history==3.12.0
+django-simple-history==3.13.0
# via -r requirements/test.txt
django-test-migrations==1.5.0
# via -r requirements/test.txt
@@ -268,7 +268,7 @@ drf-jwt==1.19.2
# via
# -r requirements/test.txt
# edx-drf-extensions
-drf-spectacular==0.29.0
+drf-spectacular==0.30.0
# via -r requirements/test.txt
drf-yasg==1.21.15
# via
@@ -326,7 +326,7 @@ edx-toggles==6.0.0
# edx-event-bus-kafka
factory-boy==3.3.3
# via -r requirements/test.txt
-faker==40.28.1
+faker==40.35.0
# via
# -r requirements/test.txt
# factory-boy
@@ -335,7 +335,7 @@ fastavro==1.12.2
# -r requirements/test.txt
# confluent-kafka
# openedx-events
-filelock==3.29.4
+filelock==3.32.0
# via
# -r requirements/test.txt
# python-discovery
@@ -368,6 +368,7 @@ jinja2==3.1.6
# via
# -r requirements/test.txt
# code-annotations
+ # pydata-sphinx-theme
# sphinx
jmespath==1.1.0
# via
@@ -427,7 +428,7 @@ packaging==26.2
# snowflake-connector-python
# sphinx
# tox
-platformdirs==4.10.0
+platformdirs==4.11.0
# via
# -r requirements/test.txt
# pylint
@@ -457,7 +458,7 @@ pycparser==3.0
# via
# -r requirements/test.txt
# cffi
-pydata-sphinx-theme==0.16.1
+pydata-sphinx-theme==0.20.0
# via sphinx-book-theme
pygments==2.20.0
# via
@@ -488,7 +489,7 @@ pylint-celery==0.3
# via
# -r requirements/test.txt
# edx-lint
-pylint-django==2.7.0
+pylint-django==2.8.0
# via
# -r requirements/test.txt
# edx-lint
@@ -511,7 +512,7 @@ pyopenssl==26.3.0
# via
# -r requirements/test.txt
# snowflake-connector-python
-pyproject-api==1.10.1
+pyproject-api==1.11.0
# via
# -r requirements/test.txt
# tox
@@ -533,7 +534,7 @@ python-dateutil==2.9.0.post0
# botocore
# celery
# freezegun
-python-discovery==1.4.2
+python-discovery==1.5.0
# via
# -r requirements/test.txt
# tox
@@ -574,6 +575,7 @@ requests==2.34.2
# confluent-kafka
# edx-drf-extensions
# edx-rest-api-client
+ # pydata-sphinx-theme
# requests-oauthlib
# snowflake-connector-python
# social-auth-core
@@ -594,7 +596,7 @@ rpds-py==2026.6.3
# referencing
rules==3.5
# via -r requirements/test.txt
-s3transfer==0.19.0
+s3transfer==0.19.2
# via
# -r requirements/test.txt
# boto3
@@ -614,15 +616,17 @@ six==1.17.0
# python-dateutil
snowballstemmer==3.1.1
# via sphinx
-snowflake-connector-python==4.7.0
+snowflake-connector-python==4.7.1
# via -r requirements/test.txt
social-auth-app-django==5.9.0
# via
+ # -c requirements/common_constraints.txt
# -c requirements/constraints.txt
# -r requirements/test.txt
# edx-auth-backends
social-auth-core==4.9.1
# via
+ # -c requirements/common_constraints.txt
# -c requirements/constraints.txt
# -r requirements/test.txt
# edx-auth-backends
@@ -631,14 +635,14 @@ sortedcontainers==2.4.0
# via
# -r requirements/test.txt
# snowflake-connector-python
-soupsieve==2.8.4
+soupsieve==2.9.1
# via beautifulsoup4
sphinx==9.1.0
# via
# -r requirements/doc.in
# pydata-sphinx-theme
# sphinx-book-theme
-sphinx-book-theme==1.2.0
+sphinx-book-theme==1.4.0
# via -r requirements/doc.in
sphinxcontrib-applehelp==2.0.0
# via sphinx
@@ -663,7 +667,7 @@ stevedore==5.9.0
# doc8
# edx-django-utils
# edx-opaque-keys
-stripe==15.3.0
+stripe==15.3.1
# via -r requirements/test.txt
text-unidecode==1.3
# via
@@ -673,13 +677,13 @@ tomli-w==1.2.0
# via
# -r requirements/test.txt
# tox
-tomlkit==0.15.0
+tomlkit==0.15.1
# via
# -r requirements/test.txt
# edx-lint
# pylint
# snowflake-connector-python
-tox==4.56.1
+tox==4.58.0
# via -r requirements/test.txt
typing-extensions==4.16.0
# via
@@ -689,12 +693,11 @@ typing-extensions==4.16.0
# django-countries
# django-test-migrations
# edx-opaque-keys
- # pydata-sphinx-theme
# pyopenssl
# referencing
# snowflake-connector-python
# stripe
-tzdata==2026.2
+tzdata==2026.3
# via
# -r requirements/test.txt
# kombu
@@ -718,7 +721,7 @@ vine==5.1.0
# amqp
# celery
# kombu
-virtualenv==21.5.1
+virtualenv==21.7.0
# via
# -r requirements/test.txt
# tox
diff --git a/requirements/pip-tools.txt b/requirements/pip-tools.txt
index a082bfca..20aa67f1 100644
--- a/requirements/pip-tools.txt
+++ b/requirements/pip-tools.txt
@@ -12,7 +12,7 @@ packaging==26.2
# via
# build
# wheel
-pip-tools==7.5.3
+pip-tools==7.6.0
# via -r requirements/pip-tools.in
pyproject-hooks==1.2.0
# via
diff --git a/requirements/pip.txt b/requirements/pip.txt
index f3c15550..d7766d39 100644
--- a/requirements/pip.txt
+++ b/requirements/pip.txt
@@ -12,5 +12,5 @@ wheel==0.47.0
# The following packages are considered to be unsafe in a requirements file:
pip==26.1.2
# via -r requirements/pip.in
-setuptools==82.0.1
+setuptools==83.0.0
# via -r requirements/pip.in
diff --git a/requirements/production.txt b/requirements/production.txt
index b9f41bec..5d1e5ee2 100644
--- a/requirements/production.txt
+++ b/requirements/production.txt
@@ -12,7 +12,7 @@ amqp==5.3.1
# kombu
analytics-python==1.4.post1
# via -r requirements/base.txt
-asgiref==3.11.1
+asgiref==3.12.1
# via
# -r requirements/base.txt
# django
@@ -42,11 +42,11 @@ billiard==4.2.4
# via
# -r requirements/base.txt
# celery
-boto3==1.43.40
+boto3==1.43.55
# via
# -r requirements/base.txt
# snowflake-connector-python
-botocore==1.43.40
+botocore==1.43.55
# via
# -r requirements/base.txt
# boto3
@@ -59,17 +59,17 @@ celery==5.6.3
# -r requirements/base.txt
# django-celery-results
# edx-celeryutils
-certifi==2026.6.17
+certifi==2026.7.22
# via
# -r requirements/base.txt
# requests
# snowflake-connector-python
-cffi==2.0.0
+cffi==2.1.0
# via
# -r requirements/base.txt
# cryptography
# pynacl
-charset-normalizer==3.4.7
+charset-normalizer==3.4.9
# via
# -r requirements/base.txt
# requests
@@ -115,7 +115,7 @@ defusedxml==0.7.1
# -r requirements/base.txt
# python3-openid
# social-auth-core
-django==5.2.15
+django==5.2.16
# via
# -r requirements/base.txt
# crispy-bootstrap5
@@ -164,7 +164,7 @@ django-crum==0.7.9
# edx-toggles
django-extensions==4.1
# via -r requirements/base.txt
-django-filter==25.2
+django-filter==26.1
# via -r requirements/base.txt
django-log-request-id==2.1.2
# via -r requirements/base.txt
@@ -175,7 +175,7 @@ django-model-utils==5.0.0
# edx-rbac
django-object-actions==5.1.2
# via -r requirements/base.txt
-django-simple-history==3.12.0
+django-simple-history==3.13.0
# via -r requirements/base.txt
django-waffle==5.0.0
# via
@@ -204,7 +204,7 @@ drf-jwt==1.19.2
# via
# -r requirements/base.txt
# edx-drf-extensions
-drf-spectacular==0.29.0
+drf-spectacular==0.30.0
# via -r requirements/base.txt
drf-yasg==1.21.15
# via
@@ -261,13 +261,13 @@ fastavro==1.12.2
# -r requirements/base.txt
# confluent-kafka
# openedx-events
-filelock==3.29.4
+filelock==3.32.0
# via
# -r requirements/base.txt
# snowflake-connector-python
-gevent==26.5.0
+gevent==26.7.0
# via -r requirements/production.in
-greenlet==3.5.3
+greenlet==3.5.4
# via gevent
gunicorn==26.0.0
# via -r requirements/production.in
@@ -336,7 +336,7 @@ packaging==26.2
# gunicorn
# kombu
# snowflake-connector-python
-platformdirs==4.10.0
+platformdirs==4.11.0
# via
# -r requirements/base.txt
# snowflake-connector-python
@@ -439,7 +439,7 @@ rpds-py==2026.6.3
# referencing
rules==3.5
# via -r requirements/base.txt
-s3transfer==0.19.0
+s3transfer==0.19.2
# via
# -r requirements/base.txt
# boto3
@@ -456,7 +456,7 @@ six==1.17.0
# edx-django-release-util
# edx-rbac
# python-dateutil
-snowflake-connector-python==4.7.0
+snowflake-connector-python==4.7.1
# via -r requirements/base.txt
social-auth-app-django==5.9.0
# via
@@ -481,13 +481,13 @@ stevedore==5.9.0
# code-annotations
# edx-django-utils
# edx-opaque-keys
-stripe==15.3.0
+stripe==15.3.1
# via -r requirements/base.txt
text-unidecode==1.3
# via
# -r requirements/base.txt
# python-slugify
-tomlkit==0.15.0
+tomlkit==0.15.1
# via
# -r requirements/base.txt
# snowflake-connector-python
@@ -501,7 +501,7 @@ typing-extensions==4.16.0
# referencing
# snowflake-connector-python
# stripe
-tzdata==2026.2
+tzdata==2026.3
# via
# -r requirements/base.txt
# kombu
diff --git a/requirements/quality.txt b/requirements/quality.txt
index a1385d5f..bdb2ab66 100644
--- a/requirements/quality.txt
+++ b/requirements/quality.txt
@@ -12,7 +12,7 @@ amqp==5.3.1
# kombu
analytics-python==1.4.post1
# via -r requirements/test.txt
-asgiref==3.11.1
+asgiref==3.12.1
# via
# -r requirements/test.txt
# django
@@ -47,17 +47,17 @@ billiard==4.2.4
# via
# -r requirements/test.txt
# celery
-boto3==1.43.40
+boto3==1.43.55
# via
# -r requirements/test.txt
# snowflake-connector-python
-botocore==1.43.40
+botocore==1.43.55
# via
# -r requirements/test.txt
# boto3
# s3transfer
# snowflake-connector-python
-cachetools==7.1.4
+cachetools==7.1.6
# via
# -r requirements/test.txt
# tox
@@ -68,17 +68,17 @@ celery==5.6.3
# -r requirements/test.txt
# django-celery-results
# edx-celeryutils
-certifi==2026.6.17
+certifi==2026.7.22
# via
# -r requirements/test.txt
# requests
# snowflake-connector-python
-cffi==2.0.0
+cffi==2.1.0
# via
# -r requirements/test.txt
# cryptography
# pynacl
-charset-normalizer==3.4.7
+charset-normalizer==3.4.9
# via
# -r requirements/test.txt
# requests
@@ -123,7 +123,7 @@ confluent-kafka[avro,schema-registry]==2.6.1
# via
# -c requirements/constraints.txt
# -r requirements/test.txt
-coverage[toml]==7.15.0
+coverage[toml]==7.15.2
# via
# -r requirements/test.txt
# pytest-cov
@@ -144,7 +144,7 @@ defusedxml==0.7.1
# -r requirements/test.txt
# python3-openid
# social-auth-core
-dictdiffer==0.9.0
+dictdiffer==0.10.0
# via
# -r requirements/test.txt
# pytest-dictsdiff
@@ -156,7 +156,7 @@ distlib==0.4.3
# via
# -r requirements/test.txt
# virtualenv
-django==5.2.15
+django==5.2.16
# via
# -c requirements/common_constraints.txt
# -r requirements/test.txt
@@ -208,7 +208,7 @@ django-dynamic-fixture==4.0.1
# via -r requirements/test.txt
django-extensions==4.1
# via -r requirements/test.txt
-django-filter==25.2
+django-filter==26.1
# via -r requirements/test.txt
django-log-request-id==2.1.2
# via -r requirements/test.txt
@@ -219,7 +219,7 @@ django-model-utils==5.0.0
# edx-rbac
django-object-actions==5.1.2
# via -r requirements/test.txt
-django-simple-history==3.12.0
+django-simple-history==3.13.0
# via -r requirements/test.txt
django-test-migrations==1.5.0
# via -r requirements/test.txt
@@ -252,7 +252,7 @@ drf-jwt==1.19.2
# via
# -r requirements/test.txt
# edx-drf-extensions
-drf-spectacular==0.29.0
+drf-spectacular==0.30.0
# via -r requirements/test.txt
drf-yasg==1.21.15
# via
@@ -312,7 +312,7 @@ edx-toggles==6.0.0
# edx-event-bus-kafka
factory-boy==3.3.3
# via -r requirements/test.txt
-faker==40.28.1
+faker==40.35.0
# via
# -r requirements/test.txt
# factory-boy
@@ -321,7 +321,7 @@ fastavro==1.12.2
# -r requirements/test.txt
# confluent-kafka
# openedx-events
-filelock==3.29.4
+filelock==3.32.0
# via
# -r requirements/test.txt
# python-discovery
@@ -355,7 +355,7 @@ jaraco-classes==3.4.0
# via keyring
jaraco-context==6.1.2
# via keyring
-jaraco-functools==4.5.0
+jaraco-functools==4.6.0
# via keyring
jeepney==0.9.0
# via
@@ -433,7 +433,7 @@ packaging==26.2
# snowflake-connector-python
# tox
# twine
-platformdirs==4.10.0
+platformdirs==4.11.0
# via
# -r requirements/test.txt
# pylint
@@ -493,7 +493,7 @@ pylint-celery==0.3
# via
# -r requirements/test.txt
# edx-lint
-pylint-django==2.7.0
+pylint-django==2.8.0
# via
# -r requirements/test.txt
# edx-lint
@@ -516,7 +516,7 @@ pyopenssl==26.3.0
# via
# -r requirements/test.txt
# snowflake-connector-python
-pyproject-api==1.10.1
+pyproject-api==1.11.0
# via
# -r requirements/test.txt
# tox
@@ -538,7 +538,7 @@ python-dateutil==2.9.0.post0
# botocore
# celery
# freezegun
-python-discovery==1.4.2
+python-discovery==1.5.0
# via
# -r requirements/test.txt
# tox
@@ -602,7 +602,7 @@ rpds-py==2026.6.3
# referencing
rules==3.5
# via -r requirements/test.txt
-s3transfer==0.19.0
+s3transfer==0.19.2
# via
# -r requirements/test.txt
# boto3
@@ -624,15 +624,17 @@ six==1.17.0
# python-dateutil
snowballstemmer==3.1.1
# via pydocstyle
-snowflake-connector-python==4.7.0
+snowflake-connector-python==4.7.1
# via -r requirements/test.txt
social-auth-app-django==5.9.0
# via
+ # -c requirements/common_constraints.txt
# -c requirements/constraints.txt
# -r requirements/test.txt
# edx-auth-backends
social-auth-core==4.9.1
# via
+ # -c requirements/common_constraints.txt
# -c requirements/constraints.txt
# -r requirements/test.txt
# edx-auth-backends
@@ -651,7 +653,7 @@ stevedore==5.9.0
# code-annotations
# edx-django-utils
# edx-opaque-keys
-stripe==15.3.0
+stripe==15.3.1
# via -r requirements/test.txt
text-unidecode==1.3
# via
@@ -661,13 +663,13 @@ tomli-w==1.2.0
# via
# -r requirements/test.txt
# tox
-tomlkit==0.15.0
+tomlkit==0.15.1
# via
# -r requirements/test.txt
# edx-lint
# pylint
# snowflake-connector-python
-tox==4.56.1
+tox==4.58.0
# via -r requirements/test.txt
twine==6.2.0
# via -r requirements/quality.in
@@ -682,7 +684,7 @@ typing-extensions==4.16.0
# referencing
# snowflake-connector-python
# stripe
-tzdata==2026.2
+tzdata==2026.3
# via
# -r requirements/test.txt
# kombu
@@ -708,7 +710,7 @@ vine==5.1.0
# amqp
# celery
# kombu
-virtualenv==21.5.1
+virtualenv==21.7.0
# via
# -r requirements/test.txt
# tox
diff --git a/requirements/test.txt b/requirements/test.txt
index b9384703..6192b9ae 100644
--- a/requirements/test.txt
+++ b/requirements/test.txt
@@ -12,7 +12,7 @@ amqp==5.3.1
# kombu
analytics-python==1.4.post1
# via -r requirements/base.txt
-asgiref==3.11.1
+asgiref==3.12.1
# via
# -r requirements/base.txt
# django
@@ -46,17 +46,17 @@ billiard==4.2.4
# via
# -r requirements/base.txt
# celery
-boto3==1.43.40
+boto3==1.43.55
# via
# -r requirements/base.txt
# snowflake-connector-python
-botocore==1.43.40
+botocore==1.43.55
# via
# -r requirements/base.txt
# boto3
# s3transfer
# snowflake-connector-python
-cachetools==7.1.4
+cachetools==7.1.6
# via tox
cattrs==26.1.0
# via -r requirements/base.txt
@@ -65,17 +65,17 @@ celery==5.6.3
# -r requirements/base.txt
# django-celery-results
# edx-celeryutils
-certifi==2026.6.17
+certifi==2026.7.22
# via
# -r requirements/base.txt
# requests
# snowflake-connector-python
-cffi==2.0.0
+cffi==2.1.0
# via
# -r requirements/base.txt
# cryptography
# pynacl
-charset-normalizer==3.4.7
+charset-normalizer==3.4.9
# via
# -r requirements/base.txt
# requests
@@ -117,7 +117,7 @@ confluent-kafka[avro,schema-registry]==2.6.1
# via
# -c requirements/constraints.txt
# -r requirements/base.txt
-coverage[toml]==7.15.0
+coverage[toml]==7.15.2
# via
# -r requirements/test.in
# pytest-cov
@@ -137,7 +137,7 @@ defusedxml==0.7.1
# -r requirements/base.txt
# python3-openid
# social-auth-core
-dictdiffer==0.9.0
+dictdiffer==0.10.0
# via pytest-dictsdiff
dill==0.4.1
# via pylint
@@ -194,7 +194,7 @@ django-dynamic-fixture==4.0.1
# via -r requirements/test.in
django-extensions==4.1
# via -r requirements/base.txt
-django-filter==25.2
+django-filter==26.1
# via -r requirements/base.txt
django-log-request-id==2.1.2
# via -r requirements/base.txt
@@ -205,7 +205,7 @@ django-model-utils==5.0.0
# edx-rbac
django-object-actions==5.1.2
# via -r requirements/base.txt
-django-simple-history==3.12.0
+django-simple-history==3.13.0
# via -r requirements/base.txt
django-test-migrations==1.5.0
# via -r requirements/test.in
@@ -236,7 +236,7 @@ drf-jwt==1.19.2
# via
# -r requirements/base.txt
# edx-drf-extensions
-drf-spectacular==0.29.0
+drf-spectacular==0.30.0
# via -r requirements/base.txt
drf-yasg==1.21.15
# via
@@ -294,14 +294,14 @@ edx-toggles==6.0.0
# edx-event-bus-kafka
factory-boy==3.3.3
# via -r requirements/test.in
-faker==40.28.1
+faker==40.35.0
# via factory-boy
fastavro==1.12.2
# via
# -r requirements/base.txt
# confluent-kafka
# openedx-events
-filelock==3.29.4
+filelock==3.32.0
# via
# -r requirements/base.txt
# python-discovery
@@ -381,7 +381,7 @@ packaging==26.2
# pytest
# snowflake-connector-python
# tox
-platformdirs==4.10.0
+platformdirs==4.11.0
# via
# -r requirements/base.txt
# pylint
@@ -431,7 +431,7 @@ pylint==4.0.6
# pylint-plugin-utils
pylint-celery==0.3
# via edx-lint
-pylint-django==2.7.0
+pylint-django==2.8.0
# via edx-lint
pylint-plugin-utils==0.9.0
# via
@@ -451,7 +451,7 @@ pyopenssl==26.3.0
# via
# -r requirements/base.txt
# snowflake-connector-python
-pyproject-api==1.10.1
+pyproject-api==1.11.0
# via tox
pytest==9.1.1
# via
@@ -470,7 +470,7 @@ python-dateutil==2.9.0.post0
# botocore
# celery
# freezegun
-python-discovery==1.4.2
+python-discovery==1.5.0
# via
# tox
# virtualenv
@@ -523,7 +523,7 @@ rpds-py==2026.6.3
# referencing
rules==3.5
# via -r requirements/base.txt
-s3transfer==0.19.0
+s3transfer==0.19.2
# via
# -r requirements/base.txt
# boto3
@@ -541,15 +541,17 @@ six==1.17.0
# edx-lint
# edx-rbac
# python-dateutil
-snowflake-connector-python==4.7.0
+snowflake-connector-python==4.7.1
# via -r requirements/base.txt
social-auth-app-django==5.9.0
# via
+ # -c requirements/common_constraints.txt
# -c requirements/constraints.txt
# -r requirements/base.txt
# edx-auth-backends
social-auth-core==4.9.1
# via
+ # -c requirements/common_constraints.txt
# -c requirements/constraints.txt
# -r requirements/base.txt
# edx-auth-backends
@@ -568,7 +570,7 @@ stevedore==5.9.0
# code-annotations
# edx-django-utils
# edx-opaque-keys
-stripe==15.3.0
+stripe==15.3.1
# via -r requirements/base.txt
text-unidecode==1.3
# via
@@ -576,13 +578,13 @@ text-unidecode==1.3
# python-slugify
tomli-w==1.2.0
# via tox
-tomlkit==0.15.0
+tomlkit==0.15.1
# via
# -r requirements/base.txt
# edx-lint
# pylint
# snowflake-connector-python
-tox==4.56.1
+tox==4.58.0
# via -r requirements/test.in
typing-extensions==4.16.0
# via
@@ -595,7 +597,7 @@ typing-extensions==4.16.0
# referencing
# snowflake-connector-python
# stripe
-tzdata==2026.2
+tzdata==2026.3
# via
# -r requirements/base.txt
# kombu
@@ -619,7 +621,7 @@ vine==5.1.0
# amqp
# celery
# kombu
-virtualenv==21.5.1
+virtualenv==21.7.0
# via tox
wcwidth==0.8.2
# via
diff --git a/requirements/validation.txt b/requirements/validation.txt
index dcac2488..c73ace87 100644
--- a/requirements/validation.txt
+++ b/requirements/validation.txt
@@ -17,7 +17,7 @@ analytics-python==1.4.post1
# via
# -r requirements/quality.txt
# -r requirements/test.txt
-asgiref==3.11.1
+asgiref==3.12.1
# via
# -r requirements/quality.txt
# -r requirements/test.txt
@@ -59,19 +59,19 @@ billiard==4.2.4
# -r requirements/quality.txt
# -r requirements/test.txt
# celery
-boto3==1.43.40
+boto3==1.43.55
# via
# -r requirements/quality.txt
# -r requirements/test.txt
# snowflake-connector-python
-botocore==1.43.40
+botocore==1.43.55
# via
# -r requirements/quality.txt
# -r requirements/test.txt
# boto3
# s3transfer
# snowflake-connector-python
-cachetools==7.1.4
+cachetools==7.1.6
# via
# -r requirements/quality.txt
# -r requirements/test.txt
@@ -86,19 +86,19 @@ celery==5.6.3
# -r requirements/test.txt
# django-celery-results
# edx-celeryutils
-certifi==2026.6.17
+certifi==2026.7.22
# via
# -r requirements/quality.txt
# -r requirements/test.txt
# requests
# snowflake-connector-python
-cffi==2.0.0
+cffi==2.1.0
# via
# -r requirements/quality.txt
# -r requirements/test.txt
# cryptography
# pynacl
-charset-normalizer==3.4.7
+charset-normalizer==3.4.9
# via
# -r requirements/quality.txt
# -r requirements/test.txt
@@ -151,7 +151,7 @@ confluent-kafka[avro,schema-registry]==2.6.1
# via
# -r requirements/quality.txt
# -r requirements/test.txt
-coverage[toml]==7.15.0
+coverage[toml]==7.15.2
# via
# -r requirements/quality.txt
# -r requirements/test.txt
@@ -179,7 +179,7 @@ defusedxml==0.7.1
# -r requirements/test.txt
# python3-openid
# social-auth-core
-dictdiffer==0.9.0
+dictdiffer==0.10.0
# via
# -r requirements/quality.txt
# -r requirements/test.txt
@@ -194,7 +194,7 @@ distlib==0.4.3
# -r requirements/quality.txt
# -r requirements/test.txt
# virtualenv
-django==5.2.15
+django==5.2.16
# via
# -r requirements/quality.txt
# -r requirements/test.txt
@@ -258,7 +258,7 @@ django-extensions==4.1
# via
# -r requirements/quality.txt
# -r requirements/test.txt
-django-filter==25.2
+django-filter==26.1
# via
# -r requirements/quality.txt
# -r requirements/test.txt
@@ -276,7 +276,7 @@ django-object-actions==5.1.2
# via
# -r requirements/quality.txt
# -r requirements/test.txt
-django-simple-history==3.12.0
+django-simple-history==3.13.0
# via
# -r requirements/quality.txt
# -r requirements/test.txt
@@ -323,7 +323,7 @@ drf-jwt==1.19.2
# -r requirements/quality.txt
# -r requirements/test.txt
# edx-drf-extensions
-drf-spectacular==0.29.0
+drf-spectacular==0.30.0
# via
# -r requirements/quality.txt
# -r requirements/test.txt
@@ -406,7 +406,7 @@ factory-boy==3.3.3
# via
# -r requirements/quality.txt
# -r requirements/test.txt
-faker==40.28.1
+faker==40.35.0
# via
# -r requirements/quality.txt
# -r requirements/test.txt
@@ -417,7 +417,7 @@ fastavro==1.12.2
# -r requirements/test.txt
# confluent-kafka
# openedx-events
-filelock==3.29.4
+filelock==3.32.0
# via
# -r requirements/quality.txt
# -r requirements/test.txt
@@ -463,7 +463,7 @@ jaraco-context==6.1.2
# via
# -r requirements/quality.txt
# keyring
-jaraco-functools==4.5.0
+jaraco-functools==4.6.0
# via
# -r requirements/quality.txt
# keyring
@@ -569,7 +569,7 @@ packaging==26.2
# snowflake-connector-python
# tox
# twine
-platformdirs==4.10.0
+platformdirs==4.11.0
# via
# -r requirements/quality.txt
# -r requirements/test.txt
@@ -639,7 +639,7 @@ pylint-celery==0.3
# -r requirements/quality.txt
# -r requirements/test.txt
# edx-lint
-pylint-django==2.7.0
+pylint-django==2.8.0
# via
# -r requirements/quality.txt
# -r requirements/test.txt
@@ -669,7 +669,7 @@ pyopenssl==26.3.0
# -r requirements/quality.txt
# -r requirements/test.txt
# snowflake-connector-python
-pyproject-api==1.10.1
+pyproject-api==1.11.0
# via
# -r requirements/quality.txt
# -r requirements/test.txt
@@ -700,7 +700,7 @@ python-dateutil==2.9.0.post0
# botocore
# celery
# freezegun
-python-discovery==1.4.2
+python-discovery==1.5.0
# via
# -r requirements/quality.txt
# -r requirements/test.txt
@@ -785,7 +785,7 @@ rules==3.5
# via
# -r requirements/quality.txt
# -r requirements/test.txt
-s3transfer==0.19.0
+s3transfer==0.19.2
# via
# -r requirements/quality.txt
# -r requirements/test.txt
@@ -814,7 +814,7 @@ snowballstemmer==3.1.1
# via
# -r requirements/quality.txt
# pydocstyle
-snowflake-connector-python==4.7.0
+snowflake-connector-python==4.7.1
# via
# -r requirements/quality.txt
# -r requirements/test.txt
@@ -846,7 +846,7 @@ stevedore==5.9.0
# code-annotations
# edx-django-utils
# edx-opaque-keys
-stripe==15.3.0
+stripe==15.3.1
# via
# -r requirements/quality.txt
# -r requirements/test.txt
@@ -860,14 +860,14 @@ tomli-w==1.2.0
# -r requirements/quality.txt
# -r requirements/test.txt
# tox
-tomlkit==0.15.0
+tomlkit==0.15.1
# via
# -r requirements/quality.txt
# -r requirements/test.txt
# edx-lint
# pylint
# snowflake-connector-python
-tox==4.56.1
+tox==4.58.0
# via
# -r requirements/quality.txt
# -r requirements/test.txt
@@ -885,7 +885,7 @@ typing-extensions==4.16.0
# referencing
# snowflake-connector-python
# stripe
-tzdata==2026.2
+tzdata==2026.3
# via
# -r requirements/quality.txt
# -r requirements/test.txt
@@ -916,7 +916,7 @@ vine==5.1.0
# amqp
# celery
# kombu
-virtualenv==21.5.1
+virtualenv==21.7.0
# via
# -r requirements/quality.txt
# -r requirements/test.txt