88
99from typing import List
1010
11- from pydantic import BaseModel , validator , StrictStr , StrictInt , Extra , PrivateAttr
11+ from pydantic import field_validator , BaseModel , StrictStr , StrictInt , PrivateAttr
1212
1313
1414class Impact (str , Enum ):
@@ -52,7 +52,7 @@ class Status(str, Enum):
5252 NO_CHANGE = "NO-CHANGE"
5353
5454
55- class CircuitImpact (BaseModel , extra = Extra . forbid ):
55+ class CircuitImpact (BaseModel , extra = " forbid" ):
5656 """CircuitImpact class.
5757
5858 Each Circuit Maintenance can contain multiple affected circuits, and each one can have a different level of impact.
@@ -73,23 +73,31 @@ class CircuitImpact(BaseModel, extra=Extra.forbid):
7373 ... )
7474 Traceback (most recent call last):
7575 ...
76- pydantic.error_wrappers .ValidationError: 1 validation error for CircuitImpact
76+ pydantic_core._pydantic_core .ValidationError: 1 validation error for CircuitImpact
7777 impact
78- value is not a valid enumeration member; permitted: 'NO-IMPACT', 'REDUCED-REDUNDANCY', 'DEGRADED', 'OUTAGE' ( type=type_error. enum; enum_values=[<Impact.NO_IMPACT: 'NO-IMPACT'>, <Impact.REDUCED_REDUNDANCY: 'REDUCED-REDUNDANCY'>, <Impact.DEGRADED: 'DEGRADED'>, <Impact.OUTAGE: 'OUTAGE'>])
78+ Input should be 'NO-IMPACT', 'REDUCED-REDUNDANCY', 'DEGRADED' or 'OUTAGE' [ type=enum, input_value='wrong impact', input_type=str]
7979 """
8080
8181 circuit_id : StrictStr
8282 # Optional Attributes
8383 impact : Impact = Impact .OUTAGE
8484
8585 # pylint: disable=no-self-argument
86- @validator ("impact" )
86+ @field_validator ("impact" )
87+ @classmethod
8788 def validate_impact_type (cls , value ):
8889 """Validate Impact type."""
8990 if value not in Impact :
9091 raise ValueError ("Not a valid impact type" )
9192 return value
9293
94+ def to_json (self ):
95+ """Return a JSON serializable dict."""
96+ return {
97+ "circuit_id" : self .circuit_id ,
98+ "impact" : self .impact .value ,
99+ }
100+
93101
94102class Metadata (BaseModel ):
95103 """Metadata class to provide context about the Maintenance object."""
@@ -100,7 +108,7 @@ class Metadata(BaseModel):
100108 generated_by_llm : bool = False
101109
102110
103- class Maintenance (BaseModel , extra = Extra . forbid ):
111+ class Maintenance (BaseModel , extra = " forbid" ):
104112 """Maintenance class.
105113
106114 Mandatory attributes:
@@ -164,34 +172,40 @@ class Maintenance(BaseModel, extra=Extra.forbid):
164172
165173 def __init__ (self , ** data ):
166174 """Initialize the Maintenance object."""
167- self . _metadata = data .pop ("_metadata" )
175+ metadata = data .pop ("_metadata" )
168176 super ().__init__ (** data )
177+ self ._metadata = metadata
169178
170- # pylint: disable=no-self-argument
171- @validator ( "status" )
179+ @ field_validator ( "status" )
180+ @classmethod
172181 def validate_status_type (cls , value ):
173182 """Validate Status type."""
174183 if value not in Status :
175184 raise ValueError ("Not a valid status type" )
176185 return value
177186
178- @validator ("provider" , "account" , "maintenance_id" , "organizer" )
187+ @field_validator ("provider" , "account" , "maintenance_id" , "organizer" )
188+ @classmethod
179189 def validate_empty_strings (cls , value ):
180190 """Validate emptry strings."""
181191 if value in ["" , "None" ]:
182192 raise ValueError ("String is empty or 'None'" )
183193 return value
184194
185- @validator ("circuits" )
195+ @field_validator ("circuits" )
196+ @classmethod
186197 def validate_empty_circuits (cls , value , values ):
187198 """Validate non-cancel notifications have a populated circuit list."""
199+ values = values .data
188200 if len (value ) < 1 and str (values ["status" ]) in ("CANCELLED" , "COMPLETED" ):
189201 raise ValueError ("At least one circuit has to be included in the maintenance" )
190202 return value
191203
192- @validator ("end" )
204+ @field_validator ("end" )
205+ @classmethod
193206 def validate_end_time (cls , end , values ):
194207 """Validate that End time happens after Start time."""
208+ values = values .data
195209 if "start" not in values :
196210 raise ValueError ("Start time is a mandatory attribute." )
197211 start = values ["start" ]
@@ -209,6 +223,6 @@ def to_json(self) -> str:
209223 return json .dumps (self , default = lambda o : o .__dict__ , sort_keys = True , indent = 2 )
210224
211225 @property
212- def metadata (self ):
226+ def metadata (self ) -> Metadata :
213227 """Get Maintenance Metadata."""
214228 return self ._metadata
0 commit comments