diff --git a/backend/secfit/users/admin.py b/backend/secfit/users/admin.py index fc0af23c4473e29bcc06045aebfdd0d21989d22d..1011e25757be78ea5f48574f3bddf355093872ec 100644 --- a/backend/secfit/users/admin.py +++ b/backend/secfit/users/admin.py @@ -1,11 +1,9 @@ from django.contrib import admin from django.contrib.auth.admin import UserAdmin -from .models import Offer, AthleteFile from django.contrib.auth import get_user_model +from .models import Offer, AthleteFile from .forms import CustomUserChangeForm, CustomUserCreationForm -# Register your models here. - class CustomUserAdmin(UserAdmin): add_form = CustomUserCreationForm diff --git a/backend/secfit/users/forms.py b/backend/secfit/users/forms.py index c2e25067d080d79e4fa9dc84439b5e87217b47ca..51558bae33ea3e0c56dc9d713037b6d6e9843503 100644 --- a/backend/secfit/users/forms.py +++ b/backend/secfit/users/forms.py @@ -4,13 +4,11 @@ from django.contrib.auth import get_user_model class CustomUserCreationForm(UserCreationForm): - phone_number = forms.CharField(max_length=50) country = forms.CharField(max_length=50) city = forms.CharField(max_length=50) street_address = forms.CharField(max_length=50) - class Meta(UserCreationForm): model = get_user_model() fields = ("username", "coach", "phone_number", "country", "city", "street_address") diff --git a/backend/secfit/users/models.py b/backend/secfit/users/models.py index d48528655225b97a32833eb1a6629e0d266ba6df..5ecf3c6b6bfb26d07ef3aca3d241d905107d6622 100644 --- a/backend/secfit/users/models.py +++ b/backend/secfit/users/models.py @@ -18,7 +18,7 @@ class User(AbstractUser): country = models.TextField(max_length=50, blank=True) city = models.TextField(max_length=50, blank=True) street_address = models.TextField(max_length=50, blank=True) - + def athlete_directory_path(instance, filename): """ diff --git a/backend/secfit/users/serializers.py b/backend/secfit/users/serializers.py index 0e1a83ba88f61b5fd0b3c8ff34ed7e9fee668b63..1c8262a0720396f5e75e3c1ee8c98dff3259af0c 100644 --- a/backend/secfit/users/serializers.py +++ b/backend/secfit/users/serializers.py @@ -1,7 +1,7 @@ from rest_framework import serializers from django.contrib.auth import get_user_model, password_validation -from users.models import Offer, AthleteFile from django import forms +from users.models import Offer, AthleteFile class UserSerializer(serializers.HyperlinkedModelSerializer): @@ -30,9 +30,7 @@ class UserSerializer(serializers.HyperlinkedModelSerializer): def validate_password(self, value): data = self.get_initial() - password = data.get("password") - password1 = data.get("password1") try: password_validation.validate_password(password) @@ -49,7 +47,14 @@ class UserSerializer(serializers.HyperlinkedModelSerializer): country = validated_data["country"] city = validated_data["city"] street_address = validated_data["street_address"] - user_obj = get_user_model()(username=username, email=email, phone_number=phone_number, country=country, city=city, street_address=street_address) + user_obj = get_user_model()( + username=username, + email=email, + phone_number=phone_number, + country=country, + city=city, + street_address=street_address + ) user_obj.set_password(password) user_obj.save() diff --git a/backend/secfit/users/tests/UserRegistration.py b/backend/secfit/users/tests/UserRegistration.py deleted file mode 100644 index bad7d836d2bee852891ab4f99a2a0ad41503b790..0000000000000000000000000000000000000000 --- a/backend/secfit/users/tests/UserRegistration.py +++ /dev/null @@ -1,112 +0,0 @@ -from django.test import TestCase, Client -import uuid - -variables = [ - 'username', - 'email', - 'password', - 'password1', - 'phone_number', - 'country', - 'city', - 'street_address' -] -variable_values = { - 'valid': - { - 'username': 'Testuser', - 'email': 'test@test.te', - 'password': 'password', - 'password1': 'password', - 'phone_number': '1234567890', - 'country': 'Testonia', - 'city': 'Testheim', - 'street_address': 'Test', - }, - 'invalid': { - 'username': 'Test user', - 'email': 'test', - 'password': None, - 'password1': None, - 'phone_number': 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', - 'country': 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', - 'city': 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', - 'street_address': 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', - }, - 'blank': { - 'username': '', - 'email': '', - 'password': '', - 'password1': '', - 'phone_number': '', - 'country': '', - 'city': '', - 'street_address': '', - } -} - -# Test cases generated by https://pairwise.teremokgames.com -test_cases = [ - { - "username": "invalid", "password": "blank", "password1": "valid", "email": "invalid", "phone_number": "valid", "country": "blank", "city": "blank", "street_address": "invalid"},{ - "username": "invalid", "password": "valid", "password1": "blank", "email": "valid", "phone_number": "blank", "country": "blank", "city": "invalid", "street_address": "valid"},{ - "username": "invalid", "password": "valid", "password1": "blank", "email": "blank", "phone_number": "invalid", "country": "valid", "city": "blank", "street_address": "invalid"},{ - "username": "invalid", "password": "blank", "password1": "blank", "email": "invalid", "phone_number": "valid", "country": "blank", "city": "invalid", "street_address": "valid"},{ - "username": "invalid", "password": "blank", "password1": "valid", "email": "valid", "phone_number": "blank", "country": "invalid", "city": "valid", "street_address": "blank"},{ - "username": "valid", "password": "blank", "password1": "blank", "email": "blank", "phone_number": "invalid", "country": "blank", "city": "valid", "street_address": "blank"},{ - "username": "valid", "password": "blank", "password1": "blank", "email": "invalid", "phone_number": "blank", "country": "valid", "city": "blank", "street_address": "valid"},{ - "username": "valid", "password": "valid", "password1": "valid", "email": "valid", "phone_number": "blank", "country": "valid", "city": "invalid", "street_address": "blank"},{ - "username": "blank", "password": "valid", "password1": "blank", "email": "valid", "phone_number": "valid", "country": "invalid", "city": "invalid", "street_address": "blank"},{ - "username": "blank", "password": "blank", "password1": "blank", "email": "blank", "phone_number": "blank", "country": "valid", "city": "valid", "street_address": "invalid"},{ - "username": "blank", "password": "blank", "password1": "blank", "email": "valid", "phone_number": "invalid", "country": "invalid", "city": "blank", "street_address": "blank"},{ - "username": "blank", "password": "blank", "password1": "valid", "email": "blank", "phone_number": "valid", "country": "valid", "city": "invalid", "street_address": "invalid"},{ - "username": "blank", "password": "valid", "password1": "blank", "email": "blank", "phone_number": "blank", "country": "blank", "city": "valid", "street_address": "valid"},{ - "username": "blank", "password": "blank", "password1": "valid", "email": "invalid", "phone_number": "invalid", "country": "blank", "city": "blank", "street_address": "blank"},{ - "username": "invalid", "password": "blank", "password1": "valid", "email": "blank", "phone_number": "invalid", "country": "invalid", "city": "valid", "street_address": "valid"},{ - "username": "invalid", "password": "valid", "password1": "valid", "email": "valid", "phone_number": "blank", "country": "blank", "city": "blank", "street_address": "invalid"},{ - "username": "invalid", "password": "blank", "password1": "blank", "email": "blank", "phone_number": "blank", "country": "invalid", "city": "invalid", "street_address": "valid"},{ - "username": "invalid", "password": "valid", "password1": "blank", "email": "invalid", "phone_number": "invalid", "country": "valid", "city": "valid", "street_address": "blank"},{ - "username": "valid", "password": "valid", "password1": "valid", "email": "invalid", "phone_number": "blank", "country": "invalid", "city": "valid", "street_address": "blank"},{ - "username": "valid", "password": "blank", "password1": "blank", "email": "valid", "phone_number": "blank", "country": "valid", "city": "blank", "street_address": "invalid"},{ - "username": "valid", "password": "blank", "password1": "valid", "email": "blank", "phone_number": "invalid", "country": "blank", "city": "invalid", "street_address": "valid"},{ - "username": "valid", "password": "valid", "password1": "blank", "email": "invalid", "phone_number": "valid", "country": "blank", "city": "valid", "street_address": "blank"},{ - "username": "valid", "password": "blank", "password1": "blank", "email": "valid", "phone_number": "blank", "country": "invalid", "city": "blank", "street_address": "invalid"},{ - "username": "valid", "password": "valid", "password1": "valid", "email": "blank", "phone_number": "invalid", "country": "valid", "city": "blank", "street_address": "valid"},{ - "username": "valid", "password": "blank", "password1": "blank", "email": "blank", "phone_number": "valid", "country": "blank", "city": "invalid", "street_address": "blank"},{ - "username": "blank", "password": "blank", "password1": "valid", "email": "invalid", "phone_number": "blank", "country": "valid", "city": "invalid", "street_address": "blank"},{ - "username": "blank", "password": "blank", "password1": "blank", "email": "valid", "phone_number": "invalid", "country": "blank", "city": "valid", "street_address": "invalid"},{ - "username": "blank", "password": "valid", "password1": "blank", "email": "blank", "phone_number": "valid", "country": "invalid", "city": "blank", "street_address": "valid"},{ - "username": "blank", "password": "blank", "password1": "valid", "email": "blank", "phone_number": "blank", "country": "valid", "city": "invalid", "street_address": "blank"},{ - "username": "blank", "password": "valid", "password1": "blank", "email": "invalid", "phone_number": "blank", "country": "blank", "city": "valid", "street_address": "invalid"},{ - "username": "blank", "password": "blank", "password1": "valid", "email": "valid", "phone_number": "invalid", "country": "blank", "city": "blank", "street_address": "valid"},{ - "username": "blank", "password": "valid", "password1": "blank", "email": "blank", "phone_number": "valid", "country": "invalid", "city": "blank", "street_address": "blank"} - ] - - -class UserRegistration2WayTestCase(TestCase): - - def setUp(self): - print("Running two way user registration") - self.client = Client() - - def test_two_way(self): - for testcase in test_cases: - request = {} - invalid_request = False - for key, value in testcase.items(): - request[key] = variable_values[value][key] - - if key == 'username' and value == 'valid': - # Add a uid to username to avoid "user already exists error" - request['username'] = request['username'] + str(uuid.uuid4()) - - if ( - value == 'invalid' - or (key == 'username' and value == 'blank') - or (key == 'password' and value == 'blank') - or (key == 'password1' and value == 'blank') - ): - invalid_request = True - response_code = 400 if invalid_request else 201 - response = self.client.post('/api/users/', request) - self.assertEqual(response.status_code, response_code) diff --git a/backend/secfit/users/tests/__init__.py b/backend/secfit/users/tests/__init__.py index 8bc333b22345bcd0c365d32dbde954914b2b9297..0daf8625ec3547f9e91d84379915c2978ff23fe4 100644 --- a/backend/secfit/users/tests/__init__.py +++ b/backend/secfit/users/tests/__init__.py @@ -1,2 +1,2 @@ -from users.tests.UserRegistration import * -from users.tests.UserSerializer import * \ No newline at end of file +from users.tests.user_registration import * +from users.tests.user_serializer import * diff --git a/backend/secfit/users/tests/test_data.py b/backend/secfit/users/tests/test_data.py new file mode 100644 index 0000000000000000000000000000000000000000..0086d7cc929ea68e6d3bbe29756f5a80419156ea --- /dev/null +++ b/backend/secfit/users/tests/test_data.py @@ -0,0 +1,367 @@ + +variables = [ + 'username', + 'email', + 'password', + 'password1', + 'phone_number', + 'country', + 'city', + 'street_address' +] +variable_values = { + 'valid': + { + 'username': 'Testuser', + 'email': 'test@test.te', + 'password': 'password', + 'password1': 'password', + 'phone_number': '1234567890', + 'country': 'Testonia', + 'city': 'Testheim', + 'street_address': 'Test', + }, + 'invalid': { + 'username': 'Test user', + 'email': 'test', + 'password': None, + 'password1': None, + 'phone_number': 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', + 'country': 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', + 'city': 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', + 'street_address': 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', + }, + 'blank': { + 'username': '', + 'email': '', + 'password': '', + 'password1': '', + 'phone_number': '', + 'country': '', + 'city': '', + 'street_address': '', + } +} + +test_cases = [ + { + "username": "invalid", + "password": "blank", + "password1": "valid", + "email": "invalid", + "phone_number": "valid", + "country": "blank", + "city": "blank", + "street_address": "invalid" + }, + { + "username": "invalid", + "password": "valid", + "password1": "blank", + "email": "valid", + "phone_number": "blank", + "country": "blank", + "city": "invalid", + "street_address": "valid" + }, + { + "username": "invalid", + "password": "valid", + "password1": "blank", + "email": "blank", + "phone_number": "invalid", + "country": "valid", + "city": "blank", + "street_address": "invalid" + }, + { + "username": "invalid", + "password": "blank", + "password1": "blank", + "email": "invalid", + "phone_number": "valid", + "country": "blank", + "city": "invalid", + "street_address": "valid" + }, + { + "username": "invalid", + "password": "blank", + "password1": "valid", + "email": "valid", + "phone_number": "blank", + "country": "invalid", + "city": "valid", + "street_address": "blank" + }, + { + "username": "valid", + "password": "blank", + "password1": "blank", + "email": "blank", + "phone_number": "invalid", + "country": "blank", + "city": "valid", + "street_address": "blank" + }, + { + "username": "valid", + "password": "blank", + "password1": "blank", + "email": "invalid", + "phone_number": "blank", + "country": "valid", + "city": "blank", + "street_address": "valid" + }, + { + "username": "valid", + "password": "valid", + "password1": "valid", + "email": "valid", + "phone_number": "blank", + "country": "valid", + "city": "invalid", + "street_address": "blank" + }, + { + "username": "blank", + "password": "valid", + "password1": "blank", + "email": "valid", + "phone_number": "valid", + "country": "invalid", + "city": "invalid", + "street_address": "blank" + }, + { + "username": "blank", + "password": "blank", + "password1": "blank", + "email": "blank", + "phone_number": "blank", + "country": "valid", + "city": "valid", + "street_address": "invalid" + }, + { + "username": "blank", + "password": "blank", + "password1": "blank", + "email": "valid", + "phone_number": "invalid", + "country": "invalid", + "city": "blank", + "street_address": "blank" + }, + { + "username": "blank", + "password": "blank", + "password1": "valid", + "email": "blank", + "phone_number": "valid", + "country": "valid", + "city": "invalid", + "street_address": "invalid" + }, + { + "username": "blank", + "password": "valid", + "password1": "blank", + "email": "blank", + "phone_number": "blank", + "country": "blank", + "city": "valid", + "street_address": "valid" + }, + { + "username": "blank", + "password": "blank", + "password1": "valid", + "email": "invalid", + "phone_number": "invalid", + "country": "blank", + "city": "blank", + "street_address": "blank" + }, + { + "username": "invalid", + "password": "blank", + "password1": "valid", + "email": "blank", + "phone_number": "invalid", + "country": "invalid", + "city": "valid", + "street_address": "valid" + }, + { + "username": "invalid", + "password": "valid", + "password1": "valid", + "email": "valid", + "phone_number": "blank", + "country": "blank", + "city": "blank", + "street_address": "invalid" + }, + { + "username": "invalid", + "password": "blank", + "password1": "blank", + "email": "blank", + "phone_number": "blank", + "country": "invalid", + "city": "invalid", + "street_address": "valid" + }, + { + "username": "invalid", + "password": "valid", + "password1": "blank", + "email": "invalid", + "phone_number": "invalid", + "country": "valid", + "city": "valid", + "street_address": "blank" + }, + { + "username": "valid", + "password": "valid", + "password1": "valid", + "email": "invalid", + "phone_number": "blank", + "country": "invalid", + "city": "valid", + "street_address": "blank" + }, + { + "username": "valid", + "password": "blank", + "password1": "blank", + "email": "valid", + "phone_number": "blank", + "country": "valid", + "city": "blank", + "street_address": "invalid" + }, + { + "username": "valid", + "password": "blank", + "password1": "valid", + "email": "blank", + "phone_number": "invalid", + "country": "blank", + "city": "invalid", + "street_address": "valid" + }, + { + "username": "valid", + "password": "valid", + "password1": "blank", + "email": "invalid", + "phone_number": "valid", + "country": "blank", + "city": "valid", + "street_address": "blank" + }, + { + "username": "valid", + "password": "blank", + "password1": "blank", + "email": "valid", + "phone_number": "blank", + "country": "invalid", + "city": "blank", + "street_address": "invalid" + }, + { + "username": "valid", + "password": "valid", + "password1": "valid", + "email": "blank", + "phone_number": "invalid", + "country": "valid", + "city": "blank", + "street_address": "valid" + }, + { + "username": "valid", + "password": "blank", + "password1": "blank", + "email": "blank", + "phone_number": "valid", + "country": "blank", + "city": "invalid", + "street_address": "blank" + }, + { + "username": "blank", + "password": "blank", + "password1": "valid", + "email": "invalid", + "phone_number": "blank", + "country": "valid", + "city": "invalid", + "street_address": "blank" + }, + { + "username": "blank", + "password": "blank", + "password1": "blank", + "email": "valid", + "phone_number": "invalid", + "country": "blank", + "city": "valid", + "street_address": "invalid" + }, + { + "username": "blank", + "password": "valid", + "password1": "blank", + "email": "blank", + "phone_number": "valid", + "country": "invalid", + "city": "blank", + "street_address": "valid" + }, + { + "username": "blank", + "password": "blank", + "password1": "valid", + "email": "blank", + "phone_number": "blank", + "country": "valid", + "city": "invalid", + "street_address": "blank" + }, + { + "username": "blank", + "password": "valid", + "password1": "blank", + "email": "invalid", + "phone_number": "blank", + "country": "blank", + "city": "valid", + "street_address": "invalid" + }, + { + "username": "blank", + "password": "blank", + "password1": "valid", + "email": "valid", + "phone_number": "invalid", + "country": "blank", + "city": "blank", + "street_address": "valid" + }, + { + "username": "blank", + "password": "valid", + "password1": "blank", + "email": "blank", + "phone_number": "valid", + "country": "invalid", + "city": "blank", + "street_address": "blank" + } +] diff --git a/backend/secfit/users/tests/user_registration.py b/backend/secfit/users/tests/user_registration.py new file mode 100644 index 0000000000000000000000000000000000000000..2ee9fcaa13b66fed6ce17d1f3b0a8a4ede0617ee --- /dev/null +++ b/backend/secfit/users/tests/user_registration.py @@ -0,0 +1,29 @@ +import uuid +from django.test import TestCase, Client +from users.tests.test_data import variable_values, test_cases + + +class UserRegistration2WayTestCase(TestCase): + + def setUp(self): + print("Running two way user registration") + self.client = Client() + + def test_two_way(self): + for testcase in test_cases: + request = {} + invalid_request = False + for key, value in testcase.items(): + request[key] = variable_values[value][key] + + if key == 'username' and value == 'valid': + # Add a uid to username to avoid "user already exists error" + request['username'] = request['username'] + str(uuid.uuid4()) + if value == 'invalid': + invalid_request = True + elif key == ('username' or 'password' or 'password1') and value == 'blank': + invalid_request = True + + response_code = 400 if invalid_request else 201 + response = self.client.post('/api/users/', request) + self.assertEqual(response.status_code, response_code) diff --git a/backend/secfit/users/tests/UserSerializer.py b/backend/secfit/users/tests/user_serializer.py similarity index 93% rename from backend/secfit/users/tests/UserSerializer.py rename to backend/secfit/users/tests/user_serializer.py index b290f431b5306e960d95aab61cb625817eac2fb6..aaa8b67d597bceb452d84f7310324286eb4e2694 100644 --- a/backend/secfit/users/tests/UserSerializer.py +++ b/backend/secfit/users/tests/user_serializer.py @@ -1,6 +1,7 @@ from django.test import TestCase -from users.serializers import UserSerializer from django.contrib.auth import get_user_model +from users.serializers import UserSerializer + class UserSerializerTestCase(TestCase): @@ -43,6 +44,6 @@ class UserSerializerTestCase(TestCase): self.assertEqual(self.user_model.objects.get(username="testCreate"), user_create) def test_validate_password(self): - pw="password" - response = UserSerializer(data=self.data1).validate_password(value=pw) - self.assertEqual(response,pw) + password = "password" + response = UserSerializer(data=self.data1).validate_password(value=password) + self.assertEqual(response, password) diff --git a/backend/secfit/users/urls.py b/backend/secfit/users/urls.py index 507c27008e8b0997e486945a27bfe3afc55d89de..b0d1db35b1cc5df9da5cabbfc55e3a7f0ab55fc9 100644 --- a/backend/secfit/users/urls.py +++ b/backend/secfit/users/urls.py @@ -1,6 +1,5 @@ -from django.urls import path, include +from django.urls import path from users import views -from rest_framework.urlpatterns import format_suffix_patterns urlpatterns = [ path("api/users/", views.UserList.as_view(), name="user-list"), diff --git a/backend/secfit/users/views.py b/backend/secfit/users/views.py index f5efef5c2ce82566ab380cecad344e3143c31813..950e629a2f15bfc58c331802dc0c43b3ff85e796 100644 --- a/backend/secfit/users/views.py +++ b/backend/secfit/users/views.py @@ -1,7 +1,13 @@ -import django +from django.contrib.auth import get_user_model +from django.db.models import Q from rest_framework import mixins, generics -from workouts.mixins import CreateListModelMixin +from rest_framework.parsers import MultiPartParser, FormParser from rest_framework import permissions +from rest_framework.permissions import ( + IsAuthenticatedOrReadOnly, +) +from workouts.mixins import CreateListModelMixin +from workouts.permissions import IsOwner, IsReadOnly from users.serializers import ( UserSerializer, OfferSerializer, @@ -9,21 +15,10 @@ from users.serializers import ( UserPutSerializer, UserGetSerializer, ) -from rest_framework.permissions import ( - AllowAny, - IsAdminUser, - IsAuthenticated, - IsAuthenticatedOrReadOnly, -) from users.models import Offer, AthleteFile -from django.contrib.auth import get_user_model -from django.db.models import Q -from django.shortcuts import get_object_or_404 -from rest_framework.parsers import MultiPartParser, FormParser from users.permissions import IsCurrentUser, IsAthlete, IsCoach -from workouts.permissions import IsOwner, IsReadOnly -# Create your views here. + class UserList(mixins.ListModelMixin, mixins.CreateModelMixin, generics.GenericAPIView): serializer_class = UserSerializer users = [] @@ -37,23 +32,24 @@ class UserList(mixins.ListModelMixin, mixins.CreateModelMixin, generics.GenericA return self.create(request, *args, **kwargs) def get_queryset(self): - qs = get_user_model().objects.all() + query_set = get_user_model().objects.all() if self.request.user: # Return the currently logged in user status = self.request.query_params.get("user", None) if status and status == "current": - qs = get_user_model().objects.filter(pk=self.request.user.pk) + query_set = get_user_model().objects.filter(pk=self.request.user.pk) - return qs + return query_set class UserDetail( - mixins.RetrieveModelMixin, - mixins.UpdateModelMixin, - mixins.DestroyModelMixin, - generics.GenericAPIView, -): + mixins.RetrieveModelMixin, + mixins.UpdateModelMixin, + mixins.DestroyModelMixin, + generics.GenericAPIView + ): + lookup_field_options = ["pk", "username"] serializer_class = UserSerializer queryset = get_user_model().objects.all() @@ -83,8 +79,10 @@ class UserDetail( class OfferList( - mixins.ListModelMixin, mixins.CreateModelMixin, generics.GenericAPIView -): + mixins.ListModelMixin, + mixins.CreateModelMixin, + generics.GenericAPIView + ): permission_classes = [IsAuthenticatedOrReadOnly] serializer_class = OfferSerializer @@ -98,41 +96,41 @@ class OfferList( serializer.save(owner=self.request.user) def get_queryset(self): - qs = Offer.objects.none() + query_set = Offer.objects.none() result = Offer.objects.none() if self.request.user: - qs = Offer.objects.filter( + query_set = Offer.objects.filter( Q(owner=self.request.user) | Q(recipient=self.request.user) ).distinct() - qp = self.request.query_params - u = self.request.user + query_params = self.request.query_params + user = self.request.user # filtering by status (if provided) - s = qp.get("status", None) - if s is not None and self.request is not None: - qs = qs.filter(status=s) - if qp.get("status", None) is None: - qs = Offer.objects.filter(Q(owner=u)).distinct() + status = query_params.get("status", None) + if status is not None and self.request is not None: + query_set = query_set.filter(status=status) + if query_params.get("status", None) is None: + query_set = Offer.objects.filter(Q(owner=user)).distinct() # filtering by category (sent or received) - c = qp.get("category", None) - if c is not None and qp is not None: - if c == "sent": - qs = qs.filter(owner=u) - elif c == "received": - qs = qs.filter(recipient=u) - return qs - else: - return result + category = query_params.get("category", None) + if category is not None and query_params is not None: + if category == "sent": + query_set = query_set.filter(owner=user) + elif category == "received": + query_set = query_set.filter(recipient=user) + return query_set + + return result class OfferDetail( - mixins.RetrieveModelMixin, - mixins.UpdateModelMixin, - mixins.DestroyModelMixin, - generics.GenericAPIView, -): + mixins.RetrieveModelMixin, + mixins.UpdateModelMixin, + mixins.DestroyModelMixin, + generics.GenericAPIView, + ): permission_classes = [IsAuthenticatedOrReadOnly] queryset = Offer.objects.all() serializer_class = OfferSerializer @@ -151,11 +149,11 @@ class OfferDetail( class AthleteFileList( - mixins.ListModelMixin, - mixins.CreateModelMixin, - CreateListModelMixin, - generics.GenericAPIView, -): + mixins.ListModelMixin, + mixins.CreateModelMixin, + CreateListModelMixin, + generics.GenericAPIView, + ): queryset = AthleteFile.objects.all() serializer_class = AthleteFileSerializer permission_classes = [permissions.IsAuthenticated & (IsAthlete | IsCoach)] @@ -182,11 +180,11 @@ class AthleteFileList( class AthleteFileDetail( - mixins.RetrieveModelMixin, - mixins.UpdateModelMixin, - mixins.DestroyModelMixin, - generics.GenericAPIView, -): + mixins.RetrieveModelMixin, + mixins.UpdateModelMixin, + mixins.DestroyModelMixin, + generics.GenericAPIView, + ): queryset = AthleteFile.objects.all() serializer_class = AthleteFileSerializer permission_classes = [permissions.IsAuthenticated & (IsAthlete | IsOwner)]