Closed
Description
Hi,
I just upgraded to rest-framework-filters 0.10 (+ rest-framework 3.6 and django-filter 1.0), and can't use the exclusion feature anymore, because of a deepcopy error.
Here is my filter set:
import rest_framework_filters as filters
class RefillFilterSet(filters.FilterSet):
class Meta:
model = models.Refill
fields = {
'kind': ['exact', 'in'],
}
Here is the full trackeback (ran as part of unit tests), the query paramters were "kind!=toBeIgnored"
Traceback (most recent call last):
File "/usr/local/lib/python3.4/site-packages/django/core/handlers/exception.py", line 39, in inner
response = get_response(request)
File "/usr/local/lib/python3.4/site-packages/django/core/handlers/base.py", line 249, in _legacy_get_response
response = self._get_response(request)
File "/usr/local/lib/python3.4/site-packages/django/core/handlers/base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/usr/local/lib/python3.4/site-packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python3.4/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
return view_func(*args, **kwargs)
File "/usr/local/lib/python3.4/site-packages/rest_framework/viewsets.py", line 83, in view
return self.dispatch(request, *args, **kwargs)
File "/usr/local/lib/python3.4/site-packages/rest_framework/views.py", line 483, in dispatch
response = self.handle_exception(exc)
File "/usr/local/lib/python3.4/site-packages/rest_framework/views.py", line 443, in handle_exception
self.raise_uncaught_exception(exc)
File "/usr/local/lib/python3.4/site-packages/rest_framework/views.py", line 480, in dispatch
response = handler(request, *args, **kwargs)
File "/usr/local/lib/python3.4/site-packages/rest_framework/mixins.py", line 40, in list
queryset = self.filter_queryset(self.get_queryset())
File "/usr/local/lib/python3.4/site-packages/rest_framework/generics.py", line 151, in filter_queryset
queryset = backend().filter_queryset(self.request, queryset, self)
File "/usr/local/lib/python3.4/site-packages/rest_framework_filters/backends.py", line 34, in filter_queryset
return super(DjangoFilterBackend, self).filter_queryset(request, queryset, view)
File "/usr/local/lib/python3.4/site-packages/django_filters/rest_framework/backends.py", line 51, in filter_queryset
return filter_class(request.query_params, queryset=queryset, request=request).qs
File "/usr/local/lib/python3.4/site-packages/rest_framework_filters/filterset.py", line 259, in qs
requested_filters = self.expand_filters()
File "/usr/local/lib/python3.4/site-packages/rest_framework_filters/filterset.py", line 118, in expand_filters
f = copy.deepcopy(f)
File "/usr/local/lib/python3.4/copy.py", line 182, in deepcopy
y = _reconstruct(x, rv, 1, memo)
File "/usr/local/lib/python3.4/copy.py", line 300, in _reconstruct
state = deepcopy(state, memo)
File "/usr/local/lib/python3.4/copy.py", line 155, in deepcopy
y = copier(x, memo)
File "/usr/local/lib/python3.4/copy.py", line 246, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "/usr/local/lib/python3.4/copy.py", line 182, in deepcopy
y = _reconstruct(x, rv, 1, memo)
File "/usr/local/lib/python3.4/copy.py", line 300, in _reconstruct
state = deepcopy(state, memo)
File "/usr/local/lib/python3.4/copy.py", line 155, in deepcopy
y = copier(x, memo)
File "/usr/local/lib/python3.4/copy.py", line 246, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "/usr/local/lib/python3.4/copy.py", line 182, in deepcopy
y = _reconstruct(x, rv, 1, memo)
File "/usr/local/lib/python3.4/copy.py", line 300, in _reconstruct
state = deepcopy(state, memo)
File "/usr/local/lib/python3.4/copy.py", line 155, in deepcopy
y = copier(x, memo)
File "/usr/local/lib/python3.4/copy.py", line 246, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "/usr/local/lib/python3.4/copy.py", line 182, in deepcopy
y = _reconstruct(x, rv, 1, memo)
File "/usr/local/lib/python3.4/copy.py", line 300, in _reconstruct
state = deepcopy(state, memo)
File "/usr/local/lib/python3.4/copy.py", line 155, in deepcopy
y = copier(x, memo)
File "/usr/local/lib/python3.4/copy.py", line 246, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "/usr/local/lib/python3.4/copy.py", line 166, in deepcopy
y = copier(memo)
TypeError: cannot deepcopy this match object
With a real HTTP request I get a similar error, but on a different object:
TypeError: cannot serialize '_io.BufferedReader' object
My dependencies versions:
Django==1.10.4
django-crispy-forms==1.6.1
django-filter==1.0.2
djangorestframework==3.6.2
djangorestframework-filters==0.10.0
Do you know what's going on ?
My only guess is that deepcopy reaches the django request object (through filter._parent) and fails to copy an un-pickeable object, but it doesn't explain why it works with djangorestframework-filters 0.9.1 + django-filter 0.15.3.
Metadata
Metadata
Assignees
Labels
No labels