Coverage for bioimageio/spec/_internal/validated_string_with_inner_node.py: 90%
20 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-02 14:21 +0000
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-02 14:21 +0000
1from abc import ABC, abstractmethod
2from typing import Any, Dict, Generic, Type, TypeVar
4from pydantic import SerializationInfo, SerializerFunctionWrapHandler, model_serializer
6from .node import Node
7from .validated_string import ValidatedString
9InnerNodeT = TypeVar("InnerNodeT", bound=Node)
12class ValidatedStringWithInnerNode(ABC, ValidatedString, Generic[InnerNodeT]):
13 """A validated string with further validation and serialization using a `Node`"""
15 _inner_node_class: Type[InnerNodeT]
16 _inner_node: InnerNodeT # initalized in _after_validator called in __new__
18 @model_serializer(mode="wrap")
19 def _serialize(
20 self, handler: SerializerFunctionWrapHandler, info: SerializationInfo
21 ):
22 _ = self._inner_node.model_dump(mode=info.mode)
23 return handler(self)
25 @classmethod
26 @abstractmethod
27 def _get_data(cls, valid_string_data: str) -> Dict[str, Any]: ...
29 def _after_validator(self):
30 data = self._get_data(self._validated)
31 self._inner_node = self._inner_node_class.model_validate(data)
32 return super()._after_validator()