Skip to content

Commit 879ac09

Browse files
committed
Fix ty serializer registry typing
1 parent e099161 commit 879ac09

1 file changed

Lines changed: 20 additions & 11 deletions

File tree

src/pytask_r/serialization.py

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,32 +4,43 @@
44

55
import json
66
import uuid
7+
from collections.abc import Callable
78
from pathlib import Path
8-
from typing import TYPE_CHECKING
99
from typing import Any
10+
from typing import TypedDict
1011
from typing import cast
1112

1213
from pytask import PTask
1314
from pytask import PTaskWithPath
1415

15-
if TYPE_CHECKING:
16-
from collections.abc import Callable
17-
1816
__all__ = ["SERIALIZERS", "create_path_to_serialized", "serialize_keyword_arguments"]
1917

2018
_HIDDEN_FOLDER = ".pytask/pytask-r"
2119

2220

23-
SERIALIZERS = {"json": {"serializer": json.dumps, "suffix": ".json"}}
21+
SerializerFunc = Callable[..., str]
22+
23+
24+
class SerializerEntry(TypedDict):
25+
"""Describe a serializer function and its output suffix."""
26+
27+
serializer: SerializerFunc
28+
suffix: str
29+
30+
31+
SERIALIZERS: dict[str, SerializerEntry] = {
32+
"json": {"serializer": json.dumps, "suffix": ".json"}
33+
}
2434

2535

2636
try:
2737
import yaml
2838
except ImportError: # pragma: no cover
2939
pass
3040
else:
31-
SERIALIZERS["yaml"] = {"serializer": yaml.dump, "suffix": ".yaml"}
32-
SERIALIZERS["yml"] = {"serializer": yaml.dump, "suffix": ".yml"}
41+
yaml_dump = cast("SerializerFunc", yaml.dump)
42+
SERIALIZERS["yaml"] = {"serializer": yaml_dump, "suffix": ".yaml"}
43+
SERIALIZERS["yml"] = {"serializer": yaml_dump, "suffix": ".yml"}
3344

3445

3546
def create_path_to_serialized(task: PTask, suffix: str) -> Path:
@@ -42,7 +53,7 @@ def create_path_to_serialized(task: PTask, suffix: str) -> Path:
4253

4354

4455
def serialize_keyword_arguments(
45-
serializer: str | Callable[..., str],
56+
serializer: str | SerializerFunc,
4657
path_to_serialized: Path,
4758
kwargs: dict[str, Any],
4859
) -> None:
@@ -51,9 +62,7 @@ def serialize_keyword_arguments(
5162
if serializer not in SERIALIZERS:
5263
msg = f"Serializer {serializer!r} is not known."
5364
raise ValueError(msg)
54-
serializer_func = cast(
55-
"Callable[..., str]", SERIALIZERS[serializer]["serializer"]
56-
)
65+
serializer_func = SERIALIZERS[serializer]["serializer"]
5766
elif callable(serializer):
5867
serializer_func = serializer
5968
else:

0 commit comments

Comments
 (0)