from pathlib import Path from pydantic import BaseModel, Field from src.constants import IBAN_PATTERN, Currency from src.models.b4w import B4wExport from src.models.comdirect import ComdirectCreditCard, ComdirectDepot, ComdirectGiro class Account(BaseModel): name: str model: type[B4wExport | ComdirectGiro | ComdirectCreditCard | ComdirectDepot] iban: str | None = Field(pattern=IBAN_PATTERN, default=None) currency: Currency | None = None class Source(BaseModel): name: str source_path: Path accounts: list[Account] def get_account_names(self) -> list[str]: return [a.name for a in self.accounts] def get_account(self, name: str) -> Account | None: return next((a for a in self.accounts if a.name == name), None)