Skip to content

Commit 6dea15b

Browse files
SilviaAmAmsvenvandescheur
authored andcommitted
♻️ [#278] Make extension more DRY
1 parent 8653e27 commit 6dea15b

File tree

1 file changed

+16
-20
lines changed
  • backend/src/openarchiefbeheer/destruction/api/drf_spectacular

1 file changed

+16
-20
lines changed

backend/src/openarchiefbeheer/destruction/api/drf_spectacular/extensions.py

+16-20
Original file line numberDiff line numberDiff line change
@@ -6,26 +6,8 @@ class NestedFilterExtension(DjangoFilterExtension):
66
target_class = "openarchiefbeheer.destruction.api.backends.NestedFilterBackend"
77
priority = 1
88

9-
def get_nested_filters(self, auto_schema):
10-
nested_filterset_class = self.target.get_nested_filterset_class(
11-
auto_schema.view
12-
)
13-
model = nested_filterset_class._meta.model
14-
15-
result = []
16-
with add_trace_message(nested_filterset_class):
17-
for field_name, filter_field in nested_filterset_class.base_filters.items():
18-
result += self.resolve_filter_field(
19-
auto_schema, model, nested_filterset_class, field_name, filter_field
20-
)
21-
return result
22-
23-
def get_main_filters(self, auto_schema):
24-
# We need to override the parent `get_schema_operation_parameters`
25-
# because it does not support using the prefix in the field name
26-
filterset_class = self.target.get_filterset_class(auto_schema.view)
9+
def _get_filters(self, auto_schema, filterset_class, prefix=""):
2710
model = filterset_class._meta.model
28-
prefix = auto_schema.view.filterset_kwargs.get("prefix", "")
2911

3012
result = []
3113
with add_trace_message(filterset_class):
@@ -34,11 +16,25 @@ def get_main_filters(self, auto_schema):
3416
auto_schema,
3517
model,
3618
filterset_class,
37-
f"{prefix}-{field_name}",
19+
f"{prefix}-{field_name}" if prefix else field_name,
3820
filter_field,
3921
)
4022
return result
4123

24+
def get_nested_filters(self, auto_schema):
25+
nested_filterset_class = self.target.get_nested_filterset_class(
26+
auto_schema.view
27+
)
28+
return self._get_filters(auto_schema, nested_filterset_class)
29+
30+
def get_main_filters(self, auto_schema):
31+
# We need to override the parent `get_schema_operation_parameters`
32+
# because it does not support using the prefix in the field name
33+
filterset_class = self.target.get_filterset_class(auto_schema.view)
34+
prefix = auto_schema.view.filterset_kwargs.get("prefix", "")
35+
36+
return self._get_filters(auto_schema, filterset_class, prefix)
37+
4238
def get_schema_operation_parameters(self, auto_schema, *args, **kwargs) -> list:
4339
main_filters = self.get_main_filters(auto_schema)
4440
nested_filters = self.get_nested_filters(auto_schema)

0 commit comments

Comments
 (0)