From 4a083675e50f60214dac9136c999488d90357a20 Mon Sep 17 00:00:00 2001 From: Charlie Tonneslan Date: Sun, 17 May 2026 20:08:38 -0400 Subject: [PATCH] Stop using deprecated datetime.utcnow() datetime.utcnow() is deprecated in Python 3.12. Swap the remaining call sites for datetime.now(timezone.utc), keeping the naive-UTC shape where existing consumers expect it via .replace(tzinfo=None). Signed-off-by: Charlie Tonneslan --- openstates/data/tests/conftest.py | 7 +++++-- openstates/importers/tests/test_base_importer.py | 4 +++- openstates/models/common.py | 5 ++++- openstates/scrape/tests/test_event_scrape.py | 6 +++++- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/openstates/data/tests/conftest.py b/openstates/data/tests/conftest.py index c737ede4a..412cb9242 100644 --- a/openstates/data/tests/conftest.py +++ b/openstates/data/tests/conftest.py @@ -1,5 +1,5 @@ import pytest -from datetime import datetime +from datetime import datetime, timezone from openstates.data.models import ( Jurisdiction, Division, @@ -90,7 +90,10 @@ def event(jurisdiction, event_location): jurisdiction=jurisdiction, description="To discuss the pros/cons of wind farming.", classification="committee-meeting", - start_date=datetime.utcnow().isoformat().split(".")[0], + start_date=datetime.now(timezone.utc) + .replace(tzinfo=None) + .isoformat() + .split(".")[0], status="passed", location=event_location, ) diff --git a/openstates/importers/tests/test_base_importer.py b/openstates/importers/tests/test_base_importer.py index f082ac259..48cf81ed2 100644 --- a/openstates/importers/tests/test_base_importer.py +++ b/openstates/importers/tests/test_base_importer.py @@ -171,7 +171,9 @@ def test_invalid_fields_related_item(): @pytest.mark.django_db def test_automatic_updated_at(): create_jurisdiction() - difference = Organization.objects.get().updated_at - datetime.datetime.utcnow() + difference = Organization.objects.get().updated_at - datetime.datetime.now( + datetime.timezone.utc + ).replace(tzinfo=None) # updated_at should be in UTC, a bit of clock drift notwithstanding assert abs(difference) < datetime.timedelta(minutes=5) diff --git a/openstates/models/common.py b/openstates/models/common.py index d579a2840..0d4cec083 100644 --- a/openstates/models/common.py +++ b/openstates/models/common.py @@ -99,7 +99,10 @@ class TimeScoped(BaseModel): ) def is_active(self) -> bool: - date = datetime.datetime.utcnow().date().isoformat() + # datetime.utcnow() is deprecated in Python 3.12. + date = ( + datetime.datetime.now(datetime.timezone.utc).date().isoformat() + ) return (self.end_date == "" or str(self.end_date) > date) and ( self.start_date == "" or str(self.start_date) <= date ) diff --git a/openstates/scrape/tests/test_event_scrape.py b/openstates/scrape/tests/test_event_scrape.py index 8ff5abe4c..15e8932dc 100644 --- a/openstates/scrape/tests/test_event_scrape.py +++ b/openstates/scrape/tests/test_event_scrape.py @@ -6,7 +6,11 @@ def event_obj(): e = Event( name="get-together", - start_date=datetime.datetime.utcnow().isoformat().split(".")[0] + "Z", + start_date=datetime.datetime.now(datetime.timezone.utc) + .replace(tzinfo=None) + .isoformat() + .split(".")[0] + + "Z", location_name="Joe's Place", ) e.add_source(url="http://example.com/foobar")