graceguo-supercat closed pull request #4639: forms: make csv import parse dates 
accepts a list of columns
URL: https://github.com/apache/incubator-superset/pull/4639
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/superset/forms.py b/superset/forms.py
index eb8aba889a..e846d57ca9 100644
--- a/superset/forms.py
+++ b/superset/forms.py
@@ -10,7 +10,7 @@
 from flask_babel import lazy_gettext as _
 from flask_wtf.file import FileAllowed, FileField, FileRequired
 from wtforms import (
-    BooleanField, IntegerField, SelectField, StringField)
+    BooleanField, Field, IntegerField, SelectField, StringField)
 from wtforms.ext.sqlalchemy.fields import QuerySelectField
 from wtforms.validators import DataRequired, NumberRange, Optional
 
@@ -20,6 +20,32 @@
 config = app.config
 
 
+class CommaSeparatedListField(Field):
+    widget = BS3TextFieldWidget()
+
+    def _value(self):
+        if self.data:
+            return u', '.join(self.data)
+        else:
+            return u''
+
+    def process_formdata(self, valuelist):
+        if valuelist:
+            self.data = [x.strip() for x in valuelist[0].split(',')]
+        else:
+            self.data = []
+
+
+def filter_not_empty_values(value):
+    """Returns a list of non empty values or None"""
+    if not value:
+        return None
+    data = [x for x in value if x]
+    if not data:
+        return None
+    return data
+
+
 class CsvToDatabaseForm(DynamicForm):
     # pylint: disable=E0211
     def all_db_items():
@@ -36,6 +62,7 @@ def all_db_items():
         validators=[
             FileRequired(), FileAllowed(['csv'], _('CSV Files Only!'))])
     con = QuerySelectField(
+        _('Database'),
         query_factory=all_db_items,
         get_pk=lambda a: a.id, get_label=lambda a: a.database_name)
     sep = StringField(
@@ -99,9 +126,12 @@ def all_db_items():
         description=_(
             'Skip blank lines rather than interpreting them '
             'as NaN values.'))
-    parse_dates = BooleanField(
+    parse_dates = CommaSeparatedListField(
         _('Parse Dates'),
-        description=_('Parse date values.'))
+        description=_(
+            'A comma separated list of columns that should be '
+            'parsed as dates.'),
+        filters=[filter_not_empty_values])
     infer_datetime_format = BooleanField(
         _('Infer Datetime Format'),
         description=_(
diff --git a/superset/views/core.py b/superset/views/core.py
index 723e8ccfb7..a080a4b8eb 100755
--- a/superset/views/core.py
+++ b/superset/views/core.py
@@ -339,7 +339,6 @@ def form_get(self, form):
         form.mangle_dupe_cols.data = True
         form.skipinitialspace.data = False
         form.skip_blank_lines.data = True
-        form.parse_dates.data = True
         form.infer_datetime_format.data = True
         form.decimal.data = '.'
         form.if_exists.data = 'append'
diff --git a/tests/form_tests.py b/tests/form_tests.py
new file mode 100644
index 0000000000..82178a213e
--- /dev/null
+++ b/tests/form_tests.py
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+from __future__ import unicode_literals
+
+from tests.base_tests import SupersetTestCase
+from wtforms.form import Form
+
+from superset.forms import (
+    CommaSeparatedListField, filter_not_empty_values)
+
+
+class FormTestCase(SupersetTestCase):
+
+    def test_comma_separated_list_field(self):
+        field = CommaSeparatedListField().bind(Form(), 'foo')
+        field.process_formdata([u''])
+        self.assertEqual(field.data, [u''])
+
+        field.process_formdata(['a,comma,separated,list'])
+        self.assertEqual(field.data, [u'a', u'comma', u'separated', u'list'])
+
+    def test_filter_not_empty_values(self):
+        self.assertEqual(filter_not_empty_values(None), None)
+        self.assertEqual(filter_not_empty_values([]), None)
+        self.assertEqual(filter_not_empty_values(['']), None)
+        self.assertEqual(filter_not_empty_values(['hi']), ['hi'])


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services

Reply via email to