Skip to content

Commit 8358724

Browse files
author
Ryan P Kilby
committed
Deprecate cache argument
1 parent efdf453 commit 8358724

File tree

3 files changed

+30
-4
lines changed

3 files changed

+30
-4
lines changed

rest_framework_filters/backends.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,12 @@
55

66
class DjangoFilterBackend(rest_framework.filters.DjangoFilterBackend):
77
default_filter_set = FilterSet
8-
_related_filterset_cache = {} # set to None to disable cache propagation
98

109
def filter_queryset(self, request, queryset, view):
1110
filter_class = self.get_filter_class(view, queryset)
1211

1312
if filter_class:
14-
cache = self._related_filterset_cache
15-
return filter_class(request.query_params, queryset=queryset, cache=cache).qs
13+
subset_class = filter_class.get_subset(request.query_params)
14+
return subset_class(request.query_params, queryset=queryset).qs
1615

1716
return queryset

rest_framework_filters/filterset.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
from collections import OrderedDict
55
import copy
6+
import warnings
67

78
from django.db import models
89
from django.db.models.constants import LOOKUP_SEP
@@ -61,7 +62,12 @@ class FilterSet(six.with_metaclass(FilterSetMetaclass, filterset.FilterSet)):
6162
_subset_cache = {}
6263

6364
def __init__(self, *args, **kwargs):
64-
self._related_filterset_cache = kwargs.pop('cache', {})
65+
if 'cache' in kwargs:
66+
warnings.warn(
67+
"'cache' argument is deprecated. Override '_subset_cache' instead.",
68+
DeprecationWarning, stacklevel=2
69+
)
70+
self.__class__._subset_cache = kwargs.pop('cache', None)
6571

6672
super(FilterSet, self).__init__(*args, **kwargs)
6773

tests/test_deprecations.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
2+
import warnings
3+
from django.test import TestCase
4+
5+
from .filters import UserFilter
6+
7+
8+
class FilterSetCacheDeprecationTests(TestCase):
9+
10+
def test_notification(self):
11+
with warnings.catch_warnings(record=True) as w:
12+
warnings.simplefilter("always")
13+
14+
cache = {}
15+
16+
UserFilter({}, cache=cache)
17+
18+
self.assertEqual(len(w), 1)
19+
self.assertTrue(issubclass(w[-1].category, DeprecationWarning))
20+
21+
self.assertIs(UserFilter._subset_cache, cache)

0 commit comments

Comments
 (0)