tools (datetime, utils): fix incorrect use of naive object:
`tools.datetime.format_datetime` was expecting aware datetime objects while `tools.utils.xmpp_date` was returning naive datetime objects. A check has been added to the former one, and latter one has been modified to return aware datetime objects.
This commit is contained in:
parent
d1b5ff0c41
commit
ed3660c4a7
2 changed files with 13 additions and 7 deletions
|
|
@ -19,6 +19,7 @@
|
|||
# Type-check with `mypy --strict`
|
||||
# Lint with `pylint`
|
||||
|
||||
from sat.core import exceptions
|
||||
from datetime import date, datetime, time, timezone
|
||||
import re
|
||||
from typing import Optional, Tuple
|
||||
|
|
@ -95,6 +96,7 @@ def format_datetime(
|
|||
) -> str:
|
||||
"""
|
||||
@param value: The datetime to format. Defaults to the current datetime.
|
||||
must be an aware datetime object (timezone must be specified)
|
||||
@param include_microsecond: Include the microsecond of the datetime in the output.
|
||||
@return: The datetime formatted according to the DateTime profile specified in
|
||||
XEP-0082. The datetime is always converted to UTC before formatting to avoid
|
||||
|
|
@ -105,11 +107,14 @@ def format_datetime(
|
|||
# We format the time in UTC, since the %z formatter of strftime doesn't include colons
|
||||
# to separate hours and minutes which is required by XEP-0082. UTC allows us to put a
|
||||
# simple letter 'Z' as the time zone definition.
|
||||
value = (
|
||||
datetime.now(timezone.utc)
|
||||
if value is None
|
||||
else value.astimezone(timezone.utc) # pylint: disable=no-member
|
||||
)
|
||||
if value is not None:
|
||||
if value.tzinfo is None:
|
||||
raise exceptions.InternalError(
|
||||
"an aware datetime object must be used, but a naive one has been provided"
|
||||
)
|
||||
value = value.astimezone(timezone.utc) # pylint: disable=no-member
|
||||
else:
|
||||
value = datetime.now(timezone.utc)
|
||||
|
||||
if include_microsecond:
|
||||
return value.strftime("%Y-%m-%dT%H:%M:%S.%fZ")
|
||||
|
|
|
|||
|
|
@ -152,8 +152,9 @@ def xmpp_date(
|
|||
@param with_time(bool): if True include the time
|
||||
@return(unicode): XEP-0082 formatted date and time
|
||||
"""
|
||||
dtime = datetime.datetime.utcfromtimestamp(
|
||||
time.time() if timestamp is None else timestamp
|
||||
dtime = datetime.datetime.fromtimestamp(
|
||||
time.time() if timestamp is None else timestamp,
|
||||
datetime.timezone.utc
|
||||
)
|
||||
|
||||
return format_datetime(dtime) if with_time else format_date(dtime.date())
|
||||
|
|
|
|||
Loading…
Reference in a new issue