diff --git a/superset/viz.py b/superset/viz.py index 0c55262325..f879639052 100644 --- a/superset/viz.py +++ b/superset/viz.py @@ -315,9 +315,11 @@ class BaseViz(object): try: cache_value = pkl.loads(cache_value) df = cache_value['df'] - is_loaded = True - self._any_cache_key = cache_key + self.query = cache_value['query'] self._any_cached_dttm = cache_value['dttm'] + self._any_cache_key = cache_key + self.status = utils.QueryStatus.SUCCESS + is_loaded = True except Exception as e: logging.exception(e) logging.error('Error reading cache: ' + @@ -346,6 +348,7 @@ class BaseViz(object): cache_value = dict( dttm=cached_dttm, df=df if df is not None else None, + query=self.query, ) cache_value = pkl.dumps( cache_value, protocol=pkl.HIGHEST_PROTOCOL) diff --git a/tests/cache_tests.py b/tests/cache_tests.py new file mode 100644 index 0000000000..27a2c5f256 --- /dev/null +++ b/tests/cache_tests.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- +"""Unit tests for Superset with caching""" +from __future__ import absolute_import +from __future__ import division +from __future__ import print_function +from __future__ import unicode_literals + +import json + +from superset import cache, db, utils +from .base_tests import SupersetTestCase + + +class CacheTests(SupersetTestCase): + + def __init__(self, *args, **kwargs): + super(CacheTests, self).__init__(*args, **kwargs) + + def setUp(self): + cache.clear() + + def tearDown(self): + cache.clear() + + def test_cache_value(self): + self.login(username='admin') + slc = self.get_slice('Girls', db.session) + + json_endpoint = ( + '/superset/explore_json/{}/{}/' + .format(slc.datasource_type, slc.datasource_id) + ) + resp = self.get_json_resp( + json_endpoint, {'form_data': json.dumps(slc.viz.form_data)}) + resp_from_cache = self.get_json_resp( + json_endpoint, {'form_data': json.dumps(slc.viz.form_data)}) + self.assertFalse(resp['is_cached']) + self.assertTrue(resp_from_cache['is_cached']) + self.assertEqual(resp_from_cache['status'], utils.QueryStatus.SUCCESS) + self.assertEqual(resp['data'], resp_from_cache['data']) + self.assertEqual(resp['query'], resp_from_cache['query']) diff --git a/tests/superset_test_config.py b/tests/superset_test_config.py index 4d13744cf8..3076a0556c 100644 --- a/tests/superset_test_config.py +++ b/tests/superset_test_config.py @@ -23,6 +23,7 @@ PUBLIC_ROLE_LIKE_GAMMA = True AUTH_ROLE_PUBLIC = 'Public' EMAIL_NOTIFICATIONS = False +CACHE_CONFIG = {'CACHE_TYPE': 'simple'} class CeleryConfig(object): BROKER_URL = 'redis://localhost'