summaryrefslogtreecommitdiff
path: root/src/apscheduler/serializers
diff options
context:
space:
mode:
authorAlex Grönholm <alex.gronholm@nextday.fi>2021-09-02 19:35:40 +0300
committerAlex Grönholm <alex.gronholm@nextday.fi>2021-09-06 01:39:07 +0300
commit19d75e196aea88032e68535352bbdd9f528a214f (patch)
tree18b9b6eb6c59c33c5f5adc725f52d1c2c167a2b5 /src/apscheduler/serializers
parentdbe0f8bdd58cef5bd9060ed4c6f9eb5651ce09ad (diff)
downloadapscheduler-19d75e196aea88032e68535352bbdd9f528a214f.tar.gz
More refactoring work
* Added mysql and sqlite to the data store testing matrix * Made customizing the SQLAlchemy table metadata easier * Refactored more classes to use attrs instead of dataclasses * Added the get_next_schedule_run_time() method to stores * Made schedulers use get_next_schedule_run_time() to limit their waiting time
Diffstat (limited to 'src/apscheduler/serializers')
-rw-r--r--src/apscheduler/serializers/cbor.py10
-rw-r--r--src/apscheduler/serializers/json.py23
-rw-r--r--src/apscheduler/serializers/pickle.py5
3 files changed, 19 insertions, 19 deletions
diff --git a/src/apscheduler/serializers/cbor.py b/src/apscheduler/serializers/cbor.py
index 9fdf17b..3aefd4d 100644
--- a/src/apscheduler/serializers/cbor.py
+++ b/src/apscheduler/serializers/cbor.py
@@ -1,19 +1,19 @@
-from dataclasses import dataclass, field
from typing import Any, Dict
+import attr
from cbor2 import CBOREncodeTypeError, CBORTag, dumps, loads
from ..abc import Serializer
from ..marshalling import marshal_object, unmarshal_object
-@dataclass
+@attr.define(kw_only=True, eq=False)
class CBORSerializer(Serializer):
type_tag: int = 4664
- dump_options: Dict[str, Any] = field(default_factory=dict)
- load_options: Dict[str, Any] = field(default_factory=dict)
+ dump_options: Dict[str, Any] = attr.field(factory=dict)
+ load_options: Dict[str, Any] = attr.field(factory=dict)
- def __post_init__(self):
+ def __attrs_post_init__(self):
self.dump_options.setdefault('default', self._default_hook)
self.load_options.setdefault('tag_hook', self._tag_hook)
diff --git a/src/apscheduler/serializers/json.py b/src/apscheduler/serializers/json.py
index 7c2513b..7b64c4f 100644
--- a/src/apscheduler/serializers/json.py
+++ b/src/apscheduler/serializers/json.py
@@ -1,33 +1,32 @@
-from dataclasses import dataclass, field
from json import dumps, loads
from typing import Any, Dict
+import attr
+
from ..abc import Serializer
from ..marshalling import marshal_object, unmarshal_object
-@dataclass
+@attr.define(kw_only=True, eq=False)
class JSONSerializer(Serializer):
magic_key: str = '_apscheduler_json'
- dump_options: Dict[str, Any] = field(default_factory=dict)
- load_options: Dict[str, Any] = field(default_factory=dict)
+ dump_options: Dict[str, Any] = attr.field(factory=dict)
+ load_options: Dict[str, Any] = attr.field(factory=dict)
- def __post_init__(self):
+ def __attrs_post_init__(self):
self.dump_options['default'] = self._default_hook
self.load_options['object_hook'] = self._object_hook
- @classmethod
- def _default_hook(cls, obj):
+ def _default_hook(self, obj):
if hasattr(obj, '__getstate__'):
cls_ref, state = marshal_object(obj)
- return {cls.magic_key: [cls_ref, state]}
+ return {self.magic_key: [cls_ref, state]}
raise TypeError(f'Object of type {obj.__class__.__name__!r} is not JSON serializable')
- @classmethod
- def _object_hook(cls, obj_state: Dict[str, Any]):
- if cls.magic_key in obj_state:
- ref, *rest = obj_state[cls.magic_key]
+ def _object_hook(self, obj_state: Dict[str, Any]):
+ if self.magic_key in obj_state:
+ ref, *rest = obj_state[self.magic_key]
return unmarshal_object(ref, *rest)
return obj_state
diff --git a/src/apscheduler/serializers/pickle.py b/src/apscheduler/serializers/pickle.py
index b429990..9092ec7 100644
--- a/src/apscheduler/serializers/pickle.py
+++ b/src/apscheduler/serializers/pickle.py
@@ -1,10 +1,11 @@
-from dataclasses import dataclass
from pickle import dumps, loads
+import attr
+
from ..abc import Serializer
-@dataclass(frozen=True)
+@attr.define(kw_only=True, eq=False)
class PickleSerializer(Serializer):
protocol: int = 4