[issue29099] sqlite3 timestamp converter cannot handle timezone
Changes by Bozo Kopic <bozo.ko...@gmail.com>: Added file: http://bugs.python.org/file46081/sqlite3-2.patch ___ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue29099> ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue29099] sqlite3 timestamp converter cannot handle timezone
Changes by Bozo Kopic <bozo.ko...@gmail.com>: Removed file: http://bugs.python.org/file46075/sqlite3-2.patch ___ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue29099> ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue29099] sqlite3 timestamp converter cannot handle timezone
Changes by Bozo Kopic <bozo.ko...@gmail.com>: Added file: http://bugs.python.org/file46075/sqlite3-2.patch ___ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue29099> ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue29099] sqlite3 timestamp converter cannot handle timezone
Changes by Bozo Kopic <bozo.ko...@gmail.com>: Removed file: http://bugs.python.org/file46074/sqlite3-2.patch ___ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue29099> ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue29099] sqlite3 timestamp converter cannot handle timezone
Bozo Kopic added the comment: I'm providing new patch that adds support for parsing timezone information. Tests are included. -- Added file: http://bugs.python.org/file46074/sqlite3-2.patch ___ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue29099> ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue29099] sqlite3 timestamp converter cannot handle timezone
Bozo Kopic added the comment: Yes, that is correct. Timezone information is discarded. Submitted patch only resolves occurrence of ValueError. Is additional patch that enables parsing of timezone required? -- ___ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue29099> ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com
[issue29099] sqlite3 timestamp converter ValueError
New submission from Bozo Kopic: Current convert_timestamp function raises exception when parsing timestamps that contain timezone information and have microsecond set to zero. Patch for this behavior is included. Example script that demonstrates this problem: import sys import datetime import sqlite3 import traceback import contextlib def main(): db = sqlite3.connect('test.db', detect_types=sqlite3.PARSE_DECLTYPES) db.executescript(""" CREATE TABLE IF NOT EXISTS test ( timestamp TIMESTAMP) """) t = datetime.datetime.now(tz=datetime.timezone.utc) t = t.replace(microsecond=0) db.executemany("INSERT INTO test VALUES (:timestamp)", [{'timestamp': t}]) db.commit() with contextlib.closing(db.cursor()) as c: try: c.execute('SELECT * FROM test') c.fetchall() print('original implementation success') except Exception as e: print('original implementation failed') traceback.print_exc() c.close() sqlite3.register_converter("timestamp", _sqlite_convert_timestamp) with contextlib.closing(db.cursor()) as c: try: c.execute('SELECT * FROM test') c.fetchall() print('patched implementation success') except Exception as e: print('patched implementation failed') traceback.print_exc() c.close() def _sqlite_convert_timestamp(val): datepart, timepart = val.split(b" ") # this is the patch timepart = timepart.split(b'+', 1)[0].split(b'-', 1)[0] year, month, day = map(int, datepart.split(b"-")) timepart_full = timepart.split(b".") hours, minutes, seconds = map(int, timepart_full[0].split(b":")) if len(timepart_full) == 2: microseconds = int('{:0<6.6}'.format(timepart_full[1].decode())) else: microseconds = 0 val = datetime.datetime(year, month, day, hours, minutes, seconds, microseconds) return val if __name__ == '__main__': sys.exit(main()) -- components: Library (Lib) files: sqlite3.patch keywords: patch messages: 284205 nosy: bozo.kopic priority: normal severity: normal status: open title: sqlite3 timestamp converter ValueError type: crash versions: Python 3.5, Python 3.6, Python 3.7 Added file: http://bugs.python.org/file46067/sqlite3.patch ___ Python tracker <rep...@bugs.python.org> <http://bugs.python.org/issue29099> ___ ___ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com