Skip to content

Commit

Permalink
linted
Browse files Browse the repository at this point in the history
  • Loading branch information
minghansun1 committed Jan 25, 2025
1 parent b0253ae commit b114a73
Show file tree
Hide file tree
Showing 5 changed files with 494 additions and 295 deletions.
6 changes: 2 additions & 4 deletions backend/market/models.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
from django.contrib.auth import get_user_model
from django.db import models
from phonenumber_field.modelfields import PhoneNumberField
from django.db.models import Q
from django.core.exceptions import ValidationError


User = get_user_model()
Expand Down Expand Up @@ -38,7 +36,7 @@ def __str__(self):


class Item(models.Model):

seller = models.ForeignKey(User, on_delete=models.CASCADE, related_name="items_listed")
buyers = models.ManyToManyField(User, through=Offer, related_name="items_offered", blank=True)
tags = models.ManyToManyField(Tag, blank=True)
Expand All @@ -55,7 +53,7 @@ class Item(models.Model):

def __str__(self):
return f"{self.title} by {self.seller}"

def save(self, *args, **kwargs):
super().save(*args, **kwargs)

Expand Down
9 changes: 6 additions & 3 deletions backend/market/permissions.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,12 @@ def has_object_permission(self, request, view, obj):
print(request.method)
print(obj)
print(request.user)
return request.method in permissions.SAFE_METHODS or (
hasattr(obj, 'seller') and obj.seller == request.user) or (
hasattr(obj, 'item') and obj.item.seller == request.user)
return (
request.method in permissions.SAFE_METHODS
or (hasattr(obj, "seller") and obj.seller == request.user)
or (hasattr(obj, "item") and obj.item.seller == request.user)
)


