diff --git a/Makefile b/Makefile index 62dca77db..c705b29c8 100644 --- a/Makefile +++ b/Makefile @@ -116,7 +116,7 @@ upgrade: piptools $(COMMON_CONSTRAINTS_TXT) ## update the requirements/*.txt fi sed 's/django-simple-history==3.0.0//g' requirements/common_constraints.txt > requirements/common_constraints.tmp mv requirements/common_constraints.tmp requirements/common_constraints.txt # Make sure to compile files after any other files they include! - sed 's/Django<4.0//g' requirements/common_constraints.txt > tmp_con; cat tmp_con > requirements/common_constraints.txt; rm tmp_con + sed 's/Django<5.0//g' requirements/common_constraints.txt > tmp_con; cat tmp_con > requirements/common_constraints.txt; rm tmp_con pip-compile --allow-unsafe --rebuild --upgrade -o requirements/pip.txt requirements/pip.in pip-compile --upgrade -o requirements/pip-tools.txt requirements/pip-tools.in pip install -qr requirements/pip.txt diff --git a/enterprise_access/apps/subsidy_request/migrations/0015_rename_couponcoderequest_uuid_state_subsidy_req_uuid_8c5efe_idx_and_more.py b/enterprise_access/apps/subsidy_request/migrations/0015_rename_couponcoderequest_uuid_state_subsidy_req_uuid_8c5efe_idx_and_more.py new file mode 100644 index 000000000..c4b416a43 --- /dev/null +++ b/enterprise_access/apps/subsidy_request/migrations/0015_rename_couponcoderequest_uuid_state_subsidy_req_uuid_8c5efe_idx_and_more.py @@ -0,0 +1,43 @@ +# Generated by Django 4.2.21 on 2025-05-26 12:54 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('subsidy_request', '0014_learnercreditrequestconfiguration_and_more'), + ] + + operations = [ + migrations.RenameIndex( + model_name='couponcoderequest', + new_name='subsidy_req_uuid_8c5efe_idx', + old_fields=('uuid', 'state'), + ), + migrations.RenameIndex( + model_name='couponcoderequest', + new_name='subsidy_req_user_id_4e7462_idx', + old_fields=('user', 'enterprise_customer_uuid', 'state', 'course_id'), + ), + migrations.RenameIndex( + model_name='licenserequest', + new_name='subsidy_req_uuid_e19871_idx', + old_fields=('uuid', 'state'), + ), + migrations.RenameIndex( + model_name='licenserequest', + new_name='subsidy_req_user_id_ea0637_idx', + old_fields=('user', 'enterprise_customer_uuid', 'state', 'course_id'), + ), + migrations.AlterField( + model_name='historicalsubsidyrequestcustomerconfiguration', + name='subsidy_type', + field=models.CharField(blank=True, choices=[('license', 'License Subsidy'), ('coupon', 'Coupon Subsidy'), ('learner_credit', 'Learner Credit Subsidy')], help_text='Which type of subsidy is used to grant access.', max_length=32, null=True), + ), + migrations.AlterField( + model_name='subsidyrequestcustomerconfiguration', + name='subsidy_type', + field=models.CharField(blank=True, choices=[('license', 'License Subsidy'), ('coupon', 'Coupon Subsidy'), ('learner_credit', 'Learner Credit Subsidy')], help_text='Which type of subsidy is used to grant access.', max_length=32, null=True), + ), + ] diff --git a/enterprise_access/apps/subsidy_request/models.py b/enterprise_access/apps/subsidy_request/models.py index a5c2bda45..2d76e3e3d 100644 --- a/enterprise_access/apps/subsidy_request/models.py +++ b/enterprise_access/apps/subsidy_request/models.py @@ -132,9 +132,9 @@ def bulk_update(cls, subsidy_requests, field_names, batch_size=SUBSIDY_REQUEST_B class Meta: abstract = True - index_together = [ - ['uuid', 'state'], - ['user', 'enterprise_customer_uuid', 'state', 'course_id'] + indexes = [ + models.Index(fields=['uuid', 'state']), + models.Index(fields=['user', 'enterprise_customer_uuid', 'state', 'course_id']), ] diff --git a/enterprise_access/settings/base.py b/enterprise_access/settings/base.py index f2d9c6a76..39c200631 100644 --- a/enterprise_access/settings/base.py +++ b/enterprise_access/settings/base.py @@ -577,3 +577,16 @@ def root(*path_fragments): CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap5" CRISPY_TEMPLATE_PACK = "bootstrap5" + +STORAGES = { + 'default': { + 'BACKEND': 'django.core.files.storage.FileSystemStorage', + "OPTIONS": { + "location": MEDIA_ROOT, + "base_url": MEDIA_URL, + }, + }, + 'staticfiles': { + 'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage', + }, +} diff --git a/enterprise_access/settings/production.py b/enterprise_access/settings/production.py index 505207f17..b7ce1489f 100644 --- a/enterprise_access/settings/production.py +++ b/enterprise_access/settings/production.py @@ -49,8 +49,16 @@ # Unpack the media and files storage backend settings for django storages. # These dicts are not Django settings themselves, but they contain a mapping # of Django settings. - vars().update(FILE_STORAGE_BACKEND) - vars().update(MEDIA_STORAGE_BACKEND) + STORAGES = { + # this becomes the new DEFAULT_FILE_STORAGE + 'default': MEDIA_STORAGE_BACKEND, + # pick an alias for your “other files” bucket + 'files': FILE_STORAGE_BACKEND, + # you still need staticfiles here too + 'staticfiles': { + 'BACKEND': 'django.contrib.staticfiles.storage.StaticFilesStorage', + }, + } # Must be generated after loading config YAML because LOGGING_FORMAT_STRING might be overridden. LOGGING = get_logger_config(format_string=LOGGING_FORMAT_STRING) diff --git a/license_manager/settings/devstack.py b/license_manager/settings/devstack.py new file mode 100755 index 000000000..e69de29bb diff --git a/requirements/base.txt b/requirements/base.txt index d5ba53250..cb893bc9a 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -76,9 +76,8 @@ defusedxml==0.7.1 # via # python3-openid # social-auth-core -django==4.2.21 +django==5.2.1 # via - # -c requirements/common_constraints.txt # -r requirements/base.in # crispy-bootstrap5 # django-celery-results @@ -299,7 +298,7 @@ pyyaml==6.0.2 # drf-spectacular # drf-yasg # edx-django-release-util -redis==6.1.0 +redis==6.2.0 # via -r requirements/base.in referencing==0.36.2 # via @@ -348,7 +347,7 @@ stevedore==5.4.1 # code-annotations # edx-django-utils # edx-opaque-keys -stripe==12.1.0 +stripe==12.2.0 # via -r requirements/base.in text-unidecode==1.3 # via python-slugify diff --git a/requirements/common_constraints.txt b/requirements/common_constraints.txt index 134b81d77..cdfb63e47 100644 --- a/requirements/common_constraints.txt +++ b/requirements/common_constraints.txt @@ -13,7 +13,7 @@ # this file from Github directly. It does not require packaging in edx-lint. # using LTS django version -Django<5.0 + # elasticsearch>=7.14.0 includes breaking changes in it which caused issues in discovery upgrade process. # elastic search changelog: https://www.elastic.co/guide/en/enterprise-search/master/release-notes-7.14.0.html diff --git a/requirements/constraints.txt b/requirements/constraints.txt index 8ecc7d255..485b0a543 100644 --- a/requirements/constraints.txt +++ b/requirements/constraints.txt @@ -11,9 +11,6 @@ # Common constraints for edx repos -c common_constraints.txt -# For python greater than or equal to 3.9 backports.zoneinfo causing failures -backports.zoneinfo; python_version<'3.9' - # confluent-kafka 2.7.0 increased CPU usage confluent-kafka<2.6.2 diff --git a/requirements/dev.txt b/requirements/dev.txt index e5805c6ea..df0c8c2e5 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -132,7 +132,6 @@ cryptography==45.0.3 # via # -r requirements/validation.txt # pyjwt - # secretstorage # social-auth-core ddt==1.7.2 # via -r requirements/validation.txt @@ -155,7 +154,7 @@ distlib==0.3.9 # via # -r requirements/validation.txt # virtualenv -django==4.2.21 +django==5.2.1 # via # -r requirements/validation.txt # crispy-bootstrap5 @@ -368,11 +367,6 @@ jaraco-functools==4.1.0 # via # -r requirements/validation.txt # keyring -jeepney==0.9.0 - # via - # -r requirements/validation.txt - # keyring - # secretstorage jinja2==3.1.6 # via # -r requirements/validation.txt @@ -597,7 +591,7 @@ readme-renderer==44.0 # via # -r requirements/validation.txt # twine -redis==6.1.0 +redis==6.2.0 # via -r requirements/validation.txt referencing==0.36.2 # via @@ -641,10 +635,6 @@ rpds-py==0.25.1 # referencing rules==3.5 # via -r requirements/validation.txt -secretstorage==3.3.3 - # via - # -r requirements/validation.txt - # keyring semantic-version==2.10.0 # via # -r requirements/validation.txt @@ -687,7 +677,7 @@ stevedore==5.4.1 # code-annotations # edx-django-utils # edx-opaque-keys -stripe==12.1.0 +stripe==12.2.0 # via -r requirements/validation.txt text-unidecode==1.3 # via diff --git a/requirements/django.txt b/requirements/django.txt index c75aef8bc..22cd64902 100644 --- a/requirements/django.txt +++ b/requirements/django.txt @@ -1 +1 @@ -django==4.2.21 +django==5.2.1 diff --git a/requirements/doc.txt b/requirements/doc.txt index 7a3eb20e3..e3da9b29e 100644 --- a/requirements/doc.txt +++ b/requirements/doc.txt @@ -157,9 +157,8 @@ distlib==0.3.9 # via # -r requirements/test.txt # virtualenv -django==4.2.21 +django==5.2.1 # via - # -c requirements/common_constraints.txt # -r requirements/test.txt # crispy-bootstrap5 # django-celery-results @@ -541,7 +540,7 @@ pyyaml==6.0.2 # edx-django-release-util readme-renderer==44.0 # via -r requirements/doc.in -redis==6.1.0 +redis==6.2.0 # via -r requirements/test.txt referencing==0.36.2 # via @@ -636,7 +635,7 @@ stevedore==5.4.1 # doc8 # edx-django-utils # edx-opaque-keys -stripe==12.1.0 +stripe==12.2.0 # via -r requirements/test.txt text-unidecode==1.3 # via diff --git a/requirements/production.txt b/requirements/production.txt index f510a2596..243f26426 100644 --- a/requirements/production.txt +++ b/requirements/production.txt @@ -103,7 +103,7 @@ defusedxml==0.7.1 # -r requirements/base.txt # python3-openid # social-auth-core -django==4.2.21 +django==5.2.1 # via # -r requirements/base.txt # crispy-bootstrap5 @@ -391,7 +391,7 @@ pyyaml==6.0.2 # drf-spectacular # drf-yasg # edx-django-release-util -redis==6.1.0 +redis==6.2.0 # via -r requirements/base.txt referencing==0.36.2 # via @@ -456,7 +456,7 @@ stevedore==5.4.1 # code-annotations # edx-django-utils # edx-opaque-keys -stripe==12.1.0 +stripe==12.2.0 # via -r requirements/base.txt text-unidecode==1.3 # via diff --git a/requirements/quality.txt b/requirements/quality.txt index 8a688df23..74b543616 100644 --- a/requirements/quality.txt +++ b/requirements/quality.txt @@ -127,7 +127,6 @@ cryptography==45.0.3 # via # -r requirements/test.txt # pyjwt - # secretstorage # social-auth-core ddt==1.7.2 # via -r requirements/test.txt @@ -148,9 +147,8 @@ distlib==0.3.9 # via # -r requirements/test.txt # virtualenv -django==4.2.21 +django==5.2.1 # via - # -c requirements/common_constraints.txt # -r requirements/test.txt # crispy-bootstrap5 # django-celery-results @@ -351,10 +349,6 @@ jaraco-context==6.0.1 # via keyring jaraco-functools==4.1.0 # via keyring -jeepney==0.9.0 - # via - # keyring - # secretstorage jinja2==3.1.6 # via # -r requirements/test.txt @@ -545,7 +539,7 @@ pyyaml==6.0.2 # edx-django-release-util readme-renderer==44.0 # via twine -redis==6.1.0 +redis==6.2.0 # via -r requirements/test.txt referencing==0.36.2 # via @@ -583,8 +577,6 @@ rpds-py==0.25.1 # referencing rules==3.5 # via -r requirements/test.txt -secretstorage==3.3.3 - # via keyring semantic-version==2.10.0 # via # -r requirements/test.txt @@ -624,7 +616,7 @@ stevedore==5.4.1 # code-annotations # edx-django-utils # edx-opaque-keys -stripe==12.1.0 +stripe==12.2.0 # via -r requirements/test.txt text-unidecode==1.3 # via diff --git a/requirements/test.txt b/requirements/test.txt index ef3f28238..19b5301d9 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -134,7 +134,6 @@ dill==0.4.0 distlib==0.3.9 # via virtualenv # via - # -c requirements/common_constraints.txt # -r requirements/base.txt # crispy-bootstrap5 # django-celery-results @@ -470,7 +469,7 @@ pyyaml==6.0.2 # drf-spectacular # drf-yasg # edx-django-release-util -redis==6.1.0 +redis==6.2.0 # via -r requirements/base.txt referencing==0.36.2 # via @@ -536,7 +535,7 @@ stevedore==5.4.1 # code-annotations # edx-django-utils # edx-opaque-keys -stripe==12.1.0 +stripe==12.2.0 # via -r requirements/base.txt text-unidecode==1.3 # via diff --git a/requirements/validation.txt b/requirements/validation.txt index a88ce3053..6f38605c0 100644 --- a/requirements/validation.txt +++ b/requirements/validation.txt @@ -157,7 +157,6 @@ cryptography==45.0.3 # -r requirements/quality.txt # -r requirements/test.txt # pyjwt - # secretstorage # social-auth-core ddt==1.7.2 # via @@ -184,7 +183,7 @@ distlib==0.3.9 # -r requirements/quality.txt # -r requirements/test.txt # virtualenv -django==4.2.21 +django==5.2.1 # via # -r requirements/quality.txt # -r requirements/test.txt @@ -462,11 +461,6 @@ jaraco-functools==4.1.0 # via # -r requirements/quality.txt # keyring -jeepney==0.9.0 - # via - # -r requirements/quality.txt - # keyring - # secretstorage jinja2==3.1.6 # via # -r requirements/quality.txt @@ -714,7 +708,7 @@ readme-renderer==44.0 # via # -r requirements/quality.txt # twine -redis==6.1.0 +redis==6.2.0 # via # -r requirements/quality.txt # -r requirements/test.txt @@ -766,10 +760,6 @@ rules==3.5 # via # -r requirements/quality.txt # -r requirements/test.txt -secretstorage==3.3.3 - # via - # -r requirements/quality.txt - # keyring semantic-version==2.10.0 # via # -r requirements/quality.txt @@ -818,7 +808,7 @@ stevedore==5.4.1 # code-annotations # edx-django-utils # edx-opaque-keys -stripe==12.1.0 +stripe==12.2.0 # via # -r requirements/quality.txt # -r requirements/test.txt diff --git a/tox.ini b/tox.ini index e8ed5694d..0a88276a4 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = py{312}-django{42}, quality, docs, pii_check +envlist = py{312}-django{52}, quality, docs, pii_check skipsdist = true [doc8] @@ -40,7 +40,7 @@ norecursedirs = .* docs requirements site-packages [testenv] deps = - django42: Django>=4.2,<5.0 + django52: Django>=5.2,<5.3 -r{toxinidir}/requirements/test.txt commands = pytest {posargs}