# SPDX-License-Identifier: GPLv3-or-later
# Copyright © 2025 pygaindalf Rui Pinheiro
from typing import ClassVar
from pydantic import Field
from ..mixins import LoggableMixin, NamedMixinMinimal
from .hierarchical import HierarchicalModel
from .hierarchical_root import HierarchicalRootModel
from .single_initialization import SingleInitializationModel
# Loggable + Single Initialization
[docs]
class LoggableModel(LoggableMixin, SingleInitializationModel):
pass
# Hierarchical + Named
[docs]
class HierarchicalNamedModel(HierarchicalModel, NamedMixinMinimal):
PROPAGATE_INSTANCE_NAME_FROM_PARENT: ClassVar[bool] = True
PROPAGATE_INSTANCE_NAME_TO_CHILDREN: ClassVar[bool] = True
instance_name: str | None = Field(default=None, exclude=True, min_length=1, description="Name of the instance.")
[docs]
class HierarchicalRootNamedModel(HierarchicalRootModel, NamedMixinMinimal):
PROPAGATE_INSTANCE_NAME_FROM_PARENT: ClassVar[bool] = True
PROPAGATE_INSTANCE_NAME_TO_CHILDREN: ClassVar[bool] = True
instance_name: str | None = Field(default=None, exclude=True, min_length=1, description="Name of the instance.")
# Loggable + Hierarchical
[docs]
class LoggableHierarchicalRootModel(LoggableMixin, HierarchicalRootModel):
pass
[docs]
class LoggableHierarchicalModel(LoggableMixin, HierarchicalModel):
pass
# Loggable + Hierarchical + Named
[docs]
class LoggableHierarchicalRootNamedModel(LoggableMixin, HierarchicalRootNamedModel):
pass
[docs]
class LoggableHierarchicalNamedModel(LoggableMixin, HierarchicalNamedModel):
pass