class OfferOwnerPermission(permissions.BasePermission):
"""
Expand Down
37 changes: 26 additions & 11 deletions backend/market/serializers.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
from django.contrib.auth import get_user_model
from django.core import exceptions
from phonenumber_field.serializerfields import PhoneNumberField
from profanity_check import predict
from rest_framework import serializers
from django.core import exceptions
from rest_framework.exceptions import ValidationError

from market.models import Category, Item, ItemImage, Offer, Sublet, Tag

Expand Down Expand Up @@ -79,7 +78,15 @@ class ItemSerializer(serializers.ModelSerializer):
class Meta:
model = Item
fields = "__all__"
read_only_fields = ["id", "created_at", "seller", "buyers", "images", "favorites", "sublet_id"]
read_only_fields = [
"id",
"created_at",
"seller",
"buyers",
"images",
"favorites",
"sublet_id",
]

def validate_title(self, value):
if self.contains_profanity(value):
Expand All @@ -104,14 +111,22 @@ def create(self, validated_data):
return super().create(validated_data)
except exceptions.ValidationError as e:
raise serializers.ValidationError(e.message_dict)

def update(self, instance, validated_data):
try:
if instance.category.name == "Sublet" and "category" in validated_data and validated_data.get("category", None).name != "Sublet":
if (
instance.category.name == "Sublet"
and "category" in validated_data
and validated_data.get("category", None).name != "Sublet"
):
raise serializers.ValidationError("Cannot change category from Sublet")
if instance.category.name != "Sublet" and "category" in validated_data and validated_data.get("category", None).name == "Sublet":
if (
instance.category.name != "Sublet"
and "category" in validated_data
and validated_data.get("category", None).name == "Sublet"
):
raise serializers.ValidationError("Cannot change category to Sublet")

return super().update(instance, validated_data)
except exceptions.ValidationError as e:
raise serializers.ValidationError(e.message_dict)
Expand Down Expand Up @@ -142,13 +157,13 @@ class Meta:
"sublet_id",
]
read_only_fields = fields

def get_buyer_count(self, obj):
return obj.buyers.count()

def get_sublet_id(self, obj):
return obj.sublet.pk if hasattr(obj, "sublet") else None

def get_favorite_count(self, obj):
return obj.favorites.count()

Expand Down Expand Up @@ -235,4 +250,4 @@ class SubletSerializerList(serializers.ModelSerializer):
class Meta:
model = Sublet
fields = "__all__"
read_only_fields = [field.name for field in model._meta.fields]
read_only_fields = [field.name for field in model._meta.fields]
34 changes: 20 additions & 14 deletions backend/market/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework.serializers import ValidationError

from market.models import Category, Item, ItemImage, Offer, Sublet, Tag
from market.permissions import (
Expand All @@ -20,12 +19,12 @@
ItemImageSerializer,
ItemImageURLSerializer,
ItemSerializer,
ItemSerializerPublic,
ItemSerializerList,
ItemSerializerPublic,
OfferSerializer,
SubletSerializer,
SubletSerializerPublic,
SubletSerializerList,
SubletSerializerPublic,
)


Expand Down Expand Up @@ -54,6 +53,7 @@ def get_queryset(self):
user = self.request.user
return user.items_favorited


# TODO: Can add feature to filter for active offers only
class UserOffers(generics.ListAPIView):
serializer_class = OfferSerializer
Expand Down Expand Up @@ -84,9 +84,9 @@ class Items(viewsets.ModelViewSet):
queryset = Item.objects.all()

def get_serializer_class(self):
if self.action=="list":
if self.action == "list":
return ItemSerializerList
elif self.action=="retrieve" and self.get_object().seller != self.request.user:
elif self.action == "retrieve" and self.get_object().seller != self.request.user:
return ItemSerializerPublic
else:
return ItemSerializer
Expand Down Expand Up @@ -125,34 +125,34 @@ def list(self, request, *args, **kwargs):
# Serialize and return the queryset
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)


def create(self, request, *args, **kwargs):
if request.data.get("category", None) == "Sublet":
return Response("Sublet must be created using /sublets/", status=status.HTTP_400_BAD_REQUEST)
return Response(
"Sublet must be created using /sublets/", status=status.HTTP_400_BAD_REQUEST
)
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
return Response(serializer.data, status=status.HTTP_201_CREATED)

def update(self, request, *args, **kwargs):
partial = kwargs.pop('partial', False)
partial = kwargs.pop("partial", False)
instance = self.get_object()
serializer = self.get_serializer(instance, data=request.data, partial=partial)
serializer.is_valid(raise_exception=True)
self.perform_update(serializer)
return Response(serializer.data, status=status.HTTP_200_OK)



class Sublets(viewsets.ModelViewSet):
permission_classes = [SubletOwnerPermission | IsSuperUser]
queryset = Sublet.objects.all()

def get_serializer_class(self):
if self.action=="list":
if self.action == "list":
return SubletSerializerList
elif self.action=="retrieve" and self.get_object().item.seller != self.request.user:
elif self.action == "retrieve" and self.get_object().item.seller != self.request.user:
return SubletSerializerPublic
else:
return SubletSerializer
Expand Down Expand Up @@ -219,12 +219,18 @@ def get_queryset(self, *args, **kwargs):

# takes an image multipart form data and creates a new image object
def post(self, request, *args, **kwargs):
images = request.data.getlist('images', [])
images = request.data.getlist("images", [])
item_id = int(self.kwargs["item_id"])
item = get_object_or_404(Item, id=item_id)
self.check_object_permissions(request, item)
img_serializers = [self.get_serializer(data={"item": item_id, "image": img}) for img in images]
instances = [img_serializer.save() for img_serializer in img_serializers if img_serializer.is_valid(raise_exception=True)]
img_serializers = [
self.get_serializer(data={"item": item_id, "image": img}) for img in images
]
instances = [
img_serializer.save()
for img_serializer in img_serializers
if img_serializer.is_valid(raise_exception=True)
]
data = ItemImageURLSerializer(instances, many=True).data
return Response(data, status=status.HTTP_201_CREATED)

Expand Down
Loading

0 comments on commit b114a73

Please sign in to comment.