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