Correctly encode aware, non-UTC datetime objects

http_date() requires timetuple in UTC, but JSONEncoder.default() was
passing a local timetuple instead.
This commit is contained in:
Eugene M. Kim 2017-06-14 11:12:11 -07:00
parent d75d83defd
commit d41e2e6a5d
2 changed files with 5 additions and 1 deletions

View file

@ -79,6 +79,7 @@ Major release, unreleased
- Removed error handler caching because it caused unexpected results for some - Removed error handler caching because it caused unexpected results for some
exception inheritance hierarchies. Register handlers explicitly for each exception inheritance hierarchies. Register handlers explicitly for each
exception if you don't want to traverse the MRO. (`#2362`_) exception if you don't want to traverse the MRO. (`#2362`_)
- Fix incorrect JSON encoding of aware, non-UTC datetimes. (`#2374`_)
.. _#1489: https://github.com/pallets/flask/pull/1489 .. _#1489: https://github.com/pallets/flask/pull/1489
.. _#1621: https://github.com/pallets/flask/pull/1621 .. _#1621: https://github.com/pallets/flask/pull/1621
@ -102,6 +103,7 @@ Major release, unreleased
.. _#2354: https://github.com/pallets/flask/pull/2354 .. _#2354: https://github.com/pallets/flask/pull/2354
.. _#2358: https://github.com/pallets/flask/pull/2358 .. _#2358: https://github.com/pallets/flask/pull/2358
.. _#2362: https://github.com/pallets/flask/pull/2362 .. _#2362: https://github.com/pallets/flask/pull/2362
.. _#2374: https://github.com/pallets/flask/pull/2374
Version 0.12.2 Version 0.12.2
-------------- --------------

View file

@ -1,7 +1,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import io import io
import uuid import uuid
from datetime import date from datetime import date, datetime
from flask.globals import current_app, request from flask.globals import current_app, request
from flask._compat import text_type, PY2 from flask._compat import text_type, PY2
@ -62,6 +62,8 @@ class JSONEncoder(_json.JSONEncoder):
return list(iterable) return list(iterable)
return JSONEncoder.default(self, o) return JSONEncoder.default(self, o)
""" """
if isinstance(o, datetime):
return http_date(o.utctimetuple())
if isinstance(o, date): if isinstance(o, date):
return http_date(o.timetuple()) return http_date(o.timetuple())
if isinstance(o, uuid.UUID): if isinstance(o, uuid.UUID):