diff options
author | Alex Grönholm <alex.gronholm@nextday.fi> | 2021-09-02 19:35:40 +0300 |
---|---|---|
committer | Alex Grönholm <alex.gronholm@nextday.fi> | 2021-09-06 01:39:07 +0300 |
commit | 19d75e196aea88032e68535352bbdd9f528a214f (patch) | |
tree | 18b9b6eb6c59c33c5f5adc725f52d1c2c167a2b5 /src/apscheduler/serializers | |
parent | dbe0f8bdd58cef5bd9060ed4c6f9eb5651ce09ad (diff) | |
download | apscheduler-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.py | 10 | ||||
-rw-r--r-- | src/apscheduler/serializers/json.py | 23 | ||||
-rw-r--r-- | src/apscheduler/serializers/pickle.py | 5 |
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 |