First PR to replace pytz with zoneinfo for UTC handling across codebase.
This PR migrates all UTC timezone handling from pytz to Python’s standard
library zoneinfo. The pytz library is now deprecated, and its documentation
recommends using zoneinfo for all new code. This update modernizes our
codebase, removes legacy pytz usage, and ensures compatibility with
current best practices for timezone management in Python 3.9+. No functional
changes to timezone logic - just a direct replacement for UTC handling.
https://github.com/openedx/edx-platform/issues/33980
This stage does the following:
- Includes a data migration to copy the values from old to new field.
- Changes business logic to switch to using new field.
- Deletes all code references of the old field.
This stage does the following:
- Adds the new field and migration to create the column.
- Makes all* writes go to both old and new field.
(*) Except for writes from the Django Admin for this model. I confirmed
with Support that CreditRequirements are never edited through the Django
Admin interface. Additionally, I confirmed via the django_admin_log
that there is no record of anybody changing any CreditRequirements.
* Fix type mismatches in coursewaqre
* Fix type mismatch in credit migrations
* Fix type mismatch in status migrations
* Fix type mismatch in user_api migrations
* Review Fixes
Django 2.0 will make this field required for `ForeignKey` and `OneToOneFields`.
In previous versions the option defaulted to `models.CASCADE` when not
specified. This change should make the deprecation warnings in the current
Django version go away.
The migrations where also modified, but the changes should not cause a change in
the database schema since `models.CASCADE` was already the old default.
This avoids a fatal error in Django 1.9+ in most scenarios, where this
code (before this commit) will no longer result in an implicit __in
query. This commit should be a no-op functionally for Django 1.8.
More info: https://code.djangoproject.com/ticket/25284
PLAT-1525