43 lines
1.4 KiB
Python
43 lines
1.4 KiB
Python
from rest_framework import mixins, viewsets
|
|
from rest_framework.decorators import action
|
|
from rest_framework.permissions import IsAuthenticated
|
|
from rest_framework.response import Response
|
|
|
|
from .models import FeatureFlag, FeatureFlagOverride
|
|
from .serializers import FeatureFlagOverrideSerializer, FeatureFlagSerializer
|
|
from .services import FeatureService
|
|
|
|
|
|
class FeatureFlagViewSet(viewsets.ModelViewSet):
|
|
queryset = FeatureFlag.objects.all()
|
|
serializer_class = FeatureFlagSerializer
|
|
permission_classes = [IsAuthenticated]
|
|
|
|
def get_queryset(self):
|
|
return FeatureFlag.objects.all()
|
|
|
|
@action(detail=False, methods=["get"], url_path="active")
|
|
def active_flags(self, request):
|
|
fs = FeatureService()
|
|
flags = fs.get_active_flags(user=request.user)
|
|
data = {
|
|
"flags": flags,
|
|
}
|
|
return Response(data)
|
|
|
|
@action(detail=False, methods=["get"], url_path="check/(?P<slug>[^/]+)")
|
|
def check_flag(self, request, slug=None):
|
|
fs = FeatureService()
|
|
enabled = fs.is_enabled(slug, user=request.user)
|
|
return Response({"slug": slug, "is_enabled": enabled})
|
|
|
|
|
|
class FeatureFlagOverrideViewSet(
|
|
mixins.CreateModelMixin,
|
|
mixins.ListModelMixin,
|
|
mixins.DestroyModelMixin,
|
|
viewsets.GenericViewSet,
|
|
):
|
|
queryset = FeatureFlagOverride.objects.all()
|
|
serializer_class = FeatureFlagOverrideSerializer
|
|
permission_classes = [IsAuthenticated]
|