fix: dashboard changed on calculation (#14450)

This commit is contained in:
Erik Ritter 2021-05-03 13:55:34 -07:00 committed by GitHub
parent 0b9fd24cf3
commit e05a70fc82
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 8 deletions

View File

@ -71,7 +71,8 @@ class DashboardDAO(BaseDAO):
if isinstance(id_or_slug_or_dashboard, str)
else id_or_slug_or_dashboard
)
return dashboard.changed_on
# drop microseconds in datetime to match with last_modified header
return dashboard.changed_on.replace(microsecond=0)
@staticmethod
def get_dashboard_and_slices_changed_on( # pylint: disable=invalid-name
@ -91,7 +92,11 @@ class DashboardDAO(BaseDAO):
else id_or_slug_or_dashboard
)
dashboard_changed_on = DashboardDAO.get_dashboard_changed_on(dashboard)
slices_changed_on = max([slc.changed_on for slc in dashboard.slices])
slices = dashboard.slices
slices_changed_on = max(
[slc.changed_on for slc in slices]
+ ([datetime.fromtimestamp(0)] if len(slices) == 0 else [])
)
# drop microseconds in datetime to match with last_modified header
return max(dashboard_changed_on, slices_changed_on).replace(microsecond=0)
@ -113,8 +118,10 @@ class DashboardDAO(BaseDAO):
else id_or_slug_or_dashboard
)
dashboard_changed_on = DashboardDAO.get_dashboard_changed_on(dashboard)
datasources = dashboard.datasources
datasources_changed_on = max(
[datasource.changed_on for datasource in dashboard.datasources]
[datasource.changed_on for datasource in datasources]
+ ([datetime.fromtimestamp(0)] if len(datasources) == 0 else [])
)
# drop microseconds in datetime to match with last_modified header
return max(dashboard_changed_on, datasources_changed_on).replace(microsecond=0)

View File

@ -86,10 +86,9 @@ class TestDashboardDAO(SupersetTestCase):
session = db.session()
dashboard = session.query(Dashboard).filter_by(slug="world_health").first()
assert dashboard.changed_on == DashboardDAO.get_dashboard_changed_on(dashboard)
assert dashboard.changed_on == DashboardDAO.get_dashboard_changed_on(
"world_health"
)
changed_on = dashboard.changed_on.replace(microsecond=0)
assert changed_on == DashboardDAO.get_dashboard_changed_on(dashboard)
assert changed_on == DashboardDAO.get_dashboard_changed_on("world_health")
old_changed_on = dashboard.changed_on
@ -104,7 +103,14 @@ class TestDashboardDAO(SupersetTestCase):
DashboardDAO.set_dash_metadata(dashboard, data)
session.merge(dashboard)
session.commit()
assert old_changed_on < DashboardDAO.get_dashboard_changed_on(dashboard)
new_changed_on = DashboardDAO.get_dashboard_changed_on(dashboard)
assert old_changed_on.replace(microsecond=0) < new_changed_on
assert new_changed_on == DashboardDAO.get_dashboard_and_datasets_changed_on(
dashboard
)
assert new_changed_on == DashboardDAO.get_dashboard_and_slices_changed_on(
dashboard
)
DashboardDAO.set_dash_metadata(dashboard, original_data)
session.merge(dashboard)