[docs]@field_validator("timestamp",mode="before")@classmethoddefparse_timestamp(cls,value:str)->datetime:# Ensure the timestamp ends with 'Z' (if it's in UTC) and replace itifvalue.endswith("Z"):value=value.replace("Z","+00:00")# Convert to UTC offset formattry:returndatetime.fromisoformat(value)exceptValueError:raiseValueError(f"Snapshot :: Invalid timestamp format: {value}")
[docs]@model_validator(mode="before")defvalidate_dag_address(cls,values):foraddressin(values.get("owner_address"),values.get("staking_address")):ifaddress:valid_len=len(address)==40valid_prefix=address.startswith("DAG")valid_parity=address[3].isdigit()and0<=int(address[3])<10base58_part=address[4:]valid_base58=(len(base58_part)==36andbase58_part==base58.b58encode(base58.b58decode(base58_part)).decode())# If any validation fails, raise an errorifnot(valid_lenandvalid_prefixandvalid_parityandvalid_base58):raiseValueError(f"CurrencySnapshot :: Invalid address: {address}")returnvalues