fix: replace deprecated datetime.utcnow() with timezone-aware datetime.now(timezone.utc) (#816)

Python 3.14 deprecates datetime.utcnow(). Replace all 9 occurrences with
datetime.now(timezone.utc) and normalize the output to preserve the existing
ISO-8601 "Z"-suffixed format so downstream parsers are unaffected.

Fixes #814
This commit is contained in:
Trevin Chow 2026-04-16 02:16:11 -07:00 committed by GitHub
parent 95e4839da7
commit ef8bb3aed4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 15 additions and 15 deletions

View file

@ -13,7 +13,7 @@ Agent provenance tracks the reasoning trace of agent sessions:
""" """
import json import json
from datetime import datetime from datetime import datetime, timezone
from typing import List, Optional, Dict, Any from typing import List, Optional, Dict, Any
from .. schema import Triple, Term, IRI, LITERAL from .. schema import Triple, Term, IRI, LITERAL
@ -87,7 +87,7 @@ def agent_session_triples(
List of Triple objects List of Triple objects
""" """
if timestamp is None: if timestamp is None:
timestamp = datetime.utcnow().isoformat() + "Z" timestamp = datetime.now(timezone.utc).isoformat().replace("+00:00", "Z")
triples = [ triples = [
_triple(session_uri, RDF_TYPE, _iri(PROV_ENTITY)), _triple(session_uri, RDF_TYPE, _iri(PROV_ENTITY)),

View file

@ -2,7 +2,7 @@
Helper functions to build PROV-O triples for extraction-time provenance. Helper functions to build PROV-O triples for extraction-time provenance.
""" """
from datetime import datetime from datetime import datetime, timezone
from typing import List, Optional from typing import List, Optional
from .. schema import Triple, Term, IRI, LITERAL, TRIPLE from .. schema import Triple, Term, IRI, LITERAL, TRIPLE
@ -192,7 +192,7 @@ def derived_entity_triples(
List of Triple objects List of Triple objects
""" """
if timestamp is None: if timestamp is None:
timestamp = datetime.utcnow().isoformat() + "Z" timestamp = datetime.now(timezone.utc).isoformat().replace("+00:00", "Z")
act_uri = activity_uri() act_uri = activity_uri()
agt_uri = agent_uri(component_name) agt_uri = agent_uri(component_name)
@ -309,7 +309,7 @@ def subgraph_provenance_triples(
List of Triple objects for the provenance List of Triple objects for the provenance
""" """
if timestamp is None: if timestamp is None:
timestamp = datetime.utcnow().isoformat() + "Z" timestamp = datetime.now(timezone.utc).isoformat().replace("+00:00", "Z")
act_uri = activity_uri() act_uri = activity_uri()
agt_uri = agent_uri(component_name) agt_uri = agent_uri(component_name)
@ -386,7 +386,7 @@ def question_triples(
List of Triple objects List of Triple objects
""" """
if timestamp is None: if timestamp is None:
timestamp = datetime.utcnow().isoformat() + "Z" timestamp = datetime.now(timezone.utc).isoformat().replace("+00:00", "Z")
triples = [ triples = [
_triple(question_uri, RDF_TYPE, _iri(PROV_ENTITY)), _triple(question_uri, RDF_TYPE, _iri(PROV_ENTITY)),
@ -640,7 +640,7 @@ def docrag_question_triples(
List of Triple objects List of Triple objects
""" """
if timestamp is None: if timestamp is None:
timestamp = datetime.utcnow().isoformat() + "Z" timestamp = datetime.now(timezone.utc).isoformat().replace("+00:00", "Z")
triples = [ triples = [
_triple(question_uri, RDF_TYPE, _iri(PROV_ENTITY)), _triple(question_uri, RDF_TYPE, _iri(PROV_ENTITY)),

View file

@ -9,7 +9,7 @@ librarian integration.
import json import json
import logging import logging
import uuid import uuid
from datetime import datetime from datetime import datetime, timezone
from ... schema import AgentRequest, AgentResponse, AgentStep, Error from ... schema import AgentRequest, AgentResponse, AgentStep, Error
from ... schema import Triples, Metadata from ... schema import Triples, Metadata
@ -253,7 +253,7 @@ class PatternBase:
collection, respond, streaming, collection, respond, streaming,
parent_uri=None): parent_uri=None):
"""Emit provenance triples for a new session.""" """Emit provenance triples for a new session."""
timestamp = datetime.utcnow().isoformat() + "Z" timestamp = datetime.now(timezone.utc).isoformat().replace("+00:00", "Z")
triples = set_graph( triples = set_graph(
agent_session_triples( agent_session_triples(
session_uri, question, timestamp, session_uri, question, timestamp,

View file

@ -10,7 +10,7 @@ import sys
import functools import functools
import logging import logging
import uuid import uuid
from datetime import datetime from datetime import datetime, timezone
# Module logger # Module logger
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -452,7 +452,7 @@ class Processor(AgentService):
# On first iteration, emit session triples # On first iteration, emit session triples
if iteration_num == 1: if iteration_num == 1:
timestamp = datetime.utcnow().isoformat() + "Z" timestamp = datetime.now(timezone.utc).isoformat().replace("+00:00", "Z")
triples = set_graph( triples = set_graph(
agent_session_triples(session_uri, request.question, timestamp), agent_session_triples(session_uri, request.question, timestamp),
GRAPH_RETRIEVAL GRAPH_RETRIEVAL

View file

@ -2,7 +2,7 @@
import asyncio import asyncio
import logging import logging
import uuid import uuid
from datetime import datetime from datetime import datetime, timezone
# Provenance imports # Provenance imports
from trustgraph.provenance import ( from trustgraph.provenance import (
@ -199,7 +199,7 @@ class DocumentRag:
exp_uri = docrag_exploration_uri(session_id) exp_uri = docrag_exploration_uri(session_id)
syn_uri = docrag_synthesis_uri(session_id) syn_uri = docrag_synthesis_uri(session_id)
timestamp = datetime.utcnow().isoformat() + "Z" timestamp = datetime.now(timezone.utc).isoformat().replace("+00:00", "Z")
# Emit question explainability immediately # Emit question explainability immediately
if explain_callback: if explain_callback:

View file

@ -7,7 +7,7 @@ import math
import time import time
import uuid import uuid
from collections import OrderedDict from collections import OrderedDict
from datetime import datetime from datetime import datetime, timezone
from ... schema import Term, Triple as SchemaTriple, IRI, LITERAL, TRIPLE from ... schema import Term, Triple as SchemaTriple, IRI, LITERAL, TRIPLE
from ... knowledge import Uri, Literal from ... knowledge import Uri, Literal
@ -643,7 +643,7 @@ class GraphRag:
foc_uri = make_focus_uri(session_id) foc_uri = make_focus_uri(session_id)
syn_uri = make_synthesis_uri(session_id) syn_uri = make_synthesis_uri(session_id)
timestamp = datetime.utcnow().isoformat() + "Z" timestamp = datetime.now(timezone.utc).isoformat().replace("+00:00", "Z")
# Emit question explainability immediately # Emit question explainability immediately
if explain_callback: if explain_callback: