diff --git a/lunchable/models/transactions.py b/lunchable/models/transactions.py index 72ce663b..35faca44 100644 --- a/lunchable/models/transactions.py +++ b/lunchable/models/transactions.py @@ -6,6 +6,7 @@ import datetime import logging +import math from enum import Enum from typing import Any, Dict, List, Optional, Union @@ -301,6 +302,21 @@ class TransactionObject(TransactionBaseObject): None, description=_TransactionDescriptions.children ) + @field_validator( + "category_name", + "recurring_payee", + "recurring_cadence", + "recurring_type", + "recurring_currency", + "recurring_description", + mode="before", + ) + def coerce_nan_to_none(cls, v: Any) -> Optional[str]: + """Coerce NaN float values to None for optional string fields.""" + if isinstance(v, float) and math.isnan(v): + return None + return v + @field_validator("plaid_metadata", mode="before") def to_json(cls, x: Optional[str]) -> Optional[Dict[str, Any]]: """