diff --git a/server/services/datacommons.py b/server/services/datacommons.py index 5893399046..64b03d5eff 100644 --- a/server/services/datacommons.py +++ b/server/services/datacommons.py @@ -60,6 +60,8 @@ def get_basic_request_headers() -> dict: UNKNOWN_SURFACE) if g.get('use_spanner', False): headers['X-Divert-Spanner'] = 'true' + if should_skip_cache(): + headers['X-Skip-Cache'] = 'true' return headers diff --git a/server/tests/services/datacommons_test.py b/server/tests/services/datacommons_test.py index 8f828bf702..e8339985e8 100644 --- a/server/tests/services/datacommons_test.py +++ b/server/tests/services/datacommons_test.py @@ -22,6 +22,7 @@ from server.lib.cache import cache from server.lib.cache import should_skip_cache +from server.services.datacommons import get_basic_request_headers from server.services.datacommons import nl_search_vars from server.services.datacommons import nl_search_vars_in_parallel from server.services.datacommons import v2node_paginated @@ -306,6 +307,21 @@ def test_should_skip_cache_with_no_header(self): with self.app.test_request_context(): self.assertFalse(should_skip_cache()) + def test_skip_cache_header_forwarded_to_mixer(self): + true_values = ["true", "TRUE", "True", "tRuE"] + for value in true_values: + with self.subTest(value=value): + with self.app.test_request_context(headers={"X-Skip-Cache": value}): + self.assertEqual(get_basic_request_headers().get("X-Skip-Cache"), + "true") + + def test_invalid_skip_cache_header_not_forwarded(self): + false_values = ["false", "", "1", "0", "yes", "no", "invalid", "True "] + for value in false_values: + with self.subTest(value=value): + with self.app.test_request_context(headers={"X-Skip-Cache": value}): + self.assertNotIn("X-Skip-Cache", get_basic_request_headers()) + class TestServiceDataCommonsNLSearchVarsInParallel( unittest.IsolatedAsyncioTestCase):