From e60339a5bf29dd7a57718ee6868767ba61994db1 Mon Sep 17 00:00:00 2001 From: Albrecht Degering Date: Sun, 2 Aug 2026 07:24:11 +0200 Subject: [PATCH] Fix address source revision timestamps --- src/govoplan_addresses/backend/capabilities.py | 14 ++++++++++---- tests/test_addresses_service.py | 4 +++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/govoplan_addresses/backend/capabilities.py b/src/govoplan_addresses/backend/capabilities.py index b61a835..4aa7ba2 100644 --- a/src/govoplan_addresses/backend/capabilities.py +++ b/src/govoplan_addresses/backend/capabilities.py @@ -1232,7 +1232,10 @@ def _address_book_contact_updated_at(session: Any, address_book_ids: list[str]) if updated_at is None: continue key = str(address_book_id) - revisions[key] = max(revisions.get(key, updated_at), updated_at) + revisions[key] = max( + _aware_datetime(revisions.get(key, updated_at)), + _aware_datetime(updated_at), + ) return revisions @@ -1306,7 +1309,10 @@ def _address_list_updated_at(session: Any, address_list_ids: list[str]) -> dict[ if updated_at is None: continue key = str(address_list_id) - revisions[key] = max(revisions.get(key, updated_at), updated_at) + revisions[key] = max( + _aware_datetime(revisions.get(key, updated_at)), + _aware_datetime(updated_at), + ) return revisions @@ -1314,14 +1320,14 @@ def _recipient_source_revision(book: AddressBook, latest_contact_updated_at: dat stamps: list[datetime] = [book.updated_at] if latest_contact_updated_at is not None: stamps.append(latest_contact_updated_at) - return max(stamps).isoformat() + return max(_aware_datetime(item) for item in stamps).isoformat() def _address_list_source_revision(address_list: AddressList, latest_entry_updated_at: datetime | None = None) -> str: stamps: list[datetime] = [address_list.updated_at] if latest_entry_updated_at is not None: stamps.append(latest_entry_updated_at) - return max(stamps).isoformat() + return max(_aware_datetime(item) for item in stamps).isoformat() def _channel_facts_contact_id(source: DistributionSourceReference) -> str: diff --git a/tests/test_addresses_service.py b/tests/test_addresses_service.py index 9d144b2..c6be140 100644 --- a/tests/test_addresses_service.py +++ b/tests/test_addresses_service.py @@ -1208,7 +1208,9 @@ END:VCARD contact_postal_address_id=contact.postal_addresses[0].id, ), ) - self.session.commit() + # Providers must also work before the surrounding transaction commits; + # SQLite aggregate timestamps are naive while new ORM rows are UTC-aware. + self.session.flush() capability = AddressesContactPointResolutionCapability() direct = capability.resolve_contact_points(