Source code for app.portfolio.collections.uid_proxy.collection

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

from abc import ABCMeta
from collections.abc import Collection
from typing import TYPE_CHECKING, override

from ...util.uid import Uid
from ..proxy import ProxyCollection, ProxyMutableCollection


if TYPE_CHECKING:
    from ...models.entity import EntityBase, EntityRecordBase

type T_ProxyBase = EntityRecordBase | EntityBase


[docs] class UidProxyCollection[ T_Proxy: T_ProxyBase, T_Collection: Collection, ]( ProxyCollection[Uid, T_Proxy, T_Collection], metaclass=ABCMeta, ): @override def _do_convert_item_to_proxy(self, item: Uid, item_type: type[Uid], proxy_type: type[T_Proxy]) -> T_Proxy: proxy = proxy_type.by_uid_or_none(item) if proxy is None: msg = f"No {proxy_type.__name__} with UID {item} found" raise KeyError(msg) return proxy @override def _do_convert_proxy_to_item(self, proxy: T_Proxy, proxy_type: type[T_Proxy], item_type: type[Uid]) -> Uid: return proxy.uid
[docs] class UidProxyMutableCollection[ T_Proxy: T_ProxyBase, T_Collection: Collection, T_Mut_Collection: Collection, ]( UidProxyCollection[T_Proxy, T_Collection], ProxyMutableCollection[Uid, T_Proxy, T_Collection, T_Mut_Collection], metaclass=ABCMeta, ): pass