Skip to content

Commit

Permalink
trying to implement returning partial objects
Browse files Browse the repository at this point in the history
  • Loading branch information
ohi-711 committed Nov 30, 2023
1 parent 701fa2a commit cc5a960
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 28 deletions.
16 changes: 3 additions & 13 deletions core/api/serializers/custom/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import json
import os

from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ObjectDoesNotExist
Expand Down Expand Up @@ -27,7 +26,6 @@ def to_representation(self, obj):
}


# todo switch all of these back to ChoiceField. refer to git history for the old code.
class ContentTypeField(serializers.Field):
def __init__(self, **kwargs):
default_error_messages = {
Expand Down Expand Up @@ -63,15 +61,10 @@ def get_gravatar_url(obj: User):


class OrganizationSerializer(serializers.ModelSerializer):
gravatar_url = serializers.SerializerMethodField(read_only=True)
class Meta:
model = Organization
fields = ["id", "name", "slug", "icon"]

@staticmethod
def get_gravatar_url(obj: Organization):
return gravatar_url(obj.pk)


class TagSerializer(serializers.ModelSerializer):
class Meta:
Expand Down Expand Up @@ -178,18 +171,15 @@ def __init__(self, **kwargs):
self.default_error_messages.update(default_error_messages)


class TagRelatedField(serializers.MultipleChoiceField):
class TagRelatedField(serializers.MultipleChoiceField): # todo fix tests for this
"""
A custom field to represent a list of Tag objects in the form of {id, name, color},
but accepts input as a list of tag IDs.
"""

def __init__(self, **kwargs):
kwargs["required"] = False
if not os.environ.get("GITHUB_ACTIONS", True):
choices = Tag.objects.all().values_list("id", "name")
else:
choices = []
choices = Tag.objects.all().values_list("id", "name")
kwargs["help_text"] = "The Tags associated with this object."
super().__init__(choices, **kwargs)

Expand Down Expand Up @@ -224,4 +214,4 @@ def __init__(self, **kwargs):
super().__init__(**kwargs)

def to_representation(self, obj):
return CommentSerializer(obj, many=True).data
return CommentSerializer(obj, many=True).data
7 changes: 0 additions & 7 deletions core/api/serializers/organization.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
from rest_framework import serializers

from core.api.serializers.custom import PrimaryKeyAndSlugRelatedField
from core.api.utils.gravatar import gravatar_url
from .tag import TagSerializer
from ... import models


class OrganizationSerializer(serializers.ModelSerializer):
gravatar_url = serializers.SerializerMethodField(read_only=True)

owner = PrimaryKeyAndSlugRelatedField(
slug_field="username", queryset=models.User.objects.all()
)
Expand All @@ -24,7 +21,3 @@ class OrganizationSerializer(serializers.ModelSerializer):
class Meta:
model = models.Organization
fields = "__all__"

@staticmethod
def get_gravatar_url(obj: models.Organization):
return gravatar_url(obj.pk)
9 changes: 4 additions & 5 deletions core/api/serializers/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,9 @@ class UserSerializer3(serializers.ModelSerializer):
id = serializers.PrimaryKeyRelatedField(queryset=models.Tag.objects.all())
gravatar_url = serializers.SerializerMethodField(read_only=True)

def get_gravatar_url(self, obj):
return gravatar_url(obj.email)

class Meta:
model = models.User
fields = [
Expand All @@ -82,8 +85,4 @@ class Meta:
"organizations",
"tags_following",
"gravatar_url",
]

@staticmethod
def get_gravatar_url(obj: models.User):
return gravatar_url(obj.email)
]
10 changes: 9 additions & 1 deletion core/api/views/objects/organization.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,15 @@
from django.db.models import Count
from rest_framework import permissions, serializers

from core.api.utils.gravatar import gravatar_url
from core.models import Tag, User, Organization, Comment

from .base import BaseProvider
from .... import models


class Serializer(serializers.ModelSerializer):
gravatar_url = serializers.SerializerMethodField(read_only=True)
links = serializers.SlugRelatedField(
slug_field="url", many=True, queryset=models.OrganizationURL.objects.all()
)
Expand All @@ -17,7 +21,11 @@ class Serializer(serializers.ModelSerializer):

class Meta:
model = models.Organization
fields = "__all__"
fields = ["id", "username", "first_name", "last_name", "organization", "gravatar_url"]

@staticmethod
def get_gravatar_url(obj: Organization):
return gravatar_url(obj.organization)


class SupervisorOrExec(permissions.BasePermission):
Expand Down
8 changes: 6 additions & 2 deletions core/api/views/objects/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
from ...utils.gravatar import gravatar_url
from ....models import User, graduating_year_choices


class Serializer(serializers.ModelSerializer):
email_hash = serializers.SerializerMethodField(read_only=True)
gravatar_url = serializers.SerializerMethodField(read_only=True)
Expand Down Expand Up @@ -152,6 +151,7 @@ def create(self, validated_data) -> User:
return user

class Meta:
gravatar_url = serializers.SerializerMethodField(read_only=True)
model = User
fields = [
"first_name",
Expand All @@ -166,6 +166,10 @@ class Meta:
"tags_following",
]

@staticmethod
def get_gravatar_url(obj: User):
return gravatar_url(obj.email)


class Identity(permissions.BasePermission):
def has_object_permission(self, request, view, user):
Expand All @@ -178,7 +182,7 @@ def has_object_permission(self, request, view, user):

class UserProvider(BaseProvider):
model = User
lookup_fields = ["id", "username__iexact"]
lookup_fields = ["id", "username"]

@property
def permission_classes(self):
Expand Down

0 comments on commit cc5a960

Please sign in to comment.