core: migrate code to benefit from 3.9 stuff (#401)

for now keeping ruff on 3.8 target version, need to sort out modules as well
This commit is contained in:
karlicoss 2024-10-19 20:55:09 +01:00 committed by GitHub
parent bc7c3ac253
commit d3f9a8e8b6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
43 changed files with 515 additions and 404 deletions

View file

@ -1,9 +1,11 @@
from __future__ import annotations
import datetime
from dataclasses import asdict, is_dataclass
from decimal import Decimal
from functools import lru_cache
from functools import cache
from pathlib import Path
from typing import Any, Callable, NamedTuple, Optional
from typing import Any, Callable, NamedTuple
from .error import error_to_json
from .pytest import parametrize
@ -57,12 +59,12 @@ def _default_encode(obj: Any) -> Any:
# could possibly run multiple times/raise warning if you provide different 'default'
# functions or change the kwargs? The alternative is to maintain all of this at the module
# level, which is just as annoying
@lru_cache(maxsize=None)
@cache
def _dumps_factory(**kwargs) -> Callable[[Any], str]:
use_default: DefaultEncoder = _default_encode
# if the user passed an additional 'default' parameter,
# try using that to serialize before before _default_encode
_additional_default: Optional[DefaultEncoder] = kwargs.get("default")
_additional_default: DefaultEncoder | None = kwargs.get("default")
if _additional_default is not None and callable(_additional_default):
def wrapped_default(obj: Any) -> Any:
@ -78,9 +80,9 @@ def _dumps_factory(**kwargs) -> Callable[[Any], str]:
kwargs["default"] = use_default
prefer_factory: Optional[str] = kwargs.pop('_prefer_factory', None)
prefer_factory: str | None = kwargs.pop('_prefer_factory', None)
def orjson_factory() -> Optional[Dumps]:
def orjson_factory() -> Dumps | None:
try:
import orjson
except ModuleNotFoundError:
@ -95,7 +97,7 @@ def _dumps_factory(**kwargs) -> Callable[[Any], str]:
return _orjson_dumps
def simplejson_factory() -> Optional[Dumps]:
def simplejson_factory() -> Dumps | None:
try:
from simplejson import dumps as simplejson_dumps
except ModuleNotFoundError:
@ -115,7 +117,7 @@ def _dumps_factory(**kwargs) -> Callable[[Any], str]:
return _simplejson_dumps
def stdlib_factory() -> Optional[Dumps]:
def stdlib_factory() -> Dumps | None:
import json
from .warnings import high
@ -150,7 +152,7 @@ def _dumps_factory(**kwargs) -> Callable[[Any], str]:
def dumps(
obj: Any,
default: Optional[DefaultEncoder] = None,
default: DefaultEncoder | None = None,
**kwargs,
) -> str:
"""