From 4be42a5b507757ee38d8604e58f28cf7a29da31c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Thu, 19 Mar 2015 21:44:54 +0100 Subject: [PATCH] Fix encoding/decoding in adapter/converter of sqlite for Python3 bytes must be used when storing raw values of adapter in blob bytes is received by the converter and so it must be decoded into unicode issue3211 --- trytond/backend/sqlite/database.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/trytond/backend/sqlite/database.py b/trytond/backend/sqlite/database.py index 9a912854b5..1c8940a8bc 100644 --- a/trytond/backend/sqlite/database.py +++ b/trytond/backend/sqlite/database.py @@ -419,12 +419,12 @@ class Cursor(CursorInterface): def has_constraint(self): return False -sqlite.register_converter('NUMERIC', lambda val: Decimal(val)) +sqlite.register_converter('NUMERIC', lambda val: Decimal(val.decode('utf-8'))) if sys.version_info[0] == 2: sqlite.register_adapter(Decimal, lambda val: buffer(str(val))) sqlite.register_adapter(bytearray, lambda val: buffer(val)) else: - sqlite.register_adapter(Decimal, lambda val: bytes(str(val))) + sqlite.register_adapter(Decimal, lambda val: str(val).encode('utf-8')) def adapt_datetime(val): @@ -432,7 +432,7 @@ def adapt_datetime(val): sqlite.register_adapter(datetime.datetime, adapt_datetime) sqlite.register_adapter(datetime.time, lambda val: val.isoformat()) sqlite.register_converter('TIME', lambda val: datetime.time(*map(int, - val.split(':')))) + val.decode('utf-8').split(':')))) sqlite.register_adapter(datetime.timedelta, lambda val: val.total_seconds())