Coverage for tortoise_serializer/resolver.py: 56%

9 statements  

« prev     ^ index     » next       coverage.py v7.8.0, created at 2025-04-17 19:39 +0200

1from typing import Any, Awaitable, Callable 

2 

3 

4def resolver(field_name: str): 

5 """Decorator to mark a method as a resolver for one field. 

6 The decorated method MUST be defined within a Serializer class. 

7 

8 Args: 

9 field_name: The name of the field this method resolves. 

10 

11 Example: 

12 ```python 

13 @resolver("full_name") 

14 def resolve_full_name(cls, instance: Model, context: Any) -> str: 

15 return f"{instance.first_name} {instance.last_name}" 

16 ``` 

17 """ 

18 

19 def decorator( 

20 func: Callable[..., Awaitable[Any]], 

21 ) -> Callable[..., Awaitable[Any]]: 

22 if not hasattr(func, "_resolver_fields"): 

23 func._resolver_fields = [] 

24 

25 func._resolver_fields.append(field_name) 

26 

27 # Apply classmethod decorator effect 

28 func = classmethod(func) 

29 return func 

30 

31 return decorator