Skip to content

Pycodestyle changes made to Flashcards #91

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion flash/src/flashcards/api/permissions.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from accounts.models import UserProfile
from flashcards.models import Deck


class IsDeckOwner(permissions.BasePermission):

def has_object_permission(self, request, view, obj):
Expand All @@ -12,6 +13,7 @@ def has_object_permission(self, request, view, obj):

return obj.parent_user == request.user


class IsCardOwner(permissions.BasePermission):

def has_object_permission(self, request, view, obj):
Expand All @@ -20,4 +22,5 @@ def has_object_permission(self, request, view, obj):
if request.method in permissions.SAFE_METHODS:
return True

return (obj.parent_deck.parent_user == request.user) or (request.user.is_superuser)
return (obj.parent_deck.parent_user == request.user) or (
request.user.is_superuser)
68 changes: 44 additions & 24 deletions flash/src/flashcards/api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,34 +7,37 @@
Date Modified: 4/22/2018
"""

import ModelSerializer
import SerializerMethodField
import Deck
import Card

from rest_framework.serializers
from ..models

# Deck Fields Generalization
DECK_UNIQUE_ID = 'unique_id'
DECK_PARENT_USER = 'parent_user'
DECK_PARENT_COURSE = 'parent_course'
DECK_TITLE = 'title'
DECK_UNIQUE_ID = 'unique_id'
DECK_PARENT_USER = 'parent_user'
DECK_PARENT_COURSE = 'parent_course'
DECK_TITLE = 'title'
DECK_DECK_DESCRIPTION = 'deck_description'

# Card Fields Generalization
CARD_UNIQUE_ID = 'unique_id'
CARD_PARENT_DECK = 'parent_deck'
CARD_FRONT = 'front'
CARD_BACK = 'back'

CARD_UNIQUE_ID = 'unique_id'
CARD_PARENT_DECK = 'parent_deck'
CARD_FRONT = 'front'
CARD_BACK = 'back'

from rest_framework.serializers import (
ModelSerializer,
SerializerMethodField,
)
from ..models import Deck, Card

class DeckSerializer(ModelSerializer):
"""
This serializes the Deck model
"""
class Meta:
model = Deck
fields = (DECK_UNIQUE_ID, DECK_PARENT_USER, DECK_PARENT_COURSE, DECK_TITLE, DECK_DECK_DESCRIPTION)
fields = (
DECK_UNIQUE_ID, DECK_PARENT_USER,
DECK_PARENT_COURSE, DECK_TITLE, DECK_DECK_DESCRIPTION)


class DeckOutputSerializer(ModelSerializer):
Expand All @@ -47,7 +50,9 @@ class DeckOutputSerializer(ModelSerializer):

class Meta:
model = Deck
fields = (DECK_UNIQUE_ID, DECK_PARENT_USER, DECK_PARENT_COURSE, DECK_TITLE, DECK_DECK_DESCRIPTION, 'parent_course_url')
fields = (
DECK_UNIQUE_ID, DECK_PARENT_USER, DECK_PARENT_COURSE,
DECK_TITLE, DECK_DECK_DESCRIPTION, 'parent_course_url')

def get_parent_user(self, obj):
return obj.parent_user.username
Expand All @@ -56,7 +61,8 @@ def get_parent_course(self, obj):
return obj.parent_course.unique_id

def get_parent_course_url(self, obj):
return "/courses/api/course/retrieve/{}".format(obj.parent_course.unique_id)
return "/courses/api/course/retrieve/{}".format(
obj.parent_course.unique_id)


class DeckDetailSerializer(ModelSerializer):
Expand All @@ -67,20 +73,28 @@ class DeckDetailSerializer(ModelSerializer):
parent_course = SerializerMethodField(source='get_parent_course')
parent_course_url = SerializerMethodField(source='get_parent_course_url')
cards = SerializerMethodField(source='get_cards')

class Meta:
model = Deck
fields = (DECK_UNIQUE_ID, DECK_PARENT_USER, DECK_PARENT_COURSE, DECK_TITLE, DECK_DECK_DESCRIPTION, 'parent_course_url', 'cards')

fields = (
DECK_UNIQUE_ID,
DECK_PARENT_USER,
DECK_PARENT_COURSE,
DECK_TITLE,
DECK_DECK_DESCRIPTION,
'parent_course_url',
'cards')

def get_parent_user(self, obj):
return obj.parent_user.username

def get_parent_course(self, obj):
return obj.parent_course.unique_id

def get_parent_course_url(self, obj):
return "/courses/api/course/retrieve/{}".format(obj.parent_course.unique_id)

return "/courses/api/course/retrieve/{}".format(
obj.parent_course.unique_id)

def get_cards(self, obj):
cards_queryset = obj.card_set.all()
return CardOutputSerializer(cards_queryset, many=True).data
Expand All @@ -94,6 +108,7 @@ class Meta:
model = Card
fields = (CARD_UNIQUE_ID, CARD_PARENT_DECK, CARD_FRONT, CARD_BACK)


class CardOutputSerializer(ModelSerializer):
"""
This serializes the Card model for Output
Expand All @@ -103,10 +118,15 @@ class CardOutputSerializer(ModelSerializer):

