Coverage for bioimageio/spec/_internal/validated_string_with_inner_node.py: 90%

20 statements  

« prev     ^ index     » next       coverage.py v7.9.1, created at 2025-06-27 09:20 +0000

1from abc import ABC, abstractmethod 

2from typing import Any, Dict, Generic, Type, TypeVar 

3 

4from pydantic import SerializationInfo, SerializerFunctionWrapHandler, model_serializer 

5 

6from .node import Node 

7from .validated_string import ValidatedString 

8 

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

10 

11 

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

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

14 

15 _inner_node_class: Type[InnerNodeT] 

16 _inner_node: InnerNodeT # initalized in _after_validator called in __new__ 

17 

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( 

24 self, 

25 info, # pyright: ignore[reportArgumentType] # taken from pydantic docs 

26 ) 

27 

28 @classmethod 

29 @abstractmethod 

30 def _get_data(cls, valid_string_data: str) -> Dict[str, Any]: ... 

31 

32 def _after_validator(self): 

33 data = self._get_data(self._validated) 

34 self._inner_node = self._inner_node_class.model_validate(data) 

35 return super()._after_validator()