44 lines
1.1 KiB
Python
44 lines
1.1 KiB
Python
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)
|