Coverage for backend / app / base_schemas.py: 100%

21 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-03-17 21:34 +0000

1"""Pydantic schemas for input and output data validation and serialisation""" 

2 

3import datetime as dt 

4from typing import Annotated 

5 

6from pydantic import BaseModel, EmailStr, BeforeValidator 

7 

8from app.utils import clean_email 

9 

10EmailField = Annotated[EmailStr, BeforeValidator(clean_email)] 

11 

12 

13def serialise_relationships(value: list) -> list[int]: 

14 """Serialise relationships to list of IDs""" 

15 

16 if not value: 

17 return [] 

18 if isinstance(value[0], int): 

19 return value 

20 return [item.id for item in value] 

21 

22 

23class Out(BaseModel): 

24 """Base model for all output schemas""" 

25 

26 id: int 

27 created_at: dt.datetime 

28 modified_at: dt.datetime 

29 

30 

31class OwnedOut(Out): 

32 """Base model for all output schemas owned by a user""" 

33 

34 owner_id: int 

35 

36 

37class GenericResponse(BaseModel): 

38 success: bool 

39 message: str 

40 error_code: int | None = None