Skip to content

Commit

Permalink
fix: Bad date type in email text report for table chart (#20119)
Browse files Browse the repository at this point in the history
* fix bad date type in email text report for table chart

* fix test, pylint issue

* add test case for date type
  • Loading branch information
codemaster08240328 committed Jul 7, 2022
1 parent 9622520 commit e7b965a
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 2 deletions.
18 changes: 17 additions & 1 deletion superset/utils/csv.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
import logging
import re
import urllib.request
from typing import Any, Dict, Optional
Expand All @@ -23,6 +24,10 @@
import pandas as pd
import simplejson

from superset.utils.core import GenericDataType

logger = logging.getLogger(__name__)

negative_number_re = re.compile(r"^-[0-9.]+$")

# This regex will match if the string starts with:
Expand Down Expand Up @@ -102,11 +107,22 @@ def get_chart_dataframe(
return None

result = simplejson.loads(content.decode("utf-8"))

# need to convert float value to string to show full long number
pd.set_option("display.float_format", lambda x: str(x))
df = pd.DataFrame.from_dict(result["result"][0]["data"])

try:
# if any column type is equal to 2, need to convert data into
# datetime timestamp for that column.
if GenericDataType.TEMPORAL in result["result"][0]["coltypes"]:
for i in range(len(result["result"][0]["coltypes"])):
if result["result"][0]["coltypes"][i] == GenericDataType.TEMPORAL:
df[result["result"][0]["colnames"][i]] = df[
result["result"][0]["colnames"][i]
].astype("datetime64[ms]")
except BaseException as err:
logger.error(err)

# rebuild hierarchical columns and index
df.columns = pd.MultiIndex.from_tuples(
tuple(colname) if isinstance(colname, list) else (colname,)
Expand Down
58 changes: 57 additions & 1 deletion tests/integration_tests/reports/commands_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
# under the License.
import json
from contextlib import contextmanager
from datetime import datetime, timedelta
from datetime import datetime, timedelta, timezone
from typing import Any, Dict, List, Optional
from unittest.mock import Mock, patch
from uuid import uuid4
Expand Down Expand Up @@ -960,6 +960,8 @@ def test_email_chart_report_schedule_with_text(
mock_open.return_value = response
mock_urlopen.return_value = response
mock_urlopen.return_value.getcode.return_value = 200

# test without date type.
response.read.return_value = json.dumps(
{
"result": [
Expand All @@ -971,6 +973,7 @@ def test_email_chart_report_schedule_with_text(
},
"colnames": [("t1",), ("t2",), ("t3__sum",)],
"indexnames": [(0,), (1,)],
"coltypes": [1, 1],
},
],
}
Expand Down Expand Up @@ -1011,6 +1014,59 @@ def test_email_chart_report_schedule_with_text(
# Assert logs are correct
assert_log(ReportState.SUCCESS)

# test with date type.
dt = datetime(2022, 1, 1).replace(tzinfo=timezone.utc)
ts = datetime.timestamp(dt) * 1000
response.read.return_value = json.dumps(
{
"result": [
{
"data": {
"t1": {0: "c11", 1: "c21"},
"t2__date": {0: ts, 1: ts},
"t3__sum": {0: "c13", 1: "c23"},
},
"colnames": [("t1",), ("t2__date",), ("t3__sum",)],
"indexnames": [(0,), (1,)],
"coltypes": [1, 2],
},
],
}
).encode("utf-8")

with freeze_time("2020-01-01T00:00:00Z"):
AsyncExecuteReportScheduleCommand(
TEST_ID, create_report_email_chart_with_text.id, datetime.utcnow()
).run()

# assert that the data is embedded correctly
table_html = """<table border="1" class="dataframe">
<thead>
<tr>
<th></th>
<th>t1</th>
<th>t2__date</th>
<th>t3__sum</th>
</tr>
</thead>
<tbody>
<tr>
<th>0</th>
<td>c11</td>
<td>2022-01-01</td>
<td>c13</td>
</tr>
<tr>
<th>1</th>
<td>c21</td>
<td>2022-01-01</td>
<td>c23</td>
</tr>
</tbody>
</table>"""

assert table_html in email_mock.call_args[0][2]


@pytest.mark.usefixtures(
"load_birth_names_dashboard_with_slices", "create_report_email_dashboard"
Expand Down

0 comments on commit e7b965a

Please sign in to comment.