"""
Base model class for Centralize models
Provides common serialization functionality for all models.
"""
from ace.utils import convert_to_dict
from pydantic import BaseModel
import re
[docs]
class ModelBase:
"""Base class providing dictionary serialization for all centralize models."""
[docs]
def as_dict(self):
return convert_to_dict(self)
[docs]
@classmethod
def from_dict(cls, data: dict, exclude_none: bool = True):
# filtered_data = {k: v for k, v in data.items() if v is not None} if exclude_none else data
try:
return cls(**data)
except TypeError:
# If validation fails, attempt to convert keys to snake_case and try again
snake_case_data = {cls._to_snake_case(k): v for k, v in data.items()}
return cls(**snake_case_data)
@staticmethod
def _to_snake_case(name: str) -> str:
return re.sub(r'(?<!^)(?=[A-Z])', '_', name).lower()