misc: record LoggedError when qs filter on unknown attribute (#49307)
This commit is contained in:
parent
10a2709d03
commit
04aeca215e
|
@ -3,13 +3,9 @@
|
|||
import collections
|
||||
import datetime
|
||||
import pytest
|
||||
import sys
|
||||
import shutil
|
||||
import time
|
||||
|
||||
import mock
|
||||
from django.utils import six
|
||||
from quixote import cleanup
|
||||
from quixote.http_request import Upload
|
||||
from wcs.qommon import force_str
|
||||
from wcs.qommon.template import Template
|
||||
|
@ -22,11 +18,11 @@ from wcs.categories import Category
|
|||
from wcs.conditions import Condition
|
||||
from wcs.formdef import FormDef
|
||||
from wcs.formdata import Evolution
|
||||
from wcs.logged_errors import LoggedError
|
||||
from wcs.roles import Role
|
||||
from wcs import sessions
|
||||
from wcs.variables import LazyFormData
|
||||
from wcs.workflows import Workflow, WorkflowStatusItem, WorkflowCriticalityLevel, WorkflowBackofficeFieldsFormDef
|
||||
from wcs.wf.anonymise import AnonymiseWorkflowStatusItem
|
||||
from wcs.wf.wscall import JournalWsCallErrorPart
|
||||
|
||||
from wcs.wf.register_comment import JournalEvolutionPart
|
||||
|
@ -1019,6 +1015,12 @@ def test_lazy_formdata_queryset_filter(pub, variable_test_data):
|
|||
assert queryset.count == 4
|
||||
queryset = lazy_formdata.objects.filter_by('foo_foo').apply_filter_value('X')
|
||||
assert queryset.count == 0
|
||||
LoggedError.wipe()
|
||||
queryset = lazy_formdata.objects.filter_by('unknown').apply_filter_value('X')
|
||||
assert queryset.count == 0
|
||||
assert LoggedError.count() == 1
|
||||
logged_error = LoggedError.select()[0]
|
||||
assert logged_error.summary == 'Invalid filter "unknown"'
|
||||
|
||||
# filter function on backoffice field
|
||||
queryset = lazy_formdata.objects.filter_by('backoffice_blah').apply_filter_value('plop1')
|
||||
|
|
|
@ -24,7 +24,8 @@ from quixote import get_publisher, get_request
|
|||
|
||||
from pyproj import Geod
|
||||
|
||||
from .qommon import misc, force_str
|
||||
from .logged_errors import LoggedError
|
||||
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, Null)
|
||||
|
@ -70,6 +71,9 @@ class LazyFormDefObjectsManager(object):
|
|||
# object serves as both manager and queryset)
|
||||
return self._clone(None)
|
||||
|
||||
def none(self):
|
||||
return self._clone([Equal('status', '_none')])
|
||||
|
||||
def pending(self):
|
||||
status_filters = ['wf-%s' % x.id for x in
|
||||
self._formdef.workflow.get_not_endpoint_status()]
|
||||
|
@ -84,12 +88,11 @@ class LazyFormDefObjectsManager(object):
|
|||
return self._clone(self._criterias + [Equal('user_id', str(user.id) if user else '-1')])
|
||||
|
||||
def filter_by_status(self, status):
|
||||
wf_status = '_none'
|
||||
for wfs in self._formdef.workflow.possible_status:
|
||||
if wfs.name == status:
|
||||
wf_status = 'wf-%s' % wfs.id
|
||||
break
|
||||
return self._clone(self._criterias + [Equal('status', wf_status)])
|
||||
return self._clone(self._criterias + [Equal('status', wf_status)])
|
||||
return self.none()
|
||||
|
||||
def with_custom_view(self, custom_view_slug):
|
||||
lookup_criterias = [
|
||||
|
@ -101,7 +104,7 @@ class LazyFormDefObjectsManager(object):
|
|||
try:
|
||||
custom_view = get_publisher().custom_view_class.select(lookup_criterias)[0]
|
||||
except IndexError:
|
||||
return self._clone([Equal('status', '_none')])
|
||||
return self.none()
|
||||
return self._clone(self._criterias + custom_view.get_criterias(), order_by=custom_view.order_by)
|
||||
|
||||
def exclude_self(self):
|
||||
|
@ -156,10 +159,9 @@ class LazyFormDefObjectsManager(object):
|
|||
if getattr(field, 'varname', None) == self.pending_attr:
|
||||
from wcs import sql
|
||||
criteria = Equal(sql.get_field_id(field), value)
|
||||
break
|
||||
else:
|
||||
raise Exception('invalid filter')
|
||||
return self._clone(self._criterias + [criteria])
|
||||
return self._clone(self._criterias + [criteria])
|
||||
LoggedError.record(_('Invalid filter "%s"') % self.pending_attr, formdata=self._formdata)
|
||||
return self.none()
|
||||
|
||||
def __getattr__(self, attribute):
|
||||
if attribute.startswith('count_status_'):
|
||||
|
|
Loading…
Reference in New Issue