diff --git a/CHANGELOG.md b/CHANGELOG.md
index 86bf136..4ce1957 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -19,6 +19,16 @@ instructions, because git commits are used to generate release notes:
+
+## v21.0.0 (2025-10-15)
+
+- [Improvement] Migrate from pylint and black to ruff. (by @Danyal-Faheem)
+- [Improvement] Test python package distribution build when running make test. (by @Danyal-Faheem)
+
+- 💥[Bugfix] Migrate from using DEFAULT_FILE_STORAGE to STORAGES as part of the major Django 5.2 upgrade in Open edX. (by @rehmansheikh222)
+
+- 💥[Feature] Upgrade to Ulmo. (by @rehmansheikh222)
+
## v20.0.0 (2025-06-05)
diff --git a/changelog.d/20250808_194248_danyal.faheem_migrate_ruff.md b/changelog.d/20250808_194248_danyal.faheem_migrate_ruff.md
deleted file mode 100644
index fd709e8..0000000
--- a/changelog.d/20250808_194248_danyal.faheem_migrate_ruff.md
+++ /dev/null
@@ -1,2 +0,0 @@
-- [Improvement] Migrate from pylint and black to ruff. (by @Danyal-Faheem)
-- [Improvement] Test python package distribution build when running make test. (by @Danyal-Faheem)
\ No newline at end of file
diff --git a/pyproject.toml b/pyproject.toml
index f1e0d9c..4ad8fba 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -25,14 +25,14 @@ classifiers = [
"Programming Language :: Python :: 3.12",
]
dependencies = [
- "tutor>=20.0.0,<21.0.0",
+ "tutor>=21.0.0,<22.0.0",
]
# these fields will be set by hatch_build.py
dynamic = ["version"]
[project.optional-dependencies]
dev = [
- "tutor[dev]>=20.0.0,<21.0.0",
+ "tutor[dev]>=21.0.0,<22.0.0",
"ruff"
]
diff --git a/tutorminio/__about__.py b/tutorminio/__about__.py
index 9c9eb91..9bfcca5 100644
--- a/tutorminio/__about__.py
+++ b/tutorminio/__about__.py
@@ -1 +1 @@
-__version__ = "20.0.0"
+__version__ = "21.0.0"
diff --git a/tutorminio/patches/discovery-common-settings b/tutorminio/patches/discovery-common-settings
index 17486db..98d7cf6 100644
--- a/tutorminio/patches/discovery-common-settings
+++ b/tutorminio/patches/discovery-common-settings
@@ -1,5 +1,5 @@
# MinIO object storage
-DEFAULT_FILE_STORAGE = "storages.backends.s3boto3.S3Boto3Storage"
+STORAGES["default"]["BACKEND"] = "storages.backends.s3boto3.S3Boto3Storage"
AWS_ACCESS_KEY_ID = "{{ OPENEDX_AWS_ACCESS_KEY }}"
AWS_SECRET_ACCESS_KEY = "{{ OPENEDX_AWS_SECRET_ACCESS_KEY }}"
AWS_S3_SIGNATURE_VERSION = "s3v4"
diff --git a/tutorminio/patches/openedx-common-settings b/tutorminio/patches/openedx-common-settings
index dabfb06..d337992 100644
--- a/tutorminio/patches/openedx-common-settings
+++ b/tutorminio/patches/openedx-common-settings
@@ -1,9 +1,9 @@
-DEFAULT_FILE_STORAGE = "storages.backends.s3boto3.S3Boto3Storage"
+STORAGES["default"]["BACKEND"] = "storages.backends.s3boto3.S3Boto3Storage"
VIDEO_IMAGE_SETTINGS["STORAGE_KWARGS"]["location"] = VIDEO_IMAGE_SETTINGS["STORAGE_KWARGS"]["location"].lstrip("/")
VIDEO_TRANSCRIPTS_SETTINGS["STORAGE_KWARGS"]["location"] = VIDEO_TRANSCRIPTS_SETTINGS["STORAGE_KWARGS"]["location"].lstrip("/")
GRADES_DOWNLOAD["STORAGE_KWARGS"] = {"location": GRADES_DOWNLOAD["STORAGE_KWARGS"]["location"].lstrip("/")}
GRADES_DOWNLOAD["STORAGE_KWARGS"]["bucket_name"] = "{{ MINIO_GRADES_BUCKET_NAME }}"
-OPENEDX_LEARNING["MEDIA"]["BACKEND"] = DEFAULT_FILE_STORAGE
+OPENEDX_LEARNING["MEDIA"]["BACKEND"] = STORAGES["default"]["BACKEND"]
OPENEDX_LEARNING["MEDIA"]["OPTIONS"] = {
'bucket_name': "{{ MINIO_OPENEDX_LEARNING_BUCKET_NAME }}",
}
diff --git a/tutorminio/patches/openedx-lms-production-settings b/tutorminio/patches/openedx-lms-production-settings
index 3ec80f6..b2ba34e 100644
--- a/tutorminio/patches/openedx-lms-production-settings
+++ b/tutorminio/patches/openedx-lms-production-settings
@@ -1,5 +1,5 @@
PROFILE_IMAGE_BACKEND = {
- "class": DEFAULT_FILE_STORAGE,
+ "class": STORAGES["default"]["BACKEND"],
"options": {
"bucket_name": "{{ MINIO_BUCKET_NAME }}",
"querystring_auth": False,