dataviz: get request when possible on subfilters update (#65615)

This commit is contained in:
Valentin Deniaud 2022-05-24 14:36:35 +02:00 committed by Frédéric Péters
parent eed78d8f6a
commit d05406d9a0
3 changed files with 25 additions and 3 deletions

View File

@ -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
ctx = RequestContext(self._request, self._request.extra_context)
ctx = RequestContext(self._request, getattr(self._request, 'extra_context', {}))
ctx['request'] = self._request
return ctx
@ -715,6 +716,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()

View File

@ -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'])

View File

@ -2573,3 +2573,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=1, 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.form[field_prefix + 'other'] = 'variable:foo'
manager_submit_cell(resp.form)
# change choice with subfilters
resp.form[field_prefix + 'form'] = 'food-request'
manager_submit_cell(resp.form)
assert field_prefix + 'menu' in resp.form.fields