Coverage for src/bioimageio/spec/_internal/validated_string_with_inner_node.py: 89%
18 statements
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-16 10:20 +0000
« prev ^ index » next coverage.py v7.16.2, created at 2026-10-16 10:20 +0000
1from __future__ import annotations
3from abc import ABC, abstractmethod
4from typing import Any, Generic, TypeVar
6from pydantic import SerializationInfo, SerializerFunctionWrapHandler, model_serializer
8from .node import Node
9from .validated_string import ValidatedString
11InnerNodeT = TypeVar("InnerNodeT", bound=Node)
14class ValidatedStringWithInnerNode(ABC, ValidatedString, Generic[InnerNodeT]):
15 """A validated string with further validation and serialization using a `Node`"""
17 _inner_node_class: type[InnerNodeT]
18 _inner_node: InnerNodeT # initalized in _after_validator called in __new__
20 @model_serializer(mode="wrap")
21 def _serialize(
22 self, handler: SerializerFunctionWrapHandler, info: SerializationInfo
23 ):
24 _ = self._inner_node.model_dump(mode=info.mode)
25 return handler(self)
27 @classmethod
28 @abstractmethod
29 def _get_data(cls, valid_string_data: str) -> dict[str, Any]: ...
31 def _after_validator(self):
32 data = self._get_data(self._validated)
33 self._inner_node = self._inner_node_class.model_validate(data)
34 return super()._after_validator()