Source code for app.portfolio.models.transaction.transaction

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

import weakref

from typing import TYPE_CHECKING, Any

from pydantic import field_validator

from ....util.helpers.empty_class import empty_class
from ..entity import Entity, IncrementingUidMixin
from .transaction_impl import TransactionImpl
from .transaction_journal import TransactionJournal
from .transaction_record import TransactionRecord


[docs] class Transaction( TransactionImpl if TYPE_CHECKING else empty_class(), IncrementingUidMixin, Entity[TransactionRecord, TransactionJournal], init=False, unsafe_hash=True, ): @field_validator("instance_parent_weakref", mode="before") @classmethod def _validate_instance_parent_is_ledger(cls, value: Any) -> Any: from ..ledger import Ledger if value is None: return value parent = value() if isinstance(value, weakref.ref) else value if parent is not None and not isinstance(parent, Ledger): msg = f"Transaction.instance_parent must be a Ledger, got {type(value).__name__}." raise ValueError(msg) return value
TransactionRecord.register_entity_class(Transaction)