Coverage for src/bioimageio/spec/_internal/validated_string_with_inner_node.py: 89%
18 statements
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-18 09:17 +0000
« prev ^ index » next coverage.py v7.15.4, created at 2026-08-18 09:17 +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(
26 self,
27 info, # pyright: ignore[reportArgumentType] # taken from pydantic docs
28 )
30 @classmethod
31 @abstractmethod
32 def _get_data(cls, valid_string_data: str) -> dict[str, Any]: ...
34 def _after_validator(self):
35 data = self._get_data(self._validated)
36 self._inner_node = self._inner_node_class.model_validate(data)
37 return super()._after_validator()