util/sqlite_connect: Allow 8-bit strings
Because e.g. for the following instance parameters <?xml version='1.0' encoding='utf-8'?> <instance> <parameter id="text">Привет Мир!</parameter> </instance> we get the following DB query 'UPDATE %s SET slap_state="busy" ,software_release=? ,partition_reference=? ,requested_by=? ,software_type=? ,xml=? WHERE reference=? AND computer_reference=?', ['http://sr//', 'myinstance', 'slappart0', 'default', '<?xml version=\'1.0\' encoding=\'utf-8\'?>\n<instance>\n <parameter id="text">\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82\xd0\x9c\xd0\xb8\xd1\x80!</parameter>\n</instance>\n', 'slappart6', 'computer'] which fails the following way: File ".../site-packages/flask/app.py", line 1817, in wsgi_app response = self.full_dispatch_request() File ".../site-packages/flask/app.py", line 1477, in full_dispatch_request rv = self.handle_user_exception(e) File ".../site-packages/flask/app.py", line 1381, in handle_user_exception reraise(exc_type, exc_value, tb) File ".../site-packages/flask/app.py", line 1475, in full_dispatch_request rv = self.dispatch_request() File ".../site-packages/flask/app.py", line 1461, in dispatch_request return self.view_functions[rule.endpoint](**req.view_args) File "slapos/proxy/views.py", line 393, in requestComputerPartition software_instance = requestNotSlave(**parsed_request_dict) File "slapos/proxy/views.py", line 609, in requestNotSlave execute_db('partition', q, args) File "slapos/proxy/views.py", line 142, in execute_db cur = db.execute(query, args) ProgrammingError: You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings. our instance parameters is always XML UTF-8 encoded, and thus it is not unicode and we cannot go the 'use unicode always' way. So autotune sqlite connections on open to support 8-bit strings.
Showing
Please register or sign in to comment