Skip to content
Snippets Groups Projects
Commit baf217d3 authored by Simen's avatar Simen
Browse files

refactor: comments, docstring, line length and naming conventions

parent 30f3ca1b
No related branches found
No related tags found
1 merge request!6Refactor/backend workouts
......@@ -48,20 +48,25 @@ class Workout(models.Model):
)
# Visibility levels
PUBLIC = "PU" # Visible to all authenticated users
COACH = "CO" # Visible only to owner and their coach
PRIVATE = "PR" # Visible only to owner
# Visible to all authenticated users
PUBLIC = "PU"
# Visible only to owner and their coach
COACH = "CO"
# Visible only to owner
PRIVATE = "PR"
# Choices for visibility level
VISIBILITY_CHOICES = [
(PUBLIC, "Public"),
(COACH, "Coach"),
(PRIVATE, "Private"),
] # Choices for visibility level
]
visibility = models.CharField(
max_length=2, choices=VISIBILITY_CHOICES, default=COACH
)
class Meta:
"""Orders the object by date descendingly"""
ordering = ["-date"]
def __str__(self):
......
......@@ -19,6 +19,7 @@ class ExerciseInstanceSerializer(serializers.HyperlinkedModelSerializer):
)
class Meta:
"""serialized fields for the model ExerciseInstance"""
model = ExerciseInstance
fields = ["url", "id", "exercise", "sets", "number", "workout"]
......@@ -39,6 +40,7 @@ class WorkoutFileSerializer(serializers.HyperlinkedModelSerializer):
)
class Meta:
"""serialized fields for the model WorkoutFile"""
model = WorkoutFile
fields = ["url", "id", "owner", "file", "workout"]
......@@ -66,6 +68,7 @@ class WorkoutSerializer(serializers.HyperlinkedModelSerializer):
files = WorkoutFileSerializer(many=True, required=False)
class Meta:
"""serialized fields for the Workout. Owner is read only and cant be modified"""
model = Workout
fields = [
"url",
......@@ -101,10 +104,12 @@ class WorkoutSerializer(serializers.HyperlinkedModelSerializer):
workout = Workout.objects.create(**validated_data)
for exercise_instance_data in exercise_instances_data:
ExerciseInstance.objects.create(workout=workout, **exercise_instance_data)
ExerciseInstance.objects.create(
workout=workout, **exercise_instance_data)
for file_data in files_data:
WorkoutFile.objects.create(
workout=workout, owner=workout.owner, file=file_data.get("file")
workout=workout, owner=workout.owner, file=file_data.get(
"file")
)
return workout
......@@ -127,7 +132,8 @@ class WorkoutSerializer(serializers.HyperlinkedModelSerializer):
instance.name = validated_data.get("name", instance.name)
instance.notes = validated_data.get("notes", instance.notes)
instance.visibility = validated_data.get("visibility", instance.visibility)
instance.visibility = validated_data.get(
"visibility", instance.visibility)
instance.date = validated_data.get("date", instance.date)
instance.save()
......@@ -212,8 +218,18 @@ class ExerciseSerializer(serializers.HyperlinkedModelSerializer):
)
class Meta:
"""serialized fields for the model Exercise"""
model = Exercise
fields = ["url", "id", "name", "description", "duration", "calories", "muscleGroup", "unit", "instances"]
fields = [
"url",
"id",
"name",
"description",
"duration",
"calories",
"muscleGroup",
"unit",
"instances"]
class RememberMeSerializer(serializers.HyperlinkedModelSerializer):
......@@ -226,5 +242,6 @@ class RememberMeSerializer(serializers.HyperlinkedModelSerializer):
"""
class Meta:
"""serialized fields for the model RememberMe"""
model = RememberMe
fields = ["remember_me"]
......@@ -31,12 +31,14 @@ from rest_framework_simplejwt.tokens import RefreshToken
from rest_framework.response import Response
import json
from collections import namedtuple
import base64, pickle
import base64
import pickle
from django.core.signing import Signer
@api_view(["GET"])
def api_root(request, format=None):
"""The API root view"""
return Response(
{
"users": reverse("user-list", request=request, format=format),
......@@ -54,13 +56,16 @@ def api_root(request, format=None):
)
# Allow users to save a persistent session in their browser
class RememberMe(
mixins.ListModelMixin,
mixins.CreateModelMixin,
mixins.DestroyModelMixin,
generics.GenericAPIView,
):
"""Allow users to save a persistent session in their browser.
HTTP methods: GET, POST
"""
serializer_class = RememberMeSerializer
......@@ -68,7 +73,7 @@ class RememberMe(
if request.user.is_authenticated == False:
raise PermissionDenied
else:
return Response({"remember_me": self.rememberme()})
return Response({"remember_me": self.remember_me()})
def post(self, request):
cookieObject = namedtuple("Cookies", request.COOKIES.keys())(
......@@ -91,7 +96,7 @@ class RememberMe(
if sign == self.sign_user(user):
return user
def rememberme(self):
def remember_me(self):
creds = [self.request.user, self.sign_user(str(self.request.user))]
return base64.b64encode(pickle.dumps(creds))
......@@ -111,13 +116,15 @@ class WorkoutList(
"""
serializer_class = WorkoutSerializer
# User must be authenticated to create/view workouts
permission_classes = [
permissions.IsAuthenticated
] # User must be authenticated to create/view workouts
]
# For parsing JSON and Multi-part requests
parser_classes = [
MultipartJsonParser,
JSONParser,
] # For parsing JSON and Multi-part requests
]
filter_backends = [filters.OrderingFilter]
ordering_fields = ["name", "date", "owner__username"]
......@@ -131,18 +138,18 @@ class WorkoutList(
serializer.save(owner=self.request.user)
def get_queryset(self):
qs = Workout.objects.none()
queryset = Workout.objects.none()
if self.request.user:
# A workout should be visible to the requesting user if any of the following hold:
# - The workout has public visibility
# - The owner of the workout is the requesting user
# - The workout has coach visibility and the requesting user is the owner's coach
qs = Workout.objects.filter(
queryset = Workout.objects.filter(
Q(visibility="PU")
| (Q(visibility="CO") & Q(owner__coach=self.request.user))
).distinct()
return qs
return queryset
class WorkoutDetail(
......@@ -228,7 +235,10 @@ class ExerciseInstanceList(
CreateListModelMixin,
generics.GenericAPIView,
):
"""Class defining the web response for the creation"""
"""Class defining the web response for the creation
HTTP methods: GET, POST
"""
serializer_class = ExerciseInstanceSerializer
permission_classes = [permissions.IsAuthenticated & IsOwnerOfWorkout]
......@@ -259,6 +269,12 @@ class ExerciseInstanceDetail(
mixins.DestroyModelMixin,
generics.GenericAPIView,
):
"""Class defining the web response for the modification, deletion and getting
exercise instance details.
HTTP methods: GET, PUT, PATCH, DELETE
"""
serializer_class = ExerciseInstanceSerializer
permission_classes = [
permissions.IsAuthenticated
......@@ -287,6 +303,10 @@ class WorkoutFileList(
CreateListModelMixin,
generics.GenericAPIView,
):
"""Class defining the web response for the getting and creating list for workout files.
HTTP methods: GET, POST
"""
queryset = WorkoutFile.objects.all()
serializer_class = WorkoutFileSerializer
......@@ -323,6 +343,10 @@ class WorkoutFileDetail(
mixins.DestroyModelMixin,
generics.GenericAPIView,
):
"""Class defining the web response for the getting deleting workout file details.
HTTP methods: GET, POST
"""
queryset = WorkoutFile.objects.all()
serializer_class = WorkoutFileSerializer
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment