Skip to content
Snippets Groups Projects
Commit 0f239fa2 authored by Mario Raciti's avatar Mario Raciti
Browse files

TMSS-736: Add (partially) filtering and ordering metadata

parent 0f870d33
No related branches found
No related tags found
1 merge request!438Resolve TMSS-736
from collections import OrderedDict
from django.utils.encoding import force_str
from rest_framework.metadata import SimpleMetadata
import logging
......@@ -10,6 +12,52 @@ class LOFARDefaultMetadata(SimpleMetadata):
"""
def determine_metadata(self, request, view):
metadata = super(LOFARDefaultMetadata, self).determine_metadata(request, view)
# TODO: Add filtering and ordering information.
if hasattr(view, 'filter_backends'):
# TODO: Add filter_backends.
pass
if hasattr(view, 'filter_class'):
# Add filters
filters = OrderedDict()
for filter_name, filter_type in view.filter_class.base_filters.items():
filter_parts = filter_name.split('__')
filter_name = filter_parts[0]
attrs = OrderedDict()
# Type
attrs['type'] = filter_type.__class__.__name__
# Lookup fields
if len(filter_parts) > 1:
# Has a lookup type (__gt, __lt, etc.)
lookup_type = filter_parts[1]
if filters.get(filter_name) is not None:
# Filter name already in, just append the value
attrs['lookup_types'] = filters[filter_name]['lookup_types']
attrs['lookup_types'].append(lookup_type)
else:
attrs['lookup_types'] = [lookup_type]
else:
attrs['lookup_types'] = ['exact']
# Do choices
choices = filter_type.extra.get('choices', False)
if choices:
attrs['choices'] = [
{
'value': choice_value,
'display_name': force_str(choice_name, strings_only=True)
}
for choice_value, choice_name in choices
]
filters[filter_name] = attrs
# Add filters info
metadata['filters'] = filters
# Add ordering info
if hasattr(view, 'ordering'):
metadata['ordering'] = view.ordering
return metadata
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment