From 3ae2ae557f01abd9f258bec1eb9c871471815eb0 Mon Sep 17 00:00:00 2001 From: Timi Fasubaa Date: Thu, 10 Aug 2017 14:42:38 -0700 Subject: [PATCH 01/15] [explore] fixed padding bug on filter section --- superset/assets/javascripts/explore/main.css | 1 + 1 file changed, 1 insertion(+) diff --git a/superset/assets/javascripts/explore/main.css b/superset/assets/javascripts/explore/main.css index ab04eaa45688a..388be8f9fa784 100644 --- a/superset/assets/javascripts/explore/main.css +++ b/superset/assets/javascripts/explore/main.css @@ -13,6 +13,7 @@ bottom: 0px; overflow-y: auto; margin-right: 0px; + margin-bottom: 40px; } .fave-unfave-icon, .edit-desc-icon { From 183c10890b4b881b96cbcf4405aac32fd37aa924 Mon Sep 17 00:00:00 2001 From: Timi Fasubaa Date: Wed, 16 Aug 2017 17:53:34 -0700 Subject: [PATCH 02/15] fix slice_id logging issue --- superset/models/core.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/superset/models/core.py b/superset/models/core.py index 4f76c79da8310..9748e65c5549f 100644 --- a/superset/models/core.py +++ b/superset/models/core.py @@ -761,8 +761,8 @@ def wrapper(*args, **kwargs): post_data = request.form or {} d.update(post_data) d.update(kwargs) - slice_id = d.get('slice_id', 0) try: + slice_id = d.get('slice_id') slice_id = int(slice_id) if slice_id else 0 except ValueError: slice_id = 0 @@ -773,12 +773,11 @@ def wrapper(*args, **kwargs): pass stats_logger.incr(f.__name__) value = f(*args, **kwargs) - sesh = db.session() log = cls( action=f.__name__, json=params, - dashboard_id=d.get('dashboard_id') or None, + dashboard_id=d.get('dashboard_id'), slice_id=slice_id, duration_ms=( datetime.now() - start_dttm).total_seconds() * 1000, From 78732d9ea516282181507714218c70a4d434786d Mon Sep 17 00:00:00 2001 From: Timi Fasubaa Date: Thu, 17 Aug 2017 11:56:06 -0700 Subject: [PATCH 03/15] [superset-sqllab] fix slice_id population in appropriate column --- superset/models/core.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/superset/models/core.py b/superset/models/core.py index 9748e65c5549f..31cd675ea2dc6 100644 --- a/superset/models/core.py +++ b/superset/models/core.py @@ -762,7 +762,7 @@ def wrapper(*args, **kwargs): d.update(post_data) d.update(kwargs) try: - slice_id = d.get('slice_id') + slice_id = d.get('slice_id') or json.loads(d.get('form_data')).get('slice_id') slice_id = int(slice_id) if slice_id else 0 except ValueError: slice_id = 0 From a6389783e3242d279c6589f48c4e3c391cb8361d Mon Sep 17 00:00:00 2001 From: Timi Fasubaa Date: Fri, 18 Aug 2017 16:39:48 -0700 Subject: [PATCH 04/15] [explore-logging] test the slice_id logging fix --- tests/core_tests.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tests/core_tests.py b/tests/core_tests.py index 4a7efc4de6aff..c526fb07cc4f9 100644 --- a/tests/core_tests.py +++ b/tests/core_tests.py @@ -41,6 +41,7 @@ def setUpClass(cls): def setUp(self): db.session.query(Query).delete() db.session.query(models.DatasourceAccessRequest).delete() + db.session.query(models.Log).delete() def tearDown(self): db.session.query(Query).delete() @@ -726,6 +727,21 @@ def test_user_profile(self, username='admin'): data = self.get_json_resp('/superset/fave_dashboards_by_username/{}/'.format(username)) self.assertNotIn('message', data) + def test_slice_id_is_always_logged_correctly_on_web_request(self,): + # superset/explore case + slc = db.session.query(models.Slice).filter_by(slice_name='Girls').one() + qry = db.session.query(models.Log).filter_by(slice_id=slc.id, ) + self.get_resp(slc.slice_url) + self.assertEqual(1, qry.count()) + + def test_slice_id_is_always_logged_correctly_on_ajax_request(self,): + # superset/explore_json case + self.login(username="admin") + slc = db.session.query(models.Slice).filter_by(slice_name='Girls').one() + qry = db.session.query(models.Log).filter_by(slice_id=slc.id, ) + slc_url = slc.slice_url.replace("explore", "explore_json") + val = self.get_json_resp(slc_url) + self.assertEqual(1, qry.count()) if __name__ == '__main__': unittest.main() From 8e80b7fb71bc7ec2bfc8e10a67edf4472b118b81 Mon Sep 17 00:00:00 2001 From: Timi Fasubaa Date: Sat, 19 Aug 2017 12:23:42 -0700 Subject: [PATCH 05/15] fix travis errors --- superset/models/core.py | 5 ++++- tests/core_tests.py | 7 ++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/superset/models/core.py b/superset/models/core.py index 31cd675ea2dc6..e002c17cc48ba 100644 --- a/superset/models/core.py +++ b/superset/models/core.py @@ -762,7 +762,10 @@ def wrapper(*args, **kwargs): d.update(post_data) d.update(kwargs) try: - slice_id = d.get('slice_id') or json.loads(d.get('form_data')).get('slice_id') + slice_id = d.get('slice_id') + form_data = d.get('form_data') + if not slice_id and form_data: + slice_id = json.loads(form_data).get('slice_id') slice_id = int(slice_id) if slice_id else 0 except ValueError: slice_id = 0 diff --git a/tests/core_tests.py b/tests/core_tests.py index c526fb07cc4f9..0857229c63d69 100644 --- a/tests/core_tests.py +++ b/tests/core_tests.py @@ -730,8 +730,9 @@ def test_user_profile(self, username='admin'): def test_slice_id_is_always_logged_correctly_on_web_request(self,): # superset/explore case slc = db.session.query(models.Slice).filter_by(slice_name='Girls').one() + db.session.expunge_all() + self.get_resp(slc.slice_url) qry = db.session.query(models.Log).filter_by(slice_id=slc.id, ) - self.get_resp(slc.slice_url) self.assertEqual(1, qry.count()) def test_slice_id_is_always_logged_correctly_on_ajax_request(self,): @@ -740,9 +741,9 @@ def test_slice_id_is_always_logged_correctly_on_ajax_request(self,): slc = db.session.query(models.Slice).filter_by(slice_name='Girls').one() qry = db.session.query(models.Log).filter_by(slice_id=slc.id, ) slc_url = slc.slice_url.replace("explore", "explore_json") - val = self.get_json_resp(slc_url) + self.get_json_resp(slc_url) self.assertEqual(1, qry.count()) + if __name__ == '__main__': unittest.main() - From 9a74baae7dc63f12afc029b7210d23d5a764a6b3 Mon Sep 17 00:00:00 2001 From: Timi Fasubaa Date: Tue, 22 Aug 2017 11:30:52 -0700 Subject: [PATCH 06/15] fix nits pointed out in PR comments --- superset/models/core.py | 12 ++++++------ tests/core_tests.py | 8 ++++---- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/superset/models/core.py b/superset/models/core.py index e002c17cc48ba..50f07d9567556 100644 --- a/superset/models/core.py +++ b/superset/models/core.py @@ -761,14 +761,14 @@ def wrapper(*args, **kwargs): post_data = request.form or {} d.update(post_data) d.update(kwargs) + slice_id = d.get('slice_id') + form_data = d.get('form_data') + try: - slice_id = d.get('slice_id') - form_data = d.get('form_data') - if not slice_id and form_data: - slice_id = json.loads(form_data).get('slice_id') - slice_id = int(slice_id) if slice_id else 0 - except ValueError: + slice_id = int(d.get('slice_id') or json.loads(d.get('form_data')).get('slice_id')) + except Exception: slice_id = 0 + params = "" try: params = json.dumps(d) diff --git a/tests/core_tests.py b/tests/core_tests.py index 0857229c63d69..6c24e43244bcb 100644 --- a/tests/core_tests.py +++ b/tests/core_tests.py @@ -727,21 +727,21 @@ def test_user_profile(self, username='admin'): data = self.get_json_resp('/superset/fave_dashboards_by_username/{}/'.format(username)) self.assertNotIn('message', data) - def test_slice_id_is_always_logged_correctly_on_web_request(self,): + def test_slice_id_is_always_logged_correctly_on_web_request(self): # superset/explore case slc = db.session.query(models.Slice).filter_by(slice_name='Girls').one() db.session.expunge_all() self.get_resp(slc.slice_url) - qry = db.session.query(models.Log).filter_by(slice_id=slc.id, ) + qry = db.session.query(models.Log).filter_by(slice_id=slc.id) self.assertEqual(1, qry.count()) - def test_slice_id_is_always_logged_correctly_on_ajax_request(self,): + def test_slice_id_is_always_logged_correctly_on_ajax_request(self): # superset/explore_json case self.login(username="admin") slc = db.session.query(models.Slice).filter_by(slice_name='Girls').one() - qry = db.session.query(models.Log).filter_by(slice_id=slc.id, ) slc_url = slc.slice_url.replace("explore", "explore_json") self.get_json_resp(slc_url) + qry = db.session.query(models.Log).filter_by(slice_id=slc.id) self.assertEqual(1, qry.count()) From 8f5d9c872223fae3f27c4e43fd81c335f85aa74f Mon Sep 17 00:00:00 2001 From: Timi Fasubaa Date: Tue, 22 Aug 2017 12:03:55 -0700 Subject: [PATCH 07/15] cleanup tests --- tests/core_tests.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/core_tests.py b/tests/core_tests.py index 6c24e43244bcb..245bd880ea444 100644 --- a/tests/core_tests.py +++ b/tests/core_tests.py @@ -730,18 +730,17 @@ def test_user_profile(self, username='admin'): def test_slice_id_is_always_logged_correctly_on_web_request(self): # superset/explore case slc = db.session.query(models.Slice).filter_by(slice_name='Girls').one() - db.session.expunge_all() - self.get_resp(slc.slice_url) qry = db.session.query(models.Log).filter_by(slice_id=slc.id) + self.get_resp(slc.slice_url) self.assertEqual(1, qry.count()) def test_slice_id_is_always_logged_correctly_on_ajax_request(self): # superset/explore_json case self.login(username="admin") slc = db.session.query(models.Slice).filter_by(slice_name='Girls').one() + qry = db.session.query(models.Log).filter_by(slice_id=slc.id) slc_url = slc.slice_url.replace("explore", "explore_json") self.get_json_resp(slc_url) - qry = db.session.query(models.Log).filter_by(slice_id=slc.id) self.assertEqual(1, qry.count()) From d8259333eb9257ee9f1e61284fe2dae1209f711d Mon Sep 17 00:00:00 2001 From: Timi Fasubaa Date: Wed, 23 Aug 2017 13:58:41 -0700 Subject: [PATCH 08/15] made python more beautiful --- superset/models/core.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/superset/models/core.py b/superset/models/core.py index 50f07d9567556..79d15dd0b9433 100644 --- a/superset/models/core.py +++ b/superset/models/core.py @@ -761,14 +761,14 @@ def wrapper(*args, **kwargs): post_data = request.form or {} d.update(post_data) d.update(kwargs) - slice_id = d.get('slice_id') + slice_id = d.get('slice_id') form_data = d.get('form_data') try: - slice_id = int(d.get('slice_id') or json.loads(d.get('form_data')).get('slice_id')) + slice_id = int(slice_id or json.loads(form_data).get('slice_id')) except Exception: slice_id = 0 - + params = "" try: params = json.dumps(d) From cfe69a2b2ebd267afcf909bde51e360ed3874a9c Mon Sep 17 00:00:00 2001 From: Timi Fasubaa Date: Wed, 23 Aug 2017 14:09:24 -0700 Subject: [PATCH 09/15] made python even more beautiful --- superset/models/core.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/superset/models/core.py b/superset/models/core.py index 79d15dd0b9433..9dae9b6971b5f 100644 --- a/superset/models/core.py +++ b/superset/models/core.py @@ -762,11 +762,14 @@ def wrapper(*args, **kwargs): d.update(post_data) d.update(kwargs) slice_id = d.get('slice_id') - form_data = d.get('form_data') + try: - slice_id = int(slice_id or json.loads(form_data).get('slice_id')) - except Exception: + slice_id = int( + slice_id or + json.loads(d.get('form_data')).get('slice_id') + ) + except Exception:www slice_id = 0 params = "" From 942b3bccc09acabf1b92cdb0bef80b9e57012820 Mon Sep 17 00:00:00 2001 From: Timi Fasubaa Date: Wed, 23 Aug 2017 14:12:50 -0700 Subject: [PATCH 10/15] made python even more more beautiful --- superset/models/core.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/superset/models/core.py b/superset/models/core.py index 9dae9b6971b5f..eb982ba30632e 100644 --- a/superset/models/core.py +++ b/superset/models/core.py @@ -767,8 +767,7 @@ def wrapper(*args, **kwargs): try: slice_id = int( slice_id or - json.loads(d.get('form_data')).get('slice_id') - ) + json.loads(d.get('form_data')).get('slice_id')) except Exception:www slice_id = 0 From 9d254a42b1130d4c2f33bccd7a893b03d894e456 Mon Sep 17 00:00:00 2001 From: Timi Fasubaa Date: Wed, 23 Aug 2017 14:14:23 -0700 Subject: [PATCH 11/15] made python even more more more beautiful --- superset/models/core.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/superset/models/core.py b/superset/models/core.py index eb982ba30632e..f759a338e9ae8 100644 --- a/superset/models/core.py +++ b/superset/models/core.py @@ -768,7 +768,7 @@ def wrapper(*args, **kwargs): slice_id = int( slice_id or json.loads(d.get('form_data')).get('slice_id')) - except Exception:www + except Exception: slice_id = 0 params = "" From 84d49bdcca923678aacb49c2b1f52684fb426ba1 Mon Sep 17 00:00:00 2001 From: Timi Fasubaa Date: Wed, 23 Aug 2017 14:37:16 -0700 Subject: [PATCH 12/15] fix lint error --- superset/models/core.py | 1 - 1 file changed, 1 deletion(-) diff --git a/superset/models/core.py b/superset/models/core.py index f759a338e9ae8..300f47e866dc6 100644 --- a/superset/models/core.py +++ b/superset/models/core.py @@ -763,7 +763,6 @@ def wrapper(*args, **kwargs): d.update(kwargs) slice_id = d.get('slice_id') - try: slice_id = int( slice_id or From 1d4b5d749d2122649defafecb8036bdd5f51b86a Mon Sep 17 00:00:00 2001 From: Timi Fasubaa Date: Wed, 23 Aug 2017 14:59:51 -0700 Subject: [PATCH 13/15] make exception handling more specific --- superset/models/core.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/superset/models/core.py b/superset/models/core.py index 300f47e866dc6..ae5756936325e 100644 --- a/superset/models/core.py +++ b/superset/models/core.py @@ -767,7 +767,7 @@ def wrapper(*args, **kwargs): slice_id = int( slice_id or json.loads(d.get('form_data')).get('slice_id')) - except Exception: + except ValueError, TypeError: slice_id = 0 params = "" From b4aa907ffae0df249024447233896ffb527324ad Mon Sep 17 00:00:00 2001 From: Timi Fasubaa Date: Wed, 23 Aug 2017 15:39:57 -0700 Subject: [PATCH 14/15] fixed silly error --- superset/models/core.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/superset/models/core.py b/superset/models/core.py index ae5756936325e..a2483e3e9faac 100644 --- a/superset/models/core.py +++ b/superset/models/core.py @@ -767,7 +767,7 @@ def wrapper(*args, **kwargs): slice_id = int( slice_id or json.loads(d.get('form_data')).get('slice_id')) - except ValueError, TypeError: + except (ValueError, TypeError): slice_id = 0 params = "" From c6036ac1429a656a4bf3d0edcbb2884df2a383b2 Mon Sep 17 00:00:00 2001 From: Timi Fasubaa Date: Wed, 23 Aug 2017 16:41:22 -0700 Subject: [PATCH 15/15] fixed argument indentation --- superset/models/core.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/superset/models/core.py b/superset/models/core.py index a2483e3e9faac..e38c8cde46ee2 100644 --- a/superset/models/core.py +++ b/superset/models/core.py @@ -86,8 +86,7 @@ class CssTemplate(Model, AuditMixinNullable): slice_user = Table('slice_user', metadata, Column('id', Integer, primary_key=True), Column('user_id', Integer, ForeignKey('ab_user.id')), - Column('slice_id', Integer, ForeignKey('slices.id')) - ) + Column('slice_id', Integer, ForeignKey('slices.id'))) class Slice(Model, AuditMixinNullable, ImportMixin): @@ -435,7 +434,7 @@ def alter_positions(dashboard, old_to_new_slc_id_dict): new_filter_immune_slices.append(new_slc_id_str) if ('timed_refresh_immune_slices' in i_params_dict and old_slc_id_str in - i_params_dict['timed_refresh_immune_slices']): + i_params_dict['timed_refresh_immune_slices']): new_timed_refresh_immune_slices.append(new_slc_id_str) if ('expanded_slices' in i_params_dict and old_slc_id_str in i_params_dict['expanded_slices']): @@ -765,8 +764,7 @@ def wrapper(*args, **kwargs): try: slice_id = int( - slice_id or - json.loads(d.get('form_data')).get('slice_id')) + slice_id or json.loads(d.get('form_data')).get('slice_id')) except (ValueError, TypeError): slice_id = 0