You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@superset.apache.org by mi...@apache.org on 2023/08/30 11:45:08 UTC
[superset] branch master updated: fix: Date format when importing international timestamps (#25113)
This is an automated email from the ASF dual-hosted git repository.
michaelsmolina pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/superset.git
The following commit(s) were added to refs/heads/master by this push:
new 00550d7c02 fix: Date format when importing international timestamps (#25113)
00550d7c02 is described below
commit 00550d7c02fd47e69700c846c7aeb50585ac2637
Author: Michael S. Molina <70...@users.noreply.github.com>
AuthorDate: Wed Aug 30 08:45:01 2023 -0300
fix: Date format when importing international timestamps (#25113)
---
.../form_view/csv_to_database_view/edit.html | 229 ++++++++++-----------
superset/views/database/forms.py | 4 +
superset/views/database/views.py | 2 +
3 files changed, 120 insertions(+), 115 deletions(-)
diff --git a/superset/templates/superset/form_view/csv_to_database_view/edit.html b/superset/templates/superset/form_view/csv_to_database_view/edit.html
index 9bbda3366f..0ea4b7b0e5 100644
--- a/superset/templates/superset/form_view/csv_to_database_view/edit.html
+++ b/superset/templates/superset/form_view/csv_to_database_view/edit.html
@@ -1,142 +1,141 @@
-{#
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
-#}
-{% extends "appbuilder/base.html" %}
-{% import 'appbuilder/general/lib.html' as lib %}
-{% import "superset/macros.html" as macros %}
-{% set begin_sep_label = '<td class="col-sm-2" style="border-left: 0; border-top: 0;">' %}
- {% set end_sep_label = '</td>' %}
-{% set begin_sep_field = '<td style="border-right: 0; border-top: 0;">' %}
- {% set end_sep_field = '</td>' %}
-{% import 'superset/form_view/database_schemas_selector.html' as schemas_selector %}
-{% import 'superset/form_view/csv_scripts.html' as csv_scripts %}
-{% import 'superset/form_view/csv_macros.html' as csv_macros %}
-{% block content %}
-{{ lib.panel_begin(title, "edit") }}
+{# Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements. See the NOTICE file distributed with this work
+for additional information regarding copyright ownership. The ASF licenses this
+file to you under the Apache License, Version 2.0 (the "License"); you may not
+use this file except in compliance with the License. You may obtain a copy of
+the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+applicable law or agreed to in writing, software distributed under the License
+is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the specific language
+governing permissions and limitations under the License. #} {% extends
+"appbuilder/base.html" %} {% import 'appbuilder/general/lib.html' as lib %} {%
+import "superset/macros.html" as macros %} {% set begin_sep_label = '
+<td class="col-sm-2" style="border-left: 0; border-top: 0">
+ ' %} {% set end_sep_label = '
+</td>
+' %} {% set begin_sep_field = '
+<td style="border-right: 0; border-top: 0">' %} {% set end_sep_field = '</td>
+' %} {% import 'superset/form_view/database_schemas_selector.html' as
+schemas_selector %} {% import 'superset/form_view/csv_scripts.html' as
+csv_scripts %} {% import 'superset/form_view/csv_macros.html' as csv_macros %}
+{% block content %} {{ lib.panel_begin(title, "edit") }}
<div id="Home" class="tab-pane active">
<form id="model_form" action="" method="post" enctype="multipart/form-data">
{{form.hidden_tag()}}
<div class="form-group">
- <div class="col-md-12" style="padding: 0;">
+ <div class="col-md-12" style="padding: 0">
<table class="table table-bordered">
<tbody>
<tr>
- {{ lib.render_field(form.csv_file, begin_sep_label, end_sep_label, begin_sep_field, end_sep_field) }}
+ {{ lib.render_field(form.csv_file, begin_sep_label, end_sep_label,
+ begin_sep_field, end_sep_field) }}
</tr>
<tr>
- {{ lib.render_field(form.table_name, begin_sep_label, end_sep_label, begin_sep_field, end_sep_field) }}
+ {{ lib.render_field(form.table_name, begin_sep_label,
+ end_sep_label, begin_sep_field, end_sep_field) }}
</tr>
<tr>
- {{ lib.render_field(form.database, begin_sep_label, end_sep_label, begin_sep_field, end_sep_field) }}
+ {{ lib.render_field(form.database, begin_sep_label, end_sep_label,
+ begin_sep_field, end_sep_field) }}
</tr>
<tr>
- {{ lib.render_field(form.schema, begin_sep_label, end_sep_label, begin_sep_field, end_sep_field) }}
+ {{ lib.render_field(form.schema, begin_sep_label, end_sep_label,
+ begin_sep_field, end_sep_field) }}
</tr>
<tr>
- {{ csv_macros.render_delimiter_field(form.delimiter, begin_sep_label, end_sep_label, begin_sep_field, end_sep_field) }}
+ {{ csv_macros.render_delimiter_field(form.delimiter,
+ begin_sep_label, end_sep_label, begin_sep_field, end_sep_field) }}
</tr>
</tbody>
</table>
</div>
</div>
- {% call csv_macros.render_collapsable_form_group("accordion1", "File Settings") %}
- <tr>
- {{ lib.render_field(form.if_exists, begin_sep_label, end_sep_label, begin_sep_field,
- end_sep_field) }}
- </tr>
- <tr>
- {{ lib.render_field(form.skip_initial_space, begin_sep_label, end_sep_label, begin_sep_field,
- end_sep_field) }}
- </tr>
- <tr>
- {{ lib.render_field(form.skip_blank_lines, begin_sep_label, end_sep_label, begin_sep_field,
- end_sep_field) }}
- </tr>
- <tr>
- {{ lib.render_field(form.parse_dates, begin_sep_label, end_sep_label, begin_sep_field,
- end_sep_field) }}
- </tr>
- <tr>
- {{ lib.render_field(form.infer_datetime_format, begin_sep_label, end_sep_label, begin_sep_field,
- end_sep_field) }}
- </tr>
- <tr>
- {{ lib.render_field(form.decimal, begin_sep_label, end_sep_label, begin_sep_field,
- end_sep_field) }}
- </tr>
- <tr>
- {{ lib.render_field(form.null_values, begin_sep_label, end_sep_label, begin_sep_field,
- end_sep_field) }}
- </tr>
- {% endcall %}
- {% call csv_macros.render_collapsable_form_group("accordion2", "Columns") %}
- <tr>
- {{ lib.render_field(form.index_col, begin_sep_label, end_sep_label, begin_sep_field,
- end_sep_field) }}
- </tr>
- <tr>
- {{ lib.render_field(form.dataframe_index, begin_sep_label, end_sep_label, begin_sep_field,
- end_sep_field) }}
- </tr>
- <tr>
- {{ lib.render_field(form.index_label, begin_sep_label, end_sep_label, begin_sep_field,
- end_sep_field) }}
- </tr>
- <tr>
- {{ lib.render_field(form.use_cols, begin_sep_label, end_sep_label, begin_sep_field,
- end_sep_field) }}
- </tr>
- <tr>
- {{ lib.render_field(form.overwrite_duplicate, begin_sep_label, end_sep_label, begin_sep_field,
- end_sep_field) }}
- </tr>
- <tr>
- {{ lib.render_field(form.dtype, begin_sep_label, end_sep_label, begin_sep_field,
- end_sep_field) }}
- </tr>
- {% endcall %}
- {% call csv_macros.render_collapsable_form_group("accordion3", "Rows") %}
- <tr>
- {{ lib.render_field(form.header, begin_sep_label, end_sep_label, begin_sep_field, end_sep_field)
- }}
- </tr>
- <tr>
- {{ lib.render_field(form.nrows, begin_sep_label, end_sep_label, begin_sep_field, end_sep_field)
- }}
- </tr>
- <tr>
- {{ lib.render_field(form.skiprows, begin_sep_label, end_sep_label, begin_sep_field,
- end_sep_field) }}
- </tr>
+ {% call csv_macros.render_collapsable_form_group("accordion1", "File
+ Settings") %}
+ <tr>
+ {{ lib.render_field(form.if_exists, begin_sep_label, end_sep_label,
+ begin_sep_field, end_sep_field) }}
+ </tr>
+ <tr>
+ {{ lib.render_field(form.skip_initial_space, begin_sep_label,
+ end_sep_label, begin_sep_field, end_sep_field) }}
+ </tr>
+ <tr>
+ {{ lib.render_field(form.skip_blank_lines, begin_sep_label, end_sep_label,
+ begin_sep_field, end_sep_field) }}
+ </tr>
+ <tr>
+ {{ lib.render_field(form.parse_dates, begin_sep_label, end_sep_label,
+ begin_sep_field, end_sep_field) }}
+ </tr>
+ <tr>
+ {{ lib.render_field(form.infer_datetime_format, begin_sep_label,
+ end_sep_label, begin_sep_field, end_sep_field) }}
+ </tr>
+ <tr>
+ {{ lib.render_field(form.day_first, begin_sep_label, end_sep_label,
+ begin_sep_field, end_sep_field) }}
+ </tr>
+ <tr>
+ {{ lib.render_field(form.decimal, begin_sep_label, end_sep_label,
+ begin_sep_field, end_sep_field) }}
+ </tr>
+ <tr>
+ {{ lib.render_field(form.null_values, begin_sep_label, end_sep_label,
+ begin_sep_field, end_sep_field) }}
+ </tr>
+ {% endcall %} {% call csv_macros.render_collapsable_form_group("accordion2",
+ "Columns") %}
+ <tr>
+ {{ lib.render_field(form.index_col, begin_sep_label, end_sep_label,
+ begin_sep_field, end_sep_field) }}
+ </tr>
+ <tr>
+ {{ lib.render_field(form.dataframe_index, begin_sep_label, end_sep_label,
+ begin_sep_field, end_sep_field) }}
+ </tr>
+ <tr>
+ {{ lib.render_field(form.index_label, begin_sep_label, end_sep_label,
+ begin_sep_field, end_sep_field) }}
+ </tr>
+ <tr>
+ {{ lib.render_field(form.use_cols, begin_sep_label, end_sep_label,
+ begin_sep_field, end_sep_field) }}
+ </tr>
+ <tr>
+ {{ lib.render_field(form.overwrite_duplicate, begin_sep_label,
+ end_sep_label, begin_sep_field, end_sep_field) }}
+ </tr>
+ <tr>
+ {{ lib.render_field(form.dtype, begin_sep_label, end_sep_label,
+ begin_sep_field, end_sep_field) }}
+ </tr>
+ {% endcall %} {% call csv_macros.render_collapsable_form_group("accordion3",
+ "Rows") %}
+ <tr>
+ {{ lib.render_field(form.header, begin_sep_label, end_sep_label,
+ begin_sep_field, end_sep_field) }}
+ </tr>
+ <tr>
+ {{ lib.render_field(form.nrows, begin_sep_label, end_sep_label,
+ begin_sep_field, end_sep_field) }}
+ </tr>
+ <tr>
+ {{ lib.render_field(form.skiprows, begin_sep_label, end_sep_label,
+ begin_sep_field, end_sep_field) }}
+ </tr>
{% endcall %}
<div class="form-group">
- <div class="col-xs-12" style="padding: 0;">
+ <div class="col-xs-12" style="padding: 0">
{{ lib.render_form_controls() }}
</div>
</div>
</form>
</div>
-{% endblock %}
-{% block add_tail_js %}
-<script src="{{url_for('appbuilder.static',filename='js/ab_keep_tab.js')}}" nonce="{{ macros.get_nonce() }}"></script>
-{% endblock %}
-{% block tail_js %}
- {{ super() }}
- {{ schemas_selector }}
- {{ csv_scripts }}
-{% endblock %}
+{% endblock %} {% block add_tail_js %}
+<script
+ src="{{url_for('appbuilder.static',filename='js/ab_keep_tab.js')}}"
+ nonce="{{ macros.get_nonce() }}"
+></script>
+{% endblock %} {% block tail_js %} {{ super() }} {{ schemas_selector }} {{
+csv_scripts }} {% endblock %}
diff --git a/superset/views/database/forms.py b/superset/views/database/forms.py
index 767f4bb4e5..36bd43e2fe 100644
--- a/superset/views/database/forms.py
+++ b/superset/views/database/forms.py
@@ -201,6 +201,10 @@ class CsvToDatabaseForm(UploadToDatabaseForm):
_("Interpret Datetime Format Automatically"),
description=_("Interpret the datetime format automatically"),
)
+ day_first = BooleanField(
+ _("Day First"),
+ description=_("DD/MM format dates, international and European format"),
+ )
decimal = StringField(
_("Decimal Character"),
default=".",
diff --git a/superset/views/database/views.py b/superset/views/database/views.py
index 43e89bcdf7..6f9344339e 100644
--- a/superset/views/database/views.py
+++ b/superset/views/database/views.py
@@ -168,6 +168,7 @@ class CsvToDatabaseView(CustomFormView):
form.skip_initial_space.data = False
form.skip_blank_lines.data = True
form.infer_datetime_format.data = True
+ form.day_first.data = False
form.decimal.data = "."
form.if_exists.data = "fail"
@@ -199,6 +200,7 @@ class CsvToDatabaseView(CustomFormView):
header=form.header.data if form.header.data else 0,
index_col=form.index_col.data,
infer_datetime_format=form.infer_datetime_format.data,
+ dayfirst=form.day_first.data,
iterator=True,
keep_default_na=not form.null_values.data,
usecols=form.use_cols.data if form.use_cols.data else None,