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

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

24 

25 @classmethod 

26 @abstractmethod 

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

28 

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