1111from dataclasses import dataclass , field
1212from datetime import datetime
1313from enum import Enum
14- from typing import Any , Optional
14+ from typing import Any
1515
1616# Python's datetime.fromisoformat requires exactly 6 fractional digits
1717_MICROSECOND_PRECISION = 6
@@ -121,8 +121,8 @@ class Finding:
121121 category : str
122122 description : str
123123 status : FindingStatus
124- remediation : Optional [ str ] = None
125- due_date : Optional [ datetime ] = None
124+ remediation : str | None = None
125+ due_date : datetime | None = None
126126
127127
128128# ===========================================================================
@@ -140,18 +140,18 @@ class AISystemRegistry:
140140 system_name : str
141141 use_case : AISystemUseCase
142142 owner_team : str
143- customer_impact : Optional [ int ]
144- model_complexity : Optional [ int ]
145- human_reliance : Optional [ int ]
143+ customer_impact : int | None
144+ model_complexity : int | None
145+ human_reliance : int | None
146146 materiality : MaterialityClassification
147147 status : SystemStatus
148- created_at : Optional [ datetime ]
149- updated_at : Optional [ datetime ]
150- description : Optional [ str ] = None
151- technical_owner : Optional [ str ] = None
152- business_owner : Optional [ str ] = None
153- metadata : Optional [ dict [str , Any ]] = None
154- created_by : Optional [ str ] = None
148+ created_at : datetime | None
149+ updated_at : datetime | None
150+ description : str | None = None
151+ technical_owner : str | None = None
152+ business_owner : str | None = None
153+ metadata : dict [str , Any ] | None = None
154+ created_by : str | None = None
155155
156156
157157@dataclass
@@ -181,25 +181,25 @@ class FEATAssessment:
181181 system_id : str
182182 assessment_type : str
183183 status : FEATAssessmentStatus
184- assessment_date : Optional [ datetime ]
185- created_at : Optional [ datetime ]
186- updated_at : Optional [ datetime ]
187- valid_until : Optional [ datetime ] = None
188- fairness_score : Optional [ int ] = None
189- ethics_score : Optional [ int ] = None
190- accountability_score : Optional [ int ] = None
191- transparency_score : Optional [ int ] = None
192- overall_score : Optional [ int ] = None
193- fairness_details : Optional [ dict [str , Any ]] = None
194- ethics_details : Optional [ dict [str , Any ]] = None
195- accountability_details : Optional [ dict [str , Any ]] = None
196- transparency_details : Optional [ dict [str , Any ]] = None
197- findings : Optional [ list [Finding ]] = None
198- recommendations : Optional [ list [str ]] = None
199- assessors : Optional [ list [str ]] = None
200- approved_by : Optional [ str ] = None
201- approved_at : Optional [ datetime ] = None
202- created_by : Optional [ str ] = None
184+ assessment_date : datetime | None
185+ created_at : datetime | None
186+ updated_at : datetime | None
187+ valid_until : datetime | None = None
188+ fairness_score : int | None = None
189+ ethics_score : int | None = None
190+ accountability_score : int | None = None
191+ transparency_score : int | None = None
192+ overall_score : int | None = None
193+ fairness_details : dict [str , Any ] | None = None
194+ ethics_details : dict [str , Any ] | None = None
195+ accountability_details : dict [str , Any ] | None = None
196+ transparency_details : dict [str , Any ] | None = None
197+ findings : list [Finding ] | None = None
198+ recommendations : list [str ] | None = None
199+ assessors : list [str ] | None = None
200+ approved_by : str | None = None
201+ approved_at : datetime | None = None
202+ created_by : str | None = None
203203
204204
205205# ===========================================================================
@@ -216,16 +216,16 @@ class KillSwitch:
216216 system_id : str
217217 status : KillSwitchStatus
218218 auto_trigger_enabled : bool
219- created_at : Optional [ datetime ]
220- updated_at : Optional [ datetime ]
221- accuracy_threshold : Optional [ float ] = None
222- bias_threshold : Optional [ float ] = None
223- error_rate_threshold : Optional [ float ] = None
224- triggered_at : Optional [ datetime ] = None
225- triggered_by : Optional [ str ] = None
226- triggered_reason : Optional [ str ] = None
227- restored_at : Optional [ datetime ] = None
228- restored_by : Optional [ str ] = None
219+ created_at : datetime | None
220+ updated_at : datetime | None
221+ accuracy_threshold : float | None = None
222+ bias_threshold : float | None = None
223+ error_rate_threshold : float | None = None
224+ triggered_at : datetime | None = None
225+ triggered_by : str | None = None
226+ triggered_reason : str | None = None
227+ restored_at : datetime | None = None
228+ restored_by : str | None = None
229229
230230
231231@dataclass
@@ -235,17 +235,17 @@ class KillSwitchEvent:
235235 id : str
236236 kill_switch_id : str
237237 event_type : KillSwitchEventType
238- created_at : Optional [ datetime ]
239- event_data : Optional [ dict [str , Any ]] = None
240- created_by : Optional [ str ] = None
238+ created_at : datetime | None
239+ event_data : dict [str , Any ] | None = None
240+ created_by : str | None = None
241241
242242
243243# ===========================================================================
244244# Helper Functions
245245# ===========================================================================
246246
247247
248- def _parse_datetime (value : Any ) -> Optional [ datetime ] :
248+ def _parse_datetime (value : Any ) -> datetime | None :
249249 """Parse datetime from API response."""
250250 if value is None :
251251 return None
@@ -358,7 +358,7 @@ def finding_to_dict(finding: Finding) -> dict[str, Any]:
358358 return result
359359
360360
361- def _parse_findings (data : Optional [ list [dict [str , Any ]]] ) -> Optional [ list [Finding ]] :
361+ def _parse_findings (data : list [dict [str , Any ]] | None ) -> list [Finding ] | None :
362362 """Parse list of findings from API response."""
363363 if data is None :
364364 return None
0 commit comments