Răsfoiți Sursa

HUE-771 [beeswax] Can't create a table with another delimiter

Can no go back and forth between common and custom separators
Fix js and form creations
Added a test
Romain Rigaux 13 ani în urmă
părinte
comite
ef4294b178

+ 11 - 4
apps/beeswax/src/beeswax/create_table.py

@@ -183,7 +183,7 @@ def import_wizard(request):
       if do_s2_auto_delim or do_s2_user_delim or cancel_s3_column_def:
       if do_s2_auto_delim or do_s2_user_delim or cancel_s3_column_def:
         return render('choose_delimiter.mako', request, dict(
         return render('choose_delimiter.mako', request, dict(
           action=urlresolvers.reverse(import_wizard),
           action=urlresolvers.reverse(import_wizard),
-          delim_readable=DELIMITER_READABLE[s2_delim_form['delimiter'].data[0]],
+          delim_readable=DELIMITER_READABLE.get(s2_delim_form['delimiter'].data[0], s2_delim_form['delimiter'].data[1]),
           initial=delim_is_auto,
           initial=delim_is_auto,
           file_form=s1_file_form,
           file_form=s1_file_form,
           delim_form=s2_delim_form,
           delim_form=s2_delim_form,
@@ -283,12 +283,19 @@ def _delim_preview(fs, file_form, encoding, file_types, delimiters):
 
 
   n_cols = max([ len(row) for row in fields_list ])
   n_cols = max([ len(row) for row in fields_list ])
   # ``delimiter`` is a MultiValueField. delimiter_0 and delimiter_1 are the sub-fields.
   # ``delimiter`` is a MultiValueField. delimiter_0 and delimiter_1 are the sub-fields.
-  delim_form = beeswax.forms.CreateByImportDelimForm(dict(delimiter_0=delim,
-                                                          delimiter_1='',
+  delimiter_0 = delim
+  delimiter_1 = ''
+  # If custom delimiter
+  if not filter(lambda val: val[0] == delim, beeswax.forms.TERMINATOR_CHOICES):
+    delimiter_0 = '__other__'
+    delimiter_1 = delim
+
+  delim_form = beeswax.forms.CreateByImportDelimForm(dict(delimiter_0=delimiter_0,
+                                                          delimiter_1=delimiter_1,
                                                           file_type=file_type,
                                                           file_type=file_type,
                                                           n_cols=n_cols))
                                                           n_cols=n_cols))
   if not delim_form.is_valid():
   if not delim_form.is_valid():
-    assert False, _('Internal error when constructing the delimiter form')
+    assert False, _('Internal error when constructing the delimiter form: %(error)s' % {'error': delim_form.errors})
   return fields_list, n_cols, delim_form
   return fields_list, n_cols, delim_form
 
 
 
 

+ 4 - 1
apps/beeswax/src/beeswax/templates/choose_delimiter.mako

@@ -58,7 +58,7 @@ ${layout.menubar(section='tables')}
                             ${comps.field(delim_form["delimiter"], render_default=True)}
                             ${comps.field(delim_form["delimiter"], render_default=True)}
                             <input id="submit_preview" class="btn btn-info" type="submit" value="${_('Preview')}" name="submit_preview"/>
                             <input id="submit_preview" class="btn btn-info" type="submit" value="${_('Preview')}" name="submit_preview"/>
                             <span class="help-block">
                             <span class="help-block">
-                            ${_('Enter the column delimiter.  Must be a single character.  Use syntax like "\001" or "\t" for special characters.')}
+                            ${_('Enter the column delimiter. Must be a single character. Use syntax like "\\001" or "\\t" for special characters.')}
                             </span>
                             </span>
                         </div>
                         </div>
                     </div>
                     </div>
@@ -116,9 +116,12 @@ ${layout.menubar(section='tables')}
             }
             }
             else {
             else {
                 $("#id_delimiter_1").hide();
                 $("#id_delimiter_1").hide();
+                $("#id_delimiter_1").val('');
             }
             }
         });
         });
 
 
