Changeset View
Changeset View
Standalone View
Standalone View
swh/core/api/serializers.py
Show All 13 Lines | |||||
import arrow | import arrow | ||||
import iso8601 | import iso8601 | ||||
import msgpack | import msgpack | ||||
from typing import Any, Dict, Union, Tuple | from typing import Any, Dict, Union, Tuple | ||||
from requests import Response | from requests import Response | ||||
def encode_datetime(dt: datetime.datetime) -> str: | |||||
"""Wrapper of datetime.datetime.isoformat() that forbids naive datetimes.""" | |||||
if dt.tzinfo is None: | |||||
raise ValueError(f"{dt} is a naive datetime.") | |||||
return dt.isoformat() | |||||
ENCODERS = [ | ENCODERS = [ | ||||
(arrow.Arrow, "arrow", arrow.Arrow.isoformat), | (arrow.Arrow, "arrow", arrow.Arrow.isoformat), | ||||
(datetime.datetime, "datetime", datetime.datetime.isoformat), | (datetime.datetime, "datetime", encode_datetime), | ||||
( | ( | ||||
datetime.timedelta, | datetime.timedelta, | ||||
"timedelta", | "timedelta", | ||||
lambda o: { | lambda o: { | ||||
"days": o.days, | "days": o.days, | ||||
"seconds": o.seconds, | "seconds": o.seconds, | ||||
"microseconds": o.microseconds, | "microseconds": o.microseconds, | ||||
}, | }, | ||||
▲ Show 20 Lines • Show All 238 Lines • Show Last 20 Lines |