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

1from __future__ import annotations 

2 

3from abc import ABC, abstractmethod 

4from typing import Any, Generic, TypeVar 

5 

6from pydantic import SerializationInfo, SerializerFunctionWrapHandler, model_serializer 

7 

8from .node import Node 

9from .validated_string import ValidatedString 

10 

11InnerNodeT = TypeVar("InnerNodeT", bound=Node) 

12 

13 

14class ValidatedStringWithInnerNode(ABC, ValidatedString, Generic[InnerNodeT]): 

15 """A validated string with further validation and serialization using a `Node`""" 

16 

17 _inner_node_class: type[InnerNodeT] 

18 _inner_node: InnerNodeT # initalized in _after_validator called in __new__ 

19 

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 ) 

29 

30 @classmethod 

31 @abstractmethod 

32 def _get_data(cls, valid_string_data: str) -> dict[str, Any]: ... 

33 

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()