Browse Source
feat: integrate msgpack.Timestamp with datetime.datetime by default
pull/1330/head
Ruslan Bel'kov
12 months ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with
14 additions and
2 deletions
-
src/socketio/msgpack_packet.py
|
|
@ -1,17 +1,29 @@ |
|
|
|
__all__ = ["MsgPackPacket"] |
|
|
|
|
|
|
|
import datetime |
|
|
|
import msgpack |
|
|
|
from . import packet |
|
|
|
|
|
|
|
def _default(o): |
|
|
|
if isinstance(o, datetime.datetime): |
|
|
|
return msgpack.Timestamp.from_datetime(o) |
|
|
|
elif isinstance(o, datetime.date): |
|
|
|
dt = datetime.datetime.combine(o, datetime.time(), datetime.timezone.utc) |
|
|
|
return msgpack.Timestamp.from_datetime(dt) |
|
|
|
elif isinstance(o, datetime.time): |
|
|
|
return o.isoformat() |
|
|
|
return o |
|
|
|
|
|
|
|
class MsgPackPacket(packet.Packet): |
|
|
|
uses_binary_events = False |
|
|
|
|
|
|
|
def encode(self): |
|
|
|
"""Encode the packet for transmission.""" |
|
|
|
return msgpack.dumps(self._to_dict()) |
|
|
|
return msgpack.dumps(self._to_dict(), default=_default, datetime=True) # True - convert datetime with timezone to timestamp |
|
|
|
|
|
|
|
def decode(self, encoded_packet): |
|
|
|
"""Decode a transmitted package.""" |
|
|
|
decoded = msgpack.loads(encoded_packet) |
|
|
|
decoded = msgpack.loads(encoded_packet, timestamp=3) # 3 - convert timestamp to datetime |
|
|
|
self.packet_type = decoded['type'] |
|
|
|
self.data = decoded.get('data') |
|
|
|
self.id = decoded.get('id') |
|
|
|