From 5a34e18b75f96ed7a91ee34b307f99d4eb7e00dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Mon, 9 Feb 2015 23:36:32 +0100 Subject: [PATCH] Fix SQLite convert interval for min/max value The total_seconds of timedelta min and max can not be used to instanciate a timedelta. So we need to test for such case and return timedelta min or max. --- trytond/backend/sqlite/database.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/trytond/backend/sqlite/database.py b/trytond/backend/sqlite/database.py index f117ee9798..1b68ce7af7 100644 --- a/trytond/backend/sqlite/database.py +++ b/trytond/backend/sqlite/database.py @@ -420,5 +420,16 @@ sqlite.register_adapter(datetime.time, lambda val: val.isoformat()) sqlite.register_converter('TIME', lambda val: datetime.time(*map(int, val.split(':')))) sqlite.register_adapter(datetime.timedelta, lambda val: val.total_seconds()) -sqlite.register_converter('INTERVAL', lambda val: datetime.timedelta( - seconds=float(val))) + + +def convert_interval(value): + value = float(value) + # It is not allowed to instatiate timedelta with the min/max total seconds + if value >= _interval_max: + return datetime.timedelta.max + elif value <= _interval_min: + return datetime.timedelta.min + return datetime.timedelta(seconds=value) +_interval_max = datetime.timedelta.max.total_seconds() +_interval_min = datetime.timedelta.min.total_seconds() +sqlite.register_converter('INTERVAL', convert_interval)