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