+        $("#id_delimiter_0").change();
+
         $("#step1").click(function(e){
         $("#step1").click(function(e){
             e.preventDefault();
             e.preventDefault();
             $("input[name='cancel_delim']").click();
             $("input[name='cancel_delim']").click();

+ 3 - 1
apps/beeswax/src/beeswax/templates/create_table_manually.mako

@@ -182,6 +182,7 @@ ${layout.menubar(section='tables')}
 	        </div>
 	        </div>
 	    </fieldset>
 	    </fieldset>
 	</div>
 	</div>
+
 	<div id="step4" class="stepDetails hide">
 	<div id="step4" class="stepDetails hide">
 	    <fieldset>
 	    <fieldset>
 	        <div class="alert alert-info"><h3>${_('Choose a File Format')}</h3>
 	        <div class="alert alert-info"><h3>${_('Choose a File Format')}</h3>
@@ -231,11 +232,11 @@ ${layout.menubar(section='tables')}
 	        </div>
 	        </div>
 	    </fieldset>
 	    </fieldset>
 	</div>
 	</div>
+
 	<div id="step5" class="stepDetails hide">
 	<div id="step5" class="stepDetails hide">
 	    <fieldset>
 	    <fieldset>
 	        <div class="alert alert-info"><h3>${_("Choose Where Your Table's Data is Stored")}</h3>
 	        <div class="alert alert-info"><h3>${_("Choose Where Your Table's Data is Stored")}</h3>
 	        </div>
 	        </div>
-	
 	        <div class="control-group">
 	        <div class="control-group">
 	            <label class="control-label">${_('Location')}</label>
 	            <label class="control-label">${_('Location')}</label>
 	            <div class="controls">
 	            <div class="controls">
@@ -268,6 +269,7 @@ ${layout.menubar(section='tables')}
 	        </div>
 	        </div>
 	    </fieldset>
 	    </fieldset>
 	</div>
 	</div>
+
 	<div id="step6" class="stepDetails hide">
 	<div id="step6" class="stepDetails hide">
 	    <fieldset>
 	    <fieldset>
 	        <div class="alert alert-info"><h3>${_('Configure Table Columns')}</h3>
 	        <div class="alert alert-info"><h3>${_('Configure Table Columns')}</h3>

+ 12 - 0
apps/beeswax/src/beeswax/tests.py

@@ -965,6 +965,7 @@ for x in sys.stdin:
     write_file('/tmp/spacé.dat'.decode('utf-8'), RAW_FIELDS, ' ')
     write_file('/tmp/spacé.dat'.decode('utf-8'), RAW_FIELDS, ' ')
     write_file('/tmp/tab.dat', RAW_FIELDS, '\t')
     write_file('/tmp/tab.dat', RAW_FIELDS, '\t')
     write_file('/tmp/comma.dat', RAW_FIELDS, ',')
     write_file('/tmp/comma.dat', RAW_FIELDS, ',')
+    write_file('/tmp/pipes.dat', RAW_FIELDS, '|')
     write_file('/tmp/comma.dat.gz', RAW_FIELDS, ',', do_gzip=True)
     write_file('/tmp/comma.dat.gz', RAW_FIELDS, ',', do_gzip=True)
 
 
     # Test auto delim selection
     # Test auto delim selection
@@ -994,6 +995,17 @@ for x in sys.stdin:
     })
     })
     assert_equal(len(resp.context['fields_list'][0]), 4)
     assert_equal(len(resp.context['fields_list'][0]), 4)
 
 
+    # Make sure custom delimiters work
+    resp = self.client.post('/beeswax/create/import_wizard', {
+      'submit_preview': 'on',
+      'path': '/tmp/pipes.dat',
+      'name': 'test_create_import',
+      'delimiter_0': '__other__',
+      'delimiter_1': '|',
+      'file_type': 'text',
+    })
+    assert_equal(len(resp.context['fields_list'][0]), 3)
+
     # Test column definition
     # Test column definition
     resp = self.client.post('/beeswax/create/import_wizard', {
     resp = self.client.post('/beeswax/create/import_wizard', {
       'submit_delim': 'on',
       'submit_delim': 'on',

+ 2 - 2
desktop/core/src/desktop/lib/django_forms.py

@@ -486,10 +486,10 @@ def simple_formset_factory(form, add_label="+", formset=BaseSimpleFormSet, initi
 
 
 class DependencyAwareForm(forms.Form):
 class DependencyAwareForm(forms.Form):
   """
   """
-  Inherit from this class and add 
+  Inherit from this class and add
   (condition name, condition value, child name) tuples
   (condition name, condition value, child name) tuples
   to self.dependencies to describe dependencies between
   to self.dependencies to describe dependencies between
-  certain form feilds.  
+  certain form feilds.
 
 
   The semantic meaning is that the field named "child name"
   The semantic meaning is that the field named "child name"
   is required if and only if the field "condition name"
   is required if and only if the field "condition name"