from rest_framework import mixins, viewsets from rest_framework.permissions import AllowAny, IsAuthenticated from apps.gooyal_oauth2.rest_framework import IsAuthenticatedOrTokenMatchesOASRequirements from .filters import CityFilter, NeighborhoodFilter from .models import Address, City, Neighborhood from .serializers import AddressSerializer, CitySerializer, NeighborhoodSerializer class CityViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet): schema_tags = ['Locations'] permission_classes = [AllowAny] serializer_class = CitySerializer queryset = City.objects.filter(is_active=True) filterset_class = CityFilter class NeighborhoodViewSet(mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet): schema_tags = ['Locations'] permission_classes = [AllowAny] serializer_class = NeighborhoodSerializer queryset = Neighborhood.objects.filter(is_active=True).select_related('city') filterset_class = NeighborhoodFilter class AddressViewSet(viewsets.ModelViewSet): schema_tags = ['Addresses'] serializer_class = AddressSerializer permission_classes = [IsAuthenticatedOrTokenMatchesOASRequirements] required_alternate_scopes = { "GET": [[]], "POST": [[]], "PUT": [[]], "PATCH": [[]], "DELETE": [[]], } def get_queryset(self): if getattr(self, 'swagger_fake_view', False): return Address.objects.none() return Address.objects.filter(user=self.request.user).select_related('city', 'neighborhood')