kopia lustrzana https://dev.funkwhale.audio/funkwhale/funkwhale
51 wiersze
1.4 KiB
Python
51 wiersze
1.4 KiB
Python
import django_filters
|
|
from django.db import models
|
|
|
|
from . import search
|
|
|
|
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", user_field="user"):
|
|
if user.is_anonymous:
|
|
return models.Q(**{lookup_field: "everyone"})
|
|
|
|
return models.Q(
|
|
**{"{}__in".format(lookup_field): ["instance", "everyone"]}
|
|
) | models.Q(**{lookup_field: "me", user_field: user})
|
|
|
|
|
|
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 = search.get_query(value, self.search_fields)
|
|
return qs.filter(query)
|
|
|
|
|
|
class SmartSearchFilter(django_filters.CharFilter):
|
|
def __init__(self, *args, **kwargs):
|
|
self.config = kwargs.pop("config")
|
|
super().__init__(*args, **kwargs)
|
|
|
|
def filter(self, qs, value):
|
|
if not value:
|
|
return qs
|
|
cleaned = self.config.clean(value)
|
|
return search.apply(qs, cleaned)
|