[FIX] base_jsonify: Serialize datetime into the user's timezone
parent
e868810b6f
commit
eb25b23b4e
|
@ -9,4 +9,4 @@ line_length=88
|
||||||
known_odoo=odoo
|
known_odoo=odoo
|
||||||
known_odoo_addons=odoo.addons
|
known_odoo_addons=odoo.addons
|
||||||
sections=FUTURE,STDLIB,THIRDPARTY,ODOO,ODOO_ADDONS,FIRSTPARTY,LOCALFOLDER
|
sections=FUTURE,STDLIB,THIRDPARTY,ODOO,ODOO_ADDONS,FIRSTPARTY,LOCALFOLDER
|
||||||
known_third_party=pytz,setuptools
|
known_third_party=setuptools
|
||||||
|
|
|
@ -3,8 +3,6 @@
|
||||||
# Raphaël Reverdy <raphael.reverdy@akretion.com>
|
# Raphaël Reverdy <raphael.reverdy@akretion.com>
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||||
|
|
||||||
import pytz
|
|
||||||
|
|
||||||
from odoo import api, fields, models
|
from odoo import api, fields, models
|
||||||
from odoo.exceptions import UserError
|
from odoo.exceptions import UserError
|
||||||
from odoo.tools.translate import _
|
from odoo.tools.translate import _
|
||||||
|
@ -74,11 +72,13 @@ class Base(models.AbstractModel):
|
||||||
elif field_type == "date":
|
elif field_type == "date":
|
||||||
value = fields.Date.to_date(value).isoformat()
|
value = fields.Date.to_date(value).isoformat()
|
||||||
elif field_type == "datetime":
|
elif field_type == "datetime":
|
||||||
value = (
|
# Ensures value is a datetime
|
||||||
fields.Datetime.to_datetime(value)
|
value = fields.Datetime.to_datetime(value)
|
||||||
.replace(tzinfo=pytz.utc)
|
# Get the timestamp converted to the client's timezone.
|
||||||
.isoformat()
|
# This call also add the tzinfo into the datetime
|
||||||
)
|
# object
|
||||||
|
value = fields.Datetime.context_timestamp(rec, value)
|
||||||
|
value = value.isoformat()
|
||||||
res[json_key] = value
|
res[json_key] = value
|
||||||
result.append(res)
|
result.append(res)
|
||||||
return result
|
return result
|
||||||
|
|
|
@ -41,6 +41,8 @@ class TestParser(TransactionCase):
|
||||||
self.assertEqual(parser, expected_parser)
|
self.assertEqual(parser, expected_parser)
|
||||||
|
|
||||||
def test_json_export(self):
|
def test_json_export(self):
|
||||||
|
# Enforces TZ to validate the serialization result of a Datetime
|
||||||
|
self.env.user.tz = "Europe/Brussels"
|
||||||
parser = [
|
parser = [
|
||||||
"lang",
|
"lang",
|
||||||
"comment",
|
"comment",
|
||||||
|
@ -105,7 +107,7 @@ class TestParser(TransactionCase):
|
||||||
"email": None,
|
"email": None,
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"create_date": "2019-10-31T14:39:49+00:00",
|
"create_date": "2019-10-31T15:39:49+01:00",
|
||||||
"date": "2019-10-31",
|
"date": "2019-10-31",
|
||||||
}
|
}
|
||||||
json_partner = partner.jsonify(parser)
|
json_partner = partner.jsonify(parser)
|
||||||
|
|
Loading…
Reference in New Issue