class Meta:
model = Card
fields = (CARD_UNIQUE_ID, CARD_PARENT_DECK, CARD_FRONT, CARD_BACK, 'parent_deck_url')
fields = (
CARD_UNIQUE_ID,
CARD_PARENT_DECK,
CARD_FRONT, CARD_BACK,
'parent_deck_url')

def get_parent_deck(self, obj):
return obj.parent_deck.unique_id

def get_parent_deck_url(self, obj):
return "/flashcards/api/deck/retrieve/{}".format(obj.parent_deck.unique_id)
return "/flashcards/api/deck/retrieve/{}".format(
obj.parent_deck.unique_id)
57 changes: 43 additions & 14 deletions flash/src/flashcards/api/urls.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
"""
FlashCourses Decks & Cards REST API Class-Based URLs

File Path: /flash/src/flashcards/api/urls.py

Modified By: Patrick R. McElhiney
Date Modified: 4/16/2018
"""
Expand All @@ -27,16 +25,47 @@
app_name = 'flashcards_api'

urlpatterns = [
path('deck/create/', views.CreateDeckAPIView.as_view(), name='deck_create'),
path('deck/retrieve/<uuid:unique_id>', views.RetrieveDeckAPIView.as_view(), name='deck_retrieve'),
path('deck/list/', views.ListDeckAPIView.as_view(), name='deck_list'),
path('deck/delete/<uuid:unique_id>', views.DestroyDeckAPIView.as_view(), name='deck_delete'),
path('deck/update/<uuid:unique_id>', views.UpdateDeckAPIView.as_view(), name='deck_update'),
path('deck/detail/<uuid:unique_id>', views.DetailDeckAPIView.as_view(), name='deck_detail'),
path('card/create/', views.CreateCardAPIView.as_view(), name='card_create'),
path('card/retrieve/<uuid:unique_id>', views.RetrieveCardAPIView.as_view(), name='card_retrieve'),
path('card/list/', views.ListCardAPIView.as_view(), name='card_list'),
path('card/delete/<uuid:unique_id>', views.DestroyCardAPIView.as_view(), name='card_delete'),
path('card/update/<uuid:unique_id>', views.UpdateCardAPIView.as_view(), name='card_update')
path(
'deck/create/',
views.CreateDeckAPIView.as_view(),
name='deck_create'),
path(
'deck/retrieve/<uuid:unique_id>',
views.RetrieveDeckAPIView.as_view(),
name='deck_retrieve'),
path(
'deck/list/',
views.ListDeckAPIView.as_view(),
name='deck_list'),
path(
'deck/delete/<uuid:unique_id>',
views.DestroyDeckAPIView.as_view(),
name='deck_delete'),
path(
'deck/update/<uuid:unique_id>',
views.UpdateDeckAPIView.as_view(),
name='deck_update'),
path(
'deck/detail/<uuid:unique_id>',
views.DetailDeckAPIView.as_view(),
name='deck_detail'),
path(
'card/create/',
views.CreateCardAPIView.as_view(),
name='card_create'),
path(
'card/retrieve/<uuid:unique_id>',
views.RetrieveCardAPIView.as_view(),
name='card_retrieve'),
path(
'card/list/',
views.ListCardAPIView.as_view(),
name='card_list'),
path(
'card/delete/<uuid:unique_id>',
views.DestroyCardAPIView.as_view(),
name='card_delete'),
path('card/update/<uuid:unique_id>',
views.UpdateCardAPIView.as_view(),
name='card_update')
]

53 changes: 30 additions & 23 deletions flash/src/flashcards/api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,15 @@
NOTE: Uncomment the commented code below to enable authentication with JWT.
"""

import DeckSerializer
import DeckOutputSerializer
import DeckDetailSerializer
import CardSerializer
import CardOutputSerializer
from flashcards.models import Deck, Card
from rest_framework import generics
from .permissions import IsDeckOwner, IsCardOwner
from rest_framework.permissions import IsAuthenticatedOrReadOnly, IsAdminUser

# Deck Fields Generalization
DECK_UNIQUE_ID = 'unique_id'
Expand All @@ -17,25 +26,14 @@
CARD_UNIQUE_ID = 'unique_id'


from .serializers import (
DeckSerializer,
DeckOutputSerializer,
DeckDetailSerializer,
CardSerializer,
CardOutputSerializer,
)
from flashcards.models import Deck, Card
from rest_framework import generics
from .permissions import IsDeckOwner, IsCardOwner
from rest_framework.permissions import IsAuthenticatedOrReadOnly, IsAdminUser

class CreateDeckAPIView(generics.CreateAPIView):
"""
This API endpoint is for creating a new Deck.
"""
queryset = Deck.objects.all()
serializer_class = DeckSerializer
#permission_classes = (IsAuthenticatedOrReadOnly,)
# permission_classes = (IsAuthenticatedOrReadOnly,)


class RetrieveDeckAPIView(generics.RetrieveAPIView):
"""
Expand All @@ -45,15 +43,17 @@ class RetrieveDeckAPIView(generics.RetrieveAPIView):
lookup_field = DECK_UNIQUE_ID
queryset = Deck.objects.all()
serializer_class = DeckOutputSerializer
#permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
# permission_classes = (permissions.IsAuthenticatedOrReadOnly,)


class ListDeckAPIView(generics.ListAPIView):
"""
This API endpoint is for listing all Decks associated with a Course.
"""
queryset = Deck.objects.all().order_by('title')
serializer_class = DeckOutputSerializer
#permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
# permission_classes = (permissions.IsAuthenticatedOrReadOnly,)


class DestroyDeckAPIView(generics.DestroyAPIView):
"""
Expand All @@ -63,7 +63,8 @@ class DestroyDeckAPIView(generics.DestroyAPIView):
lookup_field = DECK_UNIQUE_ID
queryset = Deck.objects.all()
serializer_class = DeckSerializer
#permission_classes = (IsDeckOwner,IsAdminUser)
# permission_classes = (IsDeckOwner,IsAdminUser)


class UpdateDeckAPIView(generics.UpdateAPIView):
"""
Expand All @@ -73,7 +74,8 @@ class UpdateDeckAPIView(generics.UpdateAPIView):
lookup_field = DECK_UNIQUE_ID
queryset = Deck.objects.all()
serializer_class = DeckSerializer
#permission_classes = (IsDeckOwner,IsAdminUser)
# permission_classes = (IsDeckOwner,IsAdminUser)


class DetailDeckAPIView(generics.RetrieveAPIView):
"""
Expand All @@ -83,15 +85,17 @@ class DetailDeckAPIView(generics.RetrieveAPIView):
lookup_field = DECK_UNIQUE_ID
queryset = Deck.objects.all()
serializer_class = DeckDetailSerializer
#permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
# permission_classes = (permissions.IsAuthenticatedOrReadOnly,)


class CreateCardAPIView(generics.CreateAPIView):
"""
This API endpoint is for creating a new Card.
"""
queryset = Card.objects.all()
serializer_class = CardSerializer
#permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
# permission_classes = (permissions.IsAuthenticatedOrReadOnly,)


class RetrieveCardAPIView(generics.RetrieveAPIView):
"""
Expand All @@ -101,15 +105,17 @@ class RetrieveCardAPIView(generics.RetrieveAPIView):
lookup_field = CARD_UNIQUE_ID
queryset = Card.objects.all()
serializer_class = CardOutputSerializer
#permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
# permission_classes = (permissions.IsAuthenticatedOrReadOnly,)


class ListCardAPIView(generics.ListAPIView):
"""
This API endpoint is for listing all Cards associated with a Deck.
"""
queryset = Card.objects.all()
serializer_class = CardOutputSerializer
#permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
# permission_classes = (permissions.IsAuthenticatedOrReadOnly,)


class DestroyCardAPIView(generics.DestroyAPIView):
"""
Expand All @@ -119,7 +125,8 @@ class DestroyCardAPIView(generics.DestroyAPIView):
lookup_field = CARD_UNIQUE_ID
queryset = Card.objects.all()
serializer_class = CardSerializer
#permission_classes = (IsCardOwner, IsAdminUser)
# permission_classes = (IsCardOwner, IsAdminUser)


class UpdateCardAPIView(generics.UpdateAPIView):
"""
Expand All @@ -129,4 +136,4 @@ class UpdateCardAPIView(generics.UpdateAPIView):
lookup_field = CARD_UNIQUE_ID
queryset = Card.objects.all()
serializer_class = CardSerializer
#permission_classes = (IsCardOwner, IsAdminUser)
# permission_classes = (IsCardOwner, IsAdminUser)
1 change: 1 addition & 0 deletions flash/src/flashcards/apps.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@

from django.apps import AppConfig


class FlashcardsConfig(AppConfig):
name = 'flashcards'
Loading