@@ -79,7 +79,7 @@ def from_dict(cls, data: dict[str, Any]) -> ScenarioIdentifier:
7979 description = data .get ("description" , "" ),
8080 scenario_version = data .get ("scenario_version" , 1 ),
8181 init_data = data .get ("init_data" ),
82- pyrit_version = data .get ("pyrit_version" ),
82+ pyrit_version = data .get ("pyrit_version" ) or "unknown" ,
8383 )
8484
8585
@@ -339,7 +339,7 @@ def from_dict(cls, data: dict[str, Any]) -> ScenarioResult:
339339 """
340340 from pyrit .identifiers .component_identifier import ComponentIdentifier
341341
342- return cls (
342+ result = cls (
343343 id = uuid .UUID (data ["id" ]) if data .get ("id" ) else None ,
344344 scenario_identifier = ScenarioIdentifier .from_dict (data ["scenario_identifier" ]),
345345 objective_target_identifier = (
@@ -366,3 +366,8 @@ def from_dict(cls, data: dict[str, Any]) -> ScenarioResult:
366366 error_message = data .get ("error_message" ),
367367 error_type = data .get ("error_type" ),
368368 )
369+ # Preserve missing completion_time: __init__ defaults it to now(), but a
370+ # still-running scenario shouldn't be marked as completed-at-load-time.
371+ if not data .get ("completion_time" ):
372+ result .completion_time = None # type: ignore[ty:invalid-assignment]
373+ return result
0 commit comments