summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlex Grönholm <alex.gronholm@nextday.fi>2022-07-27 12:31:11 +0300
committerAlex Grönholm <alex.gronholm@nextday.fi>2022-07-27 13:02:08 +0300
commit0bfc8d54f358c0c26d613088547b1b025cd16a6e (patch)
treef25753fb77628aba8e2cf380e5616eee9db2195e /src
parenta72f2e7466cb59af91ca45c5b81d3cf539552366 (diff)
downloadapscheduler-0bfc8d54f358c0c26d613088547b1b025cd16a6e.tar.gz
Fixed JSON serialization of frozensets and UUIDs
Diffstat (limited to 'src')
-rw-r--r--src/apscheduler/serializers/json.py11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/apscheduler/serializers/json.py b/src/apscheduler/serializers/json.py
index c473aa1..2c34500 100644
--- a/src/apscheduler/serializers/json.py
+++ b/src/apscheduler/serializers/json.py
@@ -3,6 +3,7 @@ from __future__ import annotations
from datetime import datetime
from json import dumps, loads
from typing import Any
+from uuid import UUID
import attrs
@@ -21,11 +22,15 @@ class JSONSerializer(Serializer):
self.load_options["object_hook"] = self._object_hook
def _default_hook(self, obj):
- if hasattr(obj, "__getstate__"):
+ if isinstance(obj, datetime):
+ return marshal_date(obj)
+ elif isinstance(obj, UUID):
+ return str(obj)
+ elif isinstance(obj, frozenset):
+ return list(obj)
+ elif hasattr(obj, "__getstate__"):
cls_ref, state = marshal_object(obj)
return {self.magic_key: [cls_ref, state]}
- elif isinstance(obj, datetime):
- return marshal_date(obj)
raise TypeError(
f"Object of type {obj.__class__.__name__!r} is not JSON serializable"