• Kirill Smelkov's avatar
    util/sqlite_connect: Allow 8-bit strings · af7de08e
    Kirill Smelkov authored
    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.
    af7de08e
Name
Last commit
Last update
documentation Loading commit data...
master Loading commit data...
slapos Loading commit data...
.gitignore Loading commit data...
CHANGES.txt Loading commit data...
MANIFEST.in Loading commit data...
README.txt Loading commit data...
bootstrap.py Loading commit data...
buildout.cfg Loading commit data...
computer_definition.cfg.example Loading commit data...
setup.cfg Loading commit data...
setup.py Loading commit data...
slapos-client.cfg.example Loading commit data...
slapos-proxy.cfg.example Loading commit data...
slapos.cfg.example Loading commit data...