From e56723a55fa147702b3b304dba87fa562a2d4eda Mon Sep 17 00:00:00 2001 From: Romulo Furtado Date: Thu, 3 Nov 2016 11:39:35 -0200 Subject: [PATCH 1/2] fix(error) handle unicode exception message --- graphql/error/located_error.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/graphql/error/located_error.py b/graphql/error/located_error.py index 87ded24e..88000f67 100644 --- a/graphql/error/located_error.py +++ b/graphql/error/located_error.py @@ -9,7 +9,12 @@ class GraphQLLocatedError(GraphQLError): def __init__(self, nodes, original_error=None): if original_error: - message = str(original_error) + message = ( + original_error.message.encode('utf-8') + if isinstance(original_error.message, unicode) + else str(original_error) + ) + else: message = 'An unknown error occurred.' From d9784056850ce26e5c831bc7fecece01252e7a18 Mon Sep 17 00:00:00 2001 From: Romulo Furtado Date: Thu, 3 Nov 2016 12:40:06 -0200 Subject: [PATCH 2/2] fix(graphql-error) unicode error message --- graphql/error/located_error.py | 10 ++++---- graphql/execution/tests/test_located_error.py | 23 +++++++++++++++++++ 2 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 graphql/execution/tests/test_located_error.py diff --git a/graphql/error/located_error.py b/graphql/error/located_error.py index 88000f67..9111f764 100644 --- a/graphql/error/located_error.py +++ b/graphql/error/located_error.py @@ -9,12 +9,10 @@ class GraphQLLocatedError(GraphQLError): def __init__(self, nodes, original_error=None): if original_error: - message = ( - original_error.message.encode('utf-8') - if isinstance(original_error.message, unicode) - else str(original_error) - ) - + try: + message = str(original_error) + except UnicodeEncodeError: + message = original_error.message.encode('utf-8') else: message = 'An unknown error occurred.' diff --git a/graphql/execution/tests/test_located_error.py b/graphql/execution/tests/test_located_error.py new file mode 100644 index 00000000..0ff9530f --- /dev/null +++ b/graphql/execution/tests/test_located_error.py @@ -0,0 +1,23 @@ +# coding: utf-8 + +from graphql import GraphQLField +from graphql import GraphQLObjectType +from graphql import GraphQLSchema +from graphql import GraphQLString +from graphql import execute +from graphql import parse +from graphql.error import GraphQLLocatedError + + +def test_unicode_error_message(): + ast = parse('query Example { unicode }') + + def resolver(context, *_): + raise Exception(u'UNIÇODÉ!') + + Type = GraphQLObjectType('Type', { + 'unicode': GraphQLField(GraphQLString, resolver=resolver), + }) + + result = execute(GraphQLSchema(Type), ast) + assert isinstance(result.errors[0], GraphQLLocatedError) \ No newline at end of file