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