Source code for app.util.models.single_initialization

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

from typing import Any, Self, final, override

from pydantic import BaseModel, PrivateAttr

from ..callguard import callguard_class


[docs] @callguard_class(ignore_patterns=("_SingleInitializationModel__initialized")) class SingleInitializationModel(BaseModel): __initialized: bool = PrivateAttr(default=False)
[docs] def __new__(cls, *args, **kwargs) -> Self: instance = super().__new__(cls) instance.__initialized = False return instance
[docs] def __init__(self, *args, **kwargs) -> None: if self.initialized: msg = f"Model {self} is already initialized." raise RuntimeError(msg) super().__init__(*args, **kwargs) self.__initialized = True
[docs] @override def model_post_init(self, context: Any) -> None: super().model_post_init(context)
@final @property def initialized(self) -> bool: return self.__initialized