mirror of
https://github.com/python-kasa/python-kasa.git
synced 2024-12-22 19:23:34 +00:00
254a9af5c1
Mashumaro is faster and doesn't come with all versioning problems that pydantic does. A basic perf test deserializing all of our discovery results fixtures shows mashumaro as being about 6 times faster deserializing dicts than pydantic. It's much faster parsing from a json string but that's likely because it uses orjson under the hood although that's not really our use case at the moment. ``` PYDANTIC - ms ================= json dict ----------------- 4.7665 1.3268 3.1548 1.5922 3.1130 1.8039 4.2834 2.7606 2.0669 1.3757 2.0163 1.6377 3.1667 1.3561 4.1296 2.7297 2.0132 1.3471 4.0648 1.4105 MASHUMARO - ms ================= json dict ----------------- 0.5977 0.5543 0.5336 0.2983 0.3955 0.2549 0.6516 0.2742 0.5386 0.2706 0.6678 0.2580 0.4120 0.2511 0.3836 0.2472 0.4020 0.2465 0.4268 0.2487 ```
34 lines
822 B
Python
Executable File
34 lines
822 B
Python
Executable File
"""JSON abstraction."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any, Callable
|
|
|
|
try:
|
|
import orjson
|
|
|
|
def dumps(obj: Any, *, default: Callable | None = None) -> str:
|
|
"""Dump JSON."""
|
|
return orjson.dumps(obj).decode()
|
|
|
|
loads = orjson.loads
|
|
except ImportError:
|
|
import json
|
|
|
|
def dumps(obj: Any, *, default: Callable | None = None) -> str:
|
|
"""Dump JSON."""
|
|
# Separators specified for consistency with orjson
|
|
return json.dumps(obj, separators=(",", ":"))
|
|
|
|
loads = json.loads
|
|
|
|
|
|
try:
|
|
from mashumaro.mixins.orjson import DataClassORJSONMixin
|
|
|
|
DataClassJSONMixin = DataClassORJSONMixin
|
|
except ImportError:
|
|
from mashumaro.mixins.json import DataClassJSONMixin as JSONMixin
|
|
|
|
DataClassJSONMixin = JSONMixin # type: ignore[assignment, misc]
|