Parcourir la source

HUE-4815 [editor] Properly handle unicode characters in log output

Jenny Kim il y a 9 ans
Parent
commit
4bce9923bf

+ 2 - 9
desktop/libs/notebook/src/notebook/api.py

@@ -20,11 +20,11 @@ import logging
 
 
 from django.core.urlresolvers import reverse
 from django.core.urlresolvers import reverse
 from django.db.models import Q
 from django.db.models import Q
-from django.forms import ValidationError
 from django.http import HttpResponseBadRequest, HttpResponseRedirect
 from django.http import HttpResponseBadRequest, HttpResponseRedirect
 from django.utils.translation import ugettext as _
 from django.utils.translation import ugettext as _
 from django.views.decorators.http import require_GET, require_POST
 from django.views.decorators.http import require_GET, require_POST
 
 
+from desktop.lib.i18n import smart_str
 from desktop.lib.django_util import JsonResponse
 from desktop.lib.django_util import JsonResponse
 from desktop.models import Document2, Document
 from desktop.models import Document2, Document
 
 
@@ -288,7 +288,7 @@ def get_logs(request):
 
 
   db = get_api(request, snippet)
   db = get_api(request, snippet)
 
 
-  full_log = str(request.POST.get('full_log', ''))
+  full_log = smart_str(request.POST.get('full_log', ''))
   logs = db.get_log(notebook, snippet, startFrom=startFrom, size=size)
   logs = db.get_log(notebook, snippet, startFrom=startFrom, size=size)
   full_log += logs
   full_log += logs
 
 
@@ -395,13 +395,6 @@ def _historify(notebook, user):
   return history_doc
   return history_doc
 
 
 
 
-def _set_search_field(notebook_doc):
-  notebook = Notebook(document=notebook_doc).get_data()
-  statement = _get_statement(notebook)
-  notebook_doc.search = statement
-  return notebook_doc
-
-
 def _get_statement(notebook):
 def _get_statement(notebook):
   statement = ''
   statement = ''
   if notebook['snippets'] and len(notebook['snippets']) > 0:
   if notebook['snippets'] and len(notebook['snippets']) > 0:

+ 10 - 1
desktop/libs/notebook/src/notebook/connectors/tests/tests_hiveserver2.py

@@ -27,6 +27,7 @@ from nose.tools import assert_equal, assert_true, assert_false
 from django.contrib.auth.models import User
 from django.contrib.auth.models import User
 from django.core.urlresolvers import reverse
 from django.core.urlresolvers import reverse
 
 
+from desktop.lib.i18n import smart_str
 from desktop.lib.django_test_util import make_logged_in_client
 from desktop.lib.django_test_util import make_logged_in_client
 from desktop.lib.test_utils import add_to_group, grant_access
 from desktop.lib.test_utils import add_to_group, grant_access
 from hadoop.pseudo_hdfs4 import is_live_cluster
 from hadoop.pseudo_hdfs4 import is_live_cluster
@@ -520,7 +521,7 @@ class TestHiveserver2ApiWithHadoop(BeeswaxSampleProvider):
 
 
 
 
   def test_query_with_unicode(self):
   def test_query_with_unicode(self):
-    statement = "SELECT * FROM sample_07 WHERE code='validé';"
+    statement = "SELECT * FROM sample_07 WHERE code='';"
 
 
     doc = self.create_query_document(owner=self.user, statement=statement)
     doc = self.create_query_document(owner=self.user, statement=statement)
     notebook = Notebook(document=doc)
     notebook = Notebook(document=doc)
@@ -531,6 +532,14 @@ class TestHiveserver2ApiWithHadoop(BeeswaxSampleProvider):
     data = json.loads(response.content)
     data = json.loads(response.content)
     assert_equal(0, data['status'], data)
     assert_equal(0, data['status'], data)
 
 
+    snippet['result']['handle'] = data['handle']
+
+    response = self.client.post(reverse('notebook:get_logs'),
+                                  {'notebook': notebook.get_json(), 'snippet': json.dumps(snippet)})
+    data = json.loads(response.content)
+    assert_equal(0, data['status'], data)
+    assert_true("SELECT * FROM sample_07 WHERE code='한'" in smart_str(data['logs']))
+
 
 
   def test_get_current_statement(self):
   def test_get_current_statement(self):
     multi_statement = "SELECT description, salary FROM sample_07 LIMIT 20;\r\nSELECT AVG(salary) FROM sample_07;"
     multi_statement = "SELECT description, salary FROM sample_07 LIMIT 20;\r\nSELECT AVG(salary) FROM sample_07;"