from typing import Any from pydantic import BaseModel, ConfigDict from redbot.core.bot import Red class AuroraBaseModel(BaseModel): """Base class for all models in Aurora.""" model_config = ConfigDict(ignored_types=(Red,), arbitrary_types_allowed=True) bot: Red def dump(self) -> dict: return self.model_dump(exclude={"bot"}) def to_json(self, indent: int | None = None, file: Any | None = None, **kwargs): from ..utilities.json import dump, dumps # pylint: disable=cyclic-import return dump(self.dump(), file, indent=indent, **kwargs) if file else dumps(self.model_dump(exclude={"bot"}), indent=indent, **kwargs) class AuroraGuildModel(AuroraBaseModel): """Subclass of AuroraBaseModel that includes a guild_id attribute, and a modified to_json() method to match.""" guild_id: int def dump(self) -> dict: return self.model_dump(exclude={"bot", "guild_id"}) def to_json(self, indent: int | None = None, file: Any | None = None, **kwargs): from ..utilities.json import dump, dumps # pylint: disable=cyclic-import return dump(self.dump(), file, indent=indent, **kwargs) if file else dumps(self.model_dump(exclude={"bot", "guild_id"}), indent=indent, **kwargs)