misc: by default exclude anonymised data from querysets (#45236)

This commit is contained in:
Frédéric Péters 2020-07-17 14:40:56 +02:00
parent 1d78d7cf02
commit 62c0c20d24
3 changed files with 21 additions and 4 deletions

View File

@ -952,6 +952,11 @@ def test_lazy_formdata_queryset_filter(pub, variable_test_data):
formdata.status = 'draft'
formdata.store()
formdata = data_class()
formdata.just_created()
formdata.data = {'0': 'bar'}
formdata.anonymise()
# filter function
queryset = lazy_formdata.objects.filter_by('foo_foo').apply_filter_value('bar')
assert queryset.count == 7
@ -992,6 +997,10 @@ def test_lazy_formdata_queryset_filter(pub, variable_test_data):
queryset = lazy.objects.same_user().filter_by('foo_foo').apply_filter_value('foo')
assert queryset.count == 4
# filter with anonymised
queryset = lazy_formdata.objects.with_anonymised().filter_by('foo_foo').apply_filter_value('bar')
assert queryset.count == 8
# template tags
context = pub.substitutions.get_context_variables(mode='lazy')
tmpl = Template('{{form_objects|filter_by:"foo_foo"|filter_value:"bar"|count}}')

View File

@ -167,7 +167,7 @@ class NotNull(Criteria):
class Null(Criteria):
sql_op = 'IS NULL'
def __init__(self, attribute):
def __init__(self, attribute, **kwargs):
self.attribute = attribute
def as_sql(self):

View File

@ -27,7 +27,7 @@ from pyproj import Geod
from .qommon import misc, force_str
from .qommon.evalutils import make_datetime
from .qommon.templatetags.qommon import parse_datetime
from .qommon.storage import (Or, Equal, NotEqual)
from .qommon.storage import (Or, Equal, NotEqual, Null)
from .carddef import CardDef
from .formdef import FormDef
@ -38,10 +38,14 @@ class LazyFormDefObjectsManager(object):
self._formdef = formdef
self._formdata = formdata
if criterias is None:
criterias = [NotEqual('status', 'draft')]
criterias = [
NotEqual('status', 'draft'),
Null('anonymised'),
]
# add custom marker to criteria so it can be found back and removed in
# drafts().
# drafts() or with_anonymised()
criterias[0].exclude_drafts = True
criterias[1].exclude_anonymised = True
self._criterias = criterias
self._order_by = order_by
self._cached_resultset = None
@ -89,6 +93,10 @@ class LazyFormDefObjectsManager(object):
criterias = [x for x in self._criterias if not getattr(x, 'exclude_drafts', False)]
return self._clone(criterias + [Equal('status', 'draft')])
def with_anonymised(self):
criterias = [x for x in self._criterias if not getattr(x, 'exclude_anonymised', True)]
return self._clone(criterias)
def done(self):
status_filters = ['wf-%s' % x.id for x in
self._formdef.workflow.get_endpoint_status()]