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
« 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
5from pydantic.functional_serializers import PlainSerializer
7ForcePosixPath = Annotated[
8 pathlib.Path,
9 PlainSerializer(lambda x: x.as_posix(), return_type=str, when_used="json"),
10]
13def _sorted(items: Iterable[ForcePosixPath]):
14 return sorted(items, key=lambda x: str.casefold(x.as_posix()))
17SortedPathSet = Annotated[
18 set[ForcePosixPath],
19 PlainSerializer(_sorted, return_type=list[ForcePosixPath], when_used="json"),
20]
23SortedPathList = Annotated[
24 list[ForcePosixPath],
25 PlainSerializer(_sorted, return_type=list[ForcePosixPath]),
26]
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]