From 27013e87f53cccbfd2e203f065e416437ba08987 Mon Sep 17 00:00:00 2001 From: Mike Lundy Date: Fri, 2 Mar 2012 00:15:04 +0000 Subject: Fail gracefully when the db doesn't speak unicode When sqlalchemy/mysql doesn't contain the charset=utf8 or use_unicode=1 parameters (and the default mysql connection charset is not utf8), sqlalchemy will connect to mysql in ascii mode; In ascii mode, it will attempt to reencode all input data to latin-1 regardless of the database/table collation setting. This catches that error and turns it into an invalid parameter. (The error message associated with this is something like UnicodeEncodeError: 'latin-1' codec can't encode character u'\u2026' in position 30: ordinal not in range(256)) This fixes bug 944034 and is related to bug 898808 Change-Id: I082b7568ef9e9d2104e13aa58d207535ef201bd3 --- nova/api/openstack/wsgi.py | 3 +++ 1 file changed, 3 insertions(+) (limited to 'nova/api') diff --git a/nova/api/openstack/wsgi.py b/nova/api/openstack/wsgi.py index 9be0501fd..02bf0900c 100644 --- a/nova/api/openstack/wsgi.py +++ b/nova/api/openstack/wsgi.py @@ -574,6 +574,9 @@ class ResourceExceptionHandler(object): if isinstance(ex_value, exception.NotAuthorized): msg = unicode(ex_value) raise Fault(webob.exc.HTTPForbidden(explanation=msg)) + elif isinstance(ex_value, exception.Invalid): + raise Fault(exception.ConvertedException( + code=ex_value.code, explanation=unicode(ex_value))) elif isinstance(ex_value, TypeError): exc_info = (ex_type, ex_value, ex_traceback) LOG.error(_('Exception handling resource: %s') % ex_value, -- cgit