import django_filters from django.db import models from funkwhale_api.music import utils PRIVACY_LEVEL_CHOICES = [ ('me', 'Only me'), ('followers', 'Me and my followers'), ('instance', 'Everyone on my instance, and my followers'), ('everyone', 'Everyone, including people on other instances'), ] def get_privacy_field(): return models.CharField( max_length=30, choices=PRIVACY_LEVEL_CHOICES, default='instance') def privacy_level_query(user, lookup_field='privacy_level'): if user.is_anonymous: return models.Q(**{ lookup_field: 'everyone', }) return models.Q(**{ '{}__in'.format(lookup_field): [ 'followers', 'instance', 'everyone' ] }) class SearchFilter(django_filters.CharFilter): def __init__(self, *args, **kwargs): self.search_fields = kwargs.pop('search_fields') super().__init__(*args, **kwargs) def filter(self, qs, value): if not value: return qs query = utils.get_query(value, self.search_fields) return qs.filter(query)