This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
import re | |
import csv | |
import datetime as dt | |
from prettytable import PrettyTable | |
# intialize table | |
rows = [] | |
table = PrettyTable() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class PostSerializer(serializers.ModelSerializer): | |
user = UserListSerializer() | |
images = ImageListSerializer(many=True) | |
is_liked = serializers.SerializerMethodField(allow_null=True) | |
class Meta: | |
model = Post | |
exclude = ['timestamp', 'vote_score', 'num_vote_down'] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from django.db import IntegrityError | |
from django.shortcuts import get_object_or_404 | |
from rest_framework import status | |
from rest_framework.views import APIView | |
from rest_framework.response import Response | |
from rest_framework.permissions import IsAuthenticated | |
from post.models import Post |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from django.db.models import QuerySet | |
from django.shortcuts import get_object_or_404 | |
from rest_framework.permissions import IsAuthenticated | |
from rest_framework.exceptions import PermissionDenied | |
from rest_framework.generics import ( | |
ListAPIView, | |
CreateAPIView, | |
RetrieveAPIView, | |
RetrieveUpdateAPIView, |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class UserDetailAPIView(RetrieveAPIView): | |
lookup_url_kwarg = 'username' | |
queryset = User.objects.all() | |
lookup_field = 'username__iexact' | |
serializer_class = UserSerializer | |
class UserPostListAPIView(ListAPIView): | |
serializer_class = PostSerializer | |
permission_classes = (IsAuthenticated,) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class FeedAPIView(ListAPIView): | |
serializer_class = PostSerializer | |
permission_classes = (IsAuthenticated,) | |
def get_queryset(self) -> QuerySet: | |
user = self.request.user | |
followers = user.following | |
follower_ids = list(followers.values_list('id', flat=True)) + [user.id] | |
return Post.objects.filter(user__in=follower_ids).order_by('-timestamp') |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class FollowRequestActionAPIView(APIView): | |
""" | |
APIView to accept or reject a FollowRequest by the person | |
who is being requested to act upon said request. | |
""" | |
parser_classes = (FormParser,) | |
permission_classes = (IsAuthenticated,) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from django.shortcuts import get_object_or_404 | |
from django.contrib.auth import get_user_model | |
from django.core.handlers.wsgi import WSGIRequest | |
from rest_framework import status | |
from rest_framework.views import APIView | |
from rest_framework.response import Response | |
from rest_framework.parsers import FormParser | |
from rest_framework.permissions import IsAuthenticated |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from django.db import models | |
from typing import List, Tuple | |
class FollowRequest(models.Model): | |
requester = models.ForeignKey('user.User', on_delete=models.CASCADE) | |
to_follow = models.ForeignKey( | |
'user.User', on_delete=models.CASCADE, related_name='requests' | |
) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
_follows = models.ManyToManyField('User', blank=True, related_name='followed_by') | |
objects = UserManager() | |
REQUIRED_FIELDS = ['email', 'password'] | |
def unfollow(self, user: User) -> None: | |
""" Helper function to remove a user from this users following list. """ | |
self._follows.remove(user) |