diff --git a/requirements/base.txt b/requirements/base.txt index 2dea2eec0..380bcae62 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -20,9 +20,9 @@ cffi==2.0.0 # via # cryptography # pynacl -charset-normalizer==3.4.6 +charset-normalizer==3.4.7 # via requests -click==8.3.1 +click==8.3.2 # via # celery # click-didyoumean @@ -76,7 +76,7 @@ edx-drf-extensions==10.6.0 # via # -r requirements/base.in # edx-organizations -edx-opaque-keys==3.1.0 +edx-opaque-keys==4.0.0 # via # edx-drf-extensions # edx-organizations @@ -88,7 +88,7 @@ kombu==5.6.2 # via celery packaging==26.0 # via kombu -pillow==12.1.1 +pillow==12.2.0 # via edx-organizations prompt-toolkit==3.0.52 # via click-repl @@ -106,7 +106,7 @@ pynacl==1.6.2 # via edx-django-utils python-dateutil==2.9.0.post0 # via celery -requests==2.33.0 +requests==2.33.1 # via edx-drf-extensions rules==3.5 # via -r requirements/base.in @@ -124,7 +124,7 @@ tomlkit==0.14.0 # via -r requirements/base.in typing-extensions==4.15.0 # via edx-opaque-keys -tzdata==2025.3 +tzdata==2026.1 # via kombu tzlocal==5.3.1 # via celery diff --git a/requirements/ci.txt b/requirements/ci.txt index 131e8a92c..a274addca 100644 --- a/requirements/ci.txt +++ b/requirements/ci.txt @@ -34,7 +34,7 @@ python-discovery==1.2.1 # virtualenv tomli-w==1.2.0 # via tox -tox==4.51.0 +tox==4.52.0 # via -r requirements/ci.in virtualenv==21.2.0 # via tox diff --git a/requirements/dev.txt b/requirements/dev.txt index 70eba1ff5..606687503 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -44,11 +44,11 @@ cffi==2.0.0 # pynacl chardet==7.4.0.post2 # via diff-cover -charset-normalizer==3.4.6 +charset-normalizer==3.4.7 # via # -r requirements/quality.txt # requests -click==8.3.1 +click==8.3.2 # via # -r requirements/pip-tools.txt # -r requirements/quality.txt @@ -128,7 +128,7 @@ django-crum==0.7.9 # via # -r requirements/quality.txt # edx-django-utils -django-debug-toolbar==6.2.0 +django-debug-toolbar==6.3.0 # via # -r requirements/dev.in # -r requirements/quality.txt @@ -140,11 +140,11 @@ django-simple-history==3.11.0 # via # -r requirements/quality.txt # edx-organizations -django-stubs==6.0.1 +django-stubs==6.0.2 # via # -r requirements/quality.txt # djangorestframework-stubs -django-stubs-ext==6.0.1 +django-stubs-ext==6.0.2 # via # -r requirements/quality.txt # django-stubs @@ -159,7 +159,7 @@ djangorestframework==3.17.1 # drf-jwt # edx-drf-extensions # edx-organizations -djangorestframework-stubs==3.16.8 +djangorestframework-stubs==3.16.9 # via -r requirements/quality.txt dnspython==2.8.0 # via @@ -185,7 +185,7 @@ edx-i18n-tools==2.0.0 # via -r requirements/dev.in edx-lint==6.0.0 # via -r requirements/quality.txt -edx-opaque-keys==3.1.0 +edx-opaque-keys==4.0.0 # via # -r requirements/quality.txt # edx-drf-extensions @@ -280,12 +280,12 @@ mdurl==0.1.2 # markdown-it-py mock==5.2.0 # via -r requirements/quality.txt -more-itertools==10.8.0 +more-itertools==11.0.1 # via # -r requirements/quality.txt # jaraco-classes # jaraco-functools -mypy==1.19.1 +mypy==1.20.0 # via -r requirements/quality.txt mypy-extensions==1.1.0 # via @@ -315,7 +315,7 @@ pathspec==1.0.4 # via # -r requirements/quality.txt # mypy -pillow==12.1.1 +pillow==12.2.0 # via # -r requirements/quality.txt # edx-organizations @@ -436,7 +436,7 @@ readme-renderer==44.0 # via # -r requirements/quality.txt # twine -requests==2.33.0 +requests==2.33.1 # via # -r requirements/quality.txt # edx-drf-extensions @@ -497,7 +497,7 @@ tomlkit==0.14.0 # via # -r requirements/quality.txt # pylint -tox==4.51.0 +tox==4.52.0 # via -r requirements/ci.txt twine==6.2.0 # via -r requirements/quality.txt @@ -516,7 +516,7 @@ typing-extensions==4.15.0 # grimp # import-linter # mypy -tzdata==2025.3 +tzdata==2026.1 # via # -r requirements/quality.txt # kombu diff --git a/requirements/doc.txt b/requirements/doc.txt index fbbc93c22..37e89a84d 100644 --- a/requirements/doc.txt +++ b/requirements/doc.txt @@ -39,11 +39,11 @@ cffi==2.0.0 # -r requirements/test.txt # cryptography # pynacl -charset-normalizer==3.4.6 +charset-normalizer==3.4.7 # via # -r requirements/test.txt # requests -click==8.3.1 +click==8.3.2 # via # -r requirements/test.txt # celery @@ -98,7 +98,7 @@ django-crum==0.7.9 # via # -r requirements/test.txt # edx-django-utils -django-debug-toolbar==6.2.0 +django-debug-toolbar==6.3.0 # via -r requirements/test.txt django-model-utils==5.0.0 # via @@ -108,11 +108,11 @@ django-simple-history==3.11.0 # via # -r requirements/test.txt # edx-organizations -django-stubs==6.0.1 +django-stubs==6.0.2 # via # -r requirements/test.txt # djangorestframework-stubs -django-stubs-ext==6.0.1 +django-stubs-ext==6.0.2 # via # -r requirements/test.txt # django-stubs @@ -127,7 +127,7 @@ djangorestframework==3.17.1 # drf-jwt # edx-drf-extensions # edx-organizations -djangorestframework-stubs==3.16.8 +djangorestframework-stubs==3.16.9 # via -r requirements/test.txt dnspython==2.8.0 # via @@ -154,7 +154,7 @@ edx-drf-extensions==10.6.0 # via # -r requirements/test.txt # edx-organizations -edx-opaque-keys==3.1.0 +edx-opaque-keys==4.0.0 # via # -r requirements/test.txt # edx-drf-extensions @@ -206,7 +206,7 @@ mdurl==0.1.2 # markdown-it-py mock==5.2.0 # via -r requirements/test.txt -mypy==1.19.1 +mypy==1.20.0 # via -r requirements/test.txt mypy-extensions==1.1.0 # via @@ -226,7 +226,7 @@ pathspec==1.0.4 # via # -r requirements/test.txt # mypy -pillow==12.1.1 +pillow==12.2.0 # via # -r requirements/test.txt # edx-organizations @@ -298,7 +298,7 @@ pyyaml==6.0.3 # code-annotations readme-renderer==44.0 # via -r requirements/doc.in -requests==2.33.0 +requests==2.33.1 # via # -r requirements/test.txt # edx-drf-extensions @@ -382,7 +382,7 @@ typing-extensions==4.15.0 # import-linter # mypy # pydata-sphinx-theme -tzdata==2025.3 +tzdata==2026.1 # via # -r requirements/test.txt # kombu diff --git a/requirements/pip-tools.txt b/requirements/pip-tools.txt index 7da5f28cb..8b3b29593 100644 --- a/requirements/pip-tools.txt +++ b/requirements/pip-tools.txt @@ -6,7 +6,7 @@ # build==1.4.2 # via pip-tools -click==8.3.1 +click==8.3.2 # via pip-tools packaging==26.0 # via diff --git a/requirements/quality.txt b/requirements/quality.txt index dcde6d8de..6198e2414 100644 --- a/requirements/quality.txt +++ b/requirements/quality.txt @@ -33,11 +33,11 @@ cffi==2.0.0 # -r requirements/test.txt # cryptography # pynacl -charset-normalizer==3.4.6 +charset-normalizer==3.4.7 # via # -r requirements/test.txt # requests -click==8.3.1 +click==8.3.2 # via # -r requirements/test.txt # celery @@ -100,7 +100,7 @@ django-crum==0.7.9 # via # -r requirements/test.txt # edx-django-utils -django-debug-toolbar==6.2.0 +django-debug-toolbar==6.3.0 # via -r requirements/test.txt django-model-utils==5.0.0 # via @@ -110,11 +110,11 @@ django-simple-history==3.11.0 # via # -r requirements/test.txt # edx-organizations -django-stubs==6.0.1 +django-stubs==6.0.2 # via # -r requirements/test.txt # djangorestframework-stubs -django-stubs-ext==6.0.1 +django-stubs-ext==6.0.2 # via # -r requirements/test.txt # django-stubs @@ -129,7 +129,7 @@ djangorestframework==3.17.1 # drf-jwt # edx-drf-extensions # edx-organizations -djangorestframework-stubs==3.16.8 +djangorestframework-stubs==3.16.9 # via -r requirements/test.txt dnspython==2.8.0 # via @@ -151,7 +151,7 @@ edx-drf-extensions==10.6.0 # edx-organizations edx-lint==6.0.0 # via -r requirements/quality.in -edx-opaque-keys==3.1.0 +edx-opaque-keys==4.0.0 # via # -r requirements/test.txt # edx-drf-extensions @@ -220,11 +220,11 @@ mdurl==0.1.2 # markdown-it-py mock==5.2.0 # via -r requirements/test.txt -more-itertools==10.8.0 +more-itertools==11.0.1 # via # jaraco-classes # jaraco-functools -mypy==1.19.1 +mypy==1.20.0 # via -r requirements/test.txt mypy-extensions==1.1.0 # via @@ -244,7 +244,7 @@ pathspec==1.0.4 # via # -r requirements/test.txt # mypy -pillow==12.1.1 +pillow==12.2.0 # via # -r requirements/test.txt # edx-organizations @@ -328,7 +328,7 @@ pyyaml==6.0.3 # code-annotations readme-renderer==44.0 # via twine -requests==2.33.0 +requests==2.33.1 # via # -r requirements/test.txt # edx-drf-extensions @@ -394,7 +394,7 @@ typing-extensions==4.15.0 # grimp # import-linter # mypy -tzdata==2025.3 +tzdata==2026.1 # via # -r requirements/test.txt # kombu diff --git a/requirements/test.txt b/requirements/test.txt index 437cd993d..72c728628 100644 --- a/requirements/test.txt +++ b/requirements/test.txt @@ -29,11 +29,11 @@ cffi==2.0.0 # -r requirements/base.txt # cryptography # pynacl -charset-normalizer==3.4.6 +charset-normalizer==3.4.7 # via # -r requirements/base.txt # requests -click==8.3.1 +click==8.3.2 # via # -r requirements/base.txt # celery @@ -86,7 +86,7 @@ django-crum==0.7.9 # via # -r requirements/base.txt # edx-django-utils -django-debug-toolbar==6.2.0 +django-debug-toolbar==6.3.0 # via -r requirements/test.in django-model-utils==5.0.0 # via @@ -96,11 +96,11 @@ django-simple-history==3.11.0 # via # -r requirements/base.txt # edx-organizations -django-stubs==6.0.1 +django-stubs==6.0.2 # via # -r requirements/test.in # djangorestframework-stubs -django-stubs-ext==6.0.1 +django-stubs-ext==6.0.2 # via django-stubs django-waffle==5.0.0 # via @@ -113,7 +113,7 @@ djangorestframework==3.17.1 # drf-jwt # edx-drf-extensions # edx-organizations -djangorestframework-stubs==3.16.8 +djangorestframework-stubs==3.16.9 # via -r requirements/test.in dnspython==2.8.0 # via @@ -131,7 +131,7 @@ edx-drf-extensions==10.6.0 # via # -r requirements/base.txt # edx-organizations -edx-opaque-keys==3.1.0 +edx-opaque-keys==4.0.0 # via # -r requirements/base.txt # edx-drf-extensions @@ -166,7 +166,7 @@ mdurl==0.1.2 # via markdown-it-py mock==5.2.0 # via -r requirements/test.in -mypy==1.19.1 +mypy==1.20.0 # via -r requirements/test.in mypy-extensions==1.1.0 # via mypy @@ -179,7 +179,7 @@ packaging==26.0 # pytest pathspec==1.0.4 # via mypy -pillow==12.1.1 +pillow==12.2.0 # via # -r requirements/base.txt # edx-organizations @@ -234,7 +234,7 @@ python-slugify==8.0.4 # via code-annotations pyyaml==6.0.3 # via code-annotations -requests==2.33.0 +requests==2.33.1 # via # -r requirements/base.txt # edx-drf-extensions @@ -279,7 +279,7 @@ typing-extensions==4.15.0 # grimp # import-linter # mypy -tzdata==2025.3 +tzdata==2026.1 # via # -r requirements/base.txt # kombu diff --git a/src/openedx_content/applets/publishing/api.py b/src/openedx_content/applets/publishing/api.py index 88143f520..cbe725255 100644 --- a/src/openedx_content/applets/publishing/api.py +++ b/src/openedx_content/applets/publishing/api.py @@ -9,7 +9,7 @@ from contextlib import nullcontext from datetime import datetime, timezone -from typing import ContextManager, Optional +from typing import ContextManager, Optional, cast from django.core.exceptions import ObjectDoesNotExist from django.db.models import F, Prefetch, Q, QuerySet @@ -824,7 +824,7 @@ def _create_side_effects_for_change_log(change_log: DraftChangeLog | PublishLog) # "This Unit's version stayed the same, but its dependency hash changed # because a child Component's draft version was changed." We gather them # all up in a list so we can do a bulk_update on them. - branch_objs_to_update_with_side_effects = [] + branch_objs_to_update_with_side_effects: list[Draft | Published] = [] while changes_and_affected: change, affected = changes_and_affected.pop() @@ -854,9 +854,11 @@ def _create_side_effects_for_change_log(change_log: DraftChangeLog | PublishLog) # Update the current branch pointer (Draft or Published) for this # entity to point to the side_effect_change (if it's not already). if branch_cls == Published: - published_obj = affected # 'affected' is the current Published object + published_obj = cast(Published, affected) if published_obj.publish_log_record_id != side_effect_change.pk: - published_obj.publish_log_record = side_effect_change + published_obj.publish_log_record = cast( + PublishLogRecord, side_effect_change + ) branch_objs_to_update_with_side_effects.append(published_obj) elif branch_cls == Draft: draft_obj = affected # 'affected' is the current Draft object diff --git a/src/openedx_django_lib/fields.py b/src/openedx_django_lib/fields.py index c41678993..03e6eab05 100644 --- a/src/openedx_django_lib/fields.py +++ b/src/openedx_django_lib/fields.py @@ -12,6 +12,7 @@ import hashlib import uuid +from typing import Any from django.db import models @@ -124,7 +125,7 @@ def key_field(**kwargs) -> MultiCollationCharField: return case_sensitive_char_field(max_length=500, blank=False, **kwargs) -def hash_field(**kwargs) -> models.CharField: +def hash_field(**kwargs: Any) -> models.CharField: """ Holds a hash digest meant to identify a piece of content. @@ -145,13 +146,14 @@ def hash_field(**kwargs) -> models.CharField: didn't seem worthwhile, particularly the possibility of case-sensitivity related bugs. """ - default_kwargs = { + default_kwargs: dict[str, Any] = { "max_length": 40, "blank": False, "null": False, "editable": False, } - return models.CharField(**(default_kwargs | kwargs)) + merged: dict[str, Any] = {**default_kwargs, **kwargs} + return models.CharField(**merged) def manual_date_time_field() -> models.DateTimeField: