From 5fee4aae4edfa01318e8dbcbe8497c014456e0bf Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Wed, 20 Jan 2021 17:58:58 +0100 Subject: [PATCH] do not use count to compute emptyness of formdef (#50368) --- tests/test_wcs.py | 5 ++++- wcs_olap/feeder.py | 4 ++-- wcs_olap/wcs_api.py | 6 ++++++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/tests/test_wcs.py b/tests/test_wcs.py index 129ae06..5d96c98 100644 --- a/tests/test_wcs.py +++ b/tests/test_wcs.py @@ -18,6 +18,7 @@ import datetime import json import pytest import pathlib +from urllib.parse import urlparse, parse_qs import unittest.mock as mock @@ -52,7 +53,9 @@ def test_wcs_fixture(wcs, postgres_db, tmpdir, olap_cmd, caplog): if 'limit' in call_args[0][0]] assert url_with_limits, call_args_list for url_with_limit in url_with_limits: - assert 'limit=500&' in url_with_limit + parsed_qs = parse_qs(urlparse(url_with_limit).query) + assert parsed_qs.get('limit') + assert int(parsed_qs['limit'][0]) <= 500 assert ( 'Le champ « 7th field bad duplicate » a un nom de variable dupliqué ' diff --git a/wcs_olap/feeder.py b/wcs_olap/feeder.py index 4502b76..5a76b49 100644 --- a/wcs_olap/feeder.py +++ b/wcs_olap/feeder.py @@ -491,7 +491,7 @@ class WcsOlapFeeder(object): self.create_referenced_table(table_name, formdef_fields, 'types de formulaire') formdefs = [(form.slug, categories_mapping.get(form.schema.category), - form.schema.name) for form in self.formdefs if form.count] + form.schema.name) for form in self.formdefs if not form.is_empty] self.formdefs_mapping = self.do_referenced_data(table_name, formdefs, 'ref') self.update_table_sequence_number(table_name) @@ -564,7 +564,7 @@ class WcsOlapFeeder(object): self.do_dates_table() self.do_base_table() for formdef in self.formdefs: - if not formdef.count: + if formdef.is_empty: continue self.api.cache = {} try: diff --git a/wcs_olap/wcs_api.py b/wcs_olap/wcs_api.py index a930b94..e21fae5 100644 --- a/wcs_olap/wcs_api.py +++ b/wcs_olap/wcs_api.py @@ -458,6 +458,12 @@ class FormDef(BaseObject): def formdatas(self): return FormDatas(wcs_api=self._wcs_api, formdef=self) + @property + def is_empty(self): + # self.count cannot be used as it's not the count of formdatas but a + # weighted sum of the count on the last 30 days. + return not bool(len(list(self.formdatas.anonymized[0:1]))) + @property def schema(self): if not hasattr(self, '_schema'): -- 2.29.2