فهرست منبع

HUE-3741 [metastore] Display field validation errors on create table wizard

Jenny Kim 9 سال پیش
والد
کامیت
178a2e0f19
1فایلهای تغییر یافته به همراه17 افزوده شده و 0 حذف شده
  1. 17 0
      apps/beeswax/src/beeswax/create_table.py

+ 17 - 0
apps/beeswax/src/beeswax/create_table.py

@@ -23,6 +23,7 @@ import logging
 import re
 
 from django.core.urlresolvers import reverse
+from django.forms.util import ErrorDict
 from django.http import QueryDict
 from django.utils.translation import ugettext as _
 
@@ -80,6 +81,9 @@ def create_table(request, database='default'):
         proposed_query = proposed_query.decode('utf-8')
         table_name = form.table.cleaned_data['name']
         return _submit_create_and_load(request, proposed_query, table_name, None, False, database=database)
+      else:
+        all_errors = '\n'.join(_collect_multiform_errors(form))
+        raise PopupException(_("Failed to create table due to validation errors."), detail=all_errors)
   else:
     form.bind()
 
@@ -94,6 +98,19 @@ def create_table(request, database='default'):
   })
 
 
+def _collect_multiform_errors(multiform):
+  all_errors = []
+  for name, subform in multiform.get_subforms():
+    if isinstance(subform.errors, ErrorDict):
+      all_errors.extend(['%(field)s: %(msg)s' % {'field': k, 'msg': v[0]} for k, v in subform.errors.items()])
+    elif isinstance(subform.errors, list):
+      for error in subform.errors:
+        all_errors.extend(['%(field)s: %(msg)s' % {'field': k, 'msg': v[0]} for k, v in error.items()])
+    else:
+      all_errors.append(str(subform.errors))
+  return all_errors
+
+
 IMPORT_PEEK_SIZE = 5 * 1024**2
 IMPORT_PEEK_NLINES = 10
 DELIMITERS = [ hive_val for hive_val, desc, ascii in TERMINATORS ]