|
6 | 6 | import json
|
7 | 7 | from base64 import b64decode, b64encode
|
8 | 8 | from functools import partial
|
9 |
| -from typing import Any, Callable |
| 9 | +from typing import TYPE_CHECKING, Any, Callable |
10 | 10 |
|
11 | 11 | from numpy import frombuffer, generic, ndarray
|
12 | 12 | from numpy.lib.format import descr_to_dtype, dtype_to_descr
|
13 | 13 |
|
| 14 | +if TYPE_CHECKING: # pragma: no cover |
| 15 | + from _typeshed import SupportsRead |
| 16 | + |
14 | 17 |
|
15 | 18 | def default(
|
16 | 19 | o: Any, *, fallback_default: Callable[[Any], dict[str, Any]] | None = None
|
@@ -88,19 +91,25 @@ def dumps(*args: Any, cls: type[json.JSONEncoder] | None = None, **kwargs: Any)
|
88 | 91 | return _dumps(*args, cls=_patch_encoder, **kwargs) # type: ignore[arg-type]
|
89 | 92 |
|
90 | 93 |
|
91 |
| -def loads(*args: Any, **kwargs: Any) -> Any: |
92 |
| - kwargs.setdefault("object_hook", object_hook) |
93 |
| - return _loads(*args, **kwargs) |
| 94 | +def loads( |
| 95 | + *args: Any, object_hook: Callable[[dict], Any] | None = None, **kwargs: Any |
| 96 | +) -> Any: |
| 97 | + return _loads( |
| 98 | + *args, |
| 99 | + object_hook=_hook |
| 100 | + if object_hook is None |
| 101 | + else lambda dct: _hook(object_hook(dct)), |
| 102 | + **kwargs, |
| 103 | + ) |
94 | 104 |
|
95 | 105 |
|
96 | 106 | def dump(*args: Any, cls: type[json.JSONEncoder] | None = None, **kwargs: Any) -> None:
|
97 | 107 | kwargs["user_cls"] = cls
|
98 | 108 | return _dump(*args, cls=_patch_encoder, **kwargs) # type: ignore[arg-type]
|
99 | 109 |
|
100 | 110 |
|
101 |
| -def load(*args: Any, **kwargs: Any) -> Any: |
102 |
| - kwargs.setdefault("object_hook", object_hook) |
103 |
| - return _load(*args, **kwargs) |
| 111 | +def load(fp: SupportsRead[str | bytes], **kwargs: Any) -> Any: |
| 112 | + return loads(fp.read(), **kwargs) |
104 | 113 |
|
105 | 114 |
|
106 | 115 | def patch() -> None:
|
|
0 commit comments