@@ -138,11 +138,11 @@ def _first_present(payload: Mapping[str, Any], *paths: str) -> Any:
138138 return None
139139
140140
141- def _parse_updated_at (payload : Mapping [str , Any ], * paths : str ) -> datetime :
141+ def _parse_updated_at (payload : Mapping [str , Any ], * paths : str ) -> datetime | None :
142142 updated_at = _first_present (payload , * paths )
143- if isinstance (updated_at , str ) and updated_at . strip ( ):
144- return parse_iso8601 ( updated_at )
145- return datetime . now ( timezone . utc )
143+ if not isinstance (updated_at , str ):
144+ return None
145+ return parse_iso8601 ( updated_at . strip () )
146146
147147
148148def _parse_provider_ids (metadata : Mapping [str , str ]) -> dict [str , str ]:
@@ -380,7 +380,8 @@ def normalize_beads_payload(payload: Mapping[str, Any]) -> TaskRecord | None:
380380 title = str (payload .get ("title" ) or payload .get ("name" ) or "" ),
381381 body = body ,
382382 status = normalize_status (str (payload .get ("status" ) or payload .get ("state" ) or "open" )),
383- updated_at = _parse_updated_at (payload , "updated_at" , "updatedAt" , "created_at" , "createdAt" ),
383+ updated_at = _parse_updated_at (payload , "updated_at" , "updatedAt" , "created_at" , "createdAt" )
384+ or datetime .now (timezone .utc ),
384385 sync_key = metadata .get ("key" ),
385386 provider_ids = _parse_provider_ids (metadata ),
386387 raw = payload ,
@@ -414,7 +415,8 @@ def normalize_asana_payload(payload: Mapping[str, Any]) -> TaskRecord | None:
414415 "updated_at" ,
415416 "completed_at" ,
416417 "created_at" ,
417- ),
418+ )
419+ or datetime .now (timezone .utc ),
418420 sync_key = _string_or_empty (_first_present (payload , "sync_key" )) or metadata .get ("key" ),
419421 provider_ids = _parse_provider_ids (metadata ),
420422 raw = payload ,
@@ -441,7 +443,8 @@ def normalize_jira_payload(payload: Mapping[str, Any]) -> TaskRecord | None:
441443 "fields.updated" ,
442444 "created" ,
443445 "fields.created" ,
444- ),
446+ )
447+ or datetime .now (timezone .utc ),
445448 sync_key = _string_or_empty (_first_present (payload , "sync_key" , "external_ref" ))
446449 or metadata .get ("key" ),
447450 provider_ids = _parse_provider_ids (metadata ),
@@ -576,7 +579,8 @@ def main(argv: Sequence[str] | None = None) -> int:
576579 raise SystemExit ("Usage: tri_sync.py [plan|dry-run]" )
577580
578581 plan = plan_from_sources ()
579- summarize_plan (plan )
582+ summary = summarize_plan (plan )
583+ print (json .dumps (summary , indent = 2 ))
580584 return 0
581585
582586
0 commit comments