From c1456892db548d7635e4849b23a0ed4d8df245d0 Mon Sep 17 00:00:00 2001 From: Valentin Deniaud Date: Tue, 24 May 2022 14:36:35 +0200 Subject: [PATCH 1/2] dataviz: get request when possible on subfilters update (#65615) --- combo/apps/dataviz/models.py | 6 ++++-- combo/apps/dataviz/views.py | 1 - tests/test_dataviz.py | 21 +++++++++++++++++++++ 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/combo/apps/dataviz/models.py b/combo/apps/dataviz/models.py index df295b6e..077028c7 100644 --- a/combo/apps/dataviz/models.py +++ b/combo/apps/dataviz/models.py @@ -40,6 +40,7 @@ from requests.exceptions import RequestException from combo.data.library import register_cell_class from combo.data.models import CellBase, django_template_validator +from combo.middleware import get_request from combo.utils import get_templated_url, requests, spooler @@ -457,10 +458,10 @@ class ChartNgCell(CellBase): @cached_property def request_context(self): - if not hasattr(self, '_request'): + if not getattr(self, '_request', None): raise MissingRequest - return RequestContext(self._request, self._request.extra_context) + return RequestContext(self._request, getattr(self._request, 'extra_context', {})) def parse_response(self, response, chart): # normalize axis to have a fake axis when there are no dimensions and @@ -713,6 +714,7 @@ class ChartNgCell(CellBase): return self.statistic.filters + self.subfilters def update_subfilters(self): + self._request = get_request() response = self.get_statistic_data() try: response.raise_for_status() diff --git a/combo/apps/dataviz/views.py b/combo/apps/dataviz/views.py index 6bdfc2af..f23e584a 100644 --- a/combo/apps/dataviz/views.py +++ b/combo/apps/dataviz/views.py @@ -57,7 +57,6 @@ class DatavizGraphView(DetailView): if not form.is_valid(): return self.error(_('Wrong parameters.')) - request.extra_context = {} if request.GET.get('ctx'): try: request.extra_context = signing.loads(request.GET['ctx']) diff --git a/tests/test_dataviz.py b/tests/test_dataviz.py index 435092ce..d8ce9d2e 100644 --- a/tests/test_dataviz.py +++ b/tests/test_dataviz.py @@ -2566,3 +2566,24 @@ def test_spooler_refresh_statistics_data_bijoe(statistics): refresh_statistics_data(cell.pk) assert len(bijoe_mock.call['requests']) == 1 + + +@with_httmock(new_api_mock) +def test_chartng_cell_subfilter_page_variable(new_api_statistics, app, admin_user, nocache): + page = Page.objects.create(title='One', slug='index', extra_variables={'foo': 'bar'}) + cell = ChartNgCell.objects.create(page=page, order=2, placeholder='content') + cell.statistic = Statistic.objects.get(slug='with-subfilter') + cell.save() + + app = login(app) + resp = app.get('/manage/pages/%s/' % page.id) + + # set filter value to page variable + field_prefix = 'cdataviz_chartngcell-%s-' % cell.id + resp.forms[1][field_prefix + 'other'] = 'variable:foo' + manager_submit_cell(resp.forms[1]) + + # change choice with subfilters + resp.forms[1][field_prefix + 'form'] = 'food-request' + manager_submit_cell(resp.forms[1]) + assert field_prefix + 'menu' in resp.forms[1].fields -- 2.30.2