Coverage for src / competitive_verifier / models / path.py: 100%

10 statements  

« prev     ^ index     » next       coverage.py v7.13.1, created at 2026-03-05 16:00 +0000

1import pathlib 

2from collections.abc import Iterable 

3from typing import Annotated 

4 

5from pydantic.functional_serializers import PlainSerializer 

6 

7ForcePosixPath = Annotated[ 

8 pathlib.Path, 

9 PlainSerializer(lambda x: x.as_posix(), return_type=str, when_used="json"), 

10] 

11 

12 

13def _sorted(items: Iterable[ForcePosixPath]): 

14 return sorted(items, key=lambda x: str.casefold(x.as_posix())) 

15 

16 

17SortedPathSet = Annotated[ 

18 set[ForcePosixPath], 

19 PlainSerializer(_sorted, return_type=list[ForcePosixPath], when_used="json"), 

20] 

21 

22 

23SortedPathList = Annotated[ 

24 list[ForcePosixPath], 

25 PlainSerializer(_sorted, return_type=list[ForcePosixPath]), 

26] 

27 

28RelativeDirectoryPath = Annotated[ 

29 pathlib.Path, 

30 PlainSerializer( 

31 lambda x: f"{x.as_posix()}/" if x != pathlib.Path() else "", 

32 return_type=str, 

33 when_used="json", 

34 ), 

35]