Source code for app.components.agents.transformers.forex_annotator

# SPDX-License-Identifier: GPLv3-or-later
# Copyright © 2025 pygaindalf Rui Pinheiro


from typing import override

from iso4217 import Currency
from pydantic import Field

from ....portfolio.models.annotation.forex import ForexAnnotation
from .transformer import Transformer, TransformerConfig


# MARK: Configuration
[docs] class ForexAnnotatorTransformerConfig(TransformerConfig): currencies: tuple[Currency, ...] = Field(default_factory=tuple, description="The target currencies for forex annotation")
# MARK: Transformer
[docs] class ForexAnnotatorTransformer(Transformer[ForexAnnotatorTransformerConfig]): @override def _do_run(self) -> None: with self.session(reason=f"Annotate transactions with {', '.join(c.name for c in self.config.currencies)} forex data"): for txn in self.context.transactions: ann = ForexAnnotation.get_or_create(txn) ann.journal.add_currency(self.config.currencies)
COMPONENT = ForexAnnotatorTransformer