From 95e1630f180135dd023241583ba8d7674c564a67 Mon Sep 17 00:00:00 2001 From: Nikoleta Glynatsi Date: Tue, 29 Nov 2016 18:07:56 +0000 Subject: [PATCH 1/3] Minor corrections to models. Adding field: - id in player - player list in game and minnor correction in Game model. --- werewolf/tailend/models.py | 62 ++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 30 deletions(-) diff --git a/werewolf/tailend/models.py b/werewolf/tailend/models.py index fd64bc8..0366fa9 100644 --- a/werewolf/tailend/models.py +++ b/werewolf/tailend/models.py @@ -51,41 +51,12 @@ def value_to_string(self, obj): return self.get_prep_value(value) -class Game(models.Model): - """ - Manage game state - """ - owner = models.ForeignKey("Player", related_name="games") - STATUS_CHOICES = ( - ("JN", "Joining"), - ("ST", "Started"), - ("FN", "Finished") - ) - status = models.CharField( - max_length=2, - choices=STATUS_CHOICES, - default="JN" - ) - daynumber = models.IntegerField( - default=0 - ) - STAGE_CHOICES = ( - ("N", "Night"), - ("D", "Day") - ) - stage = models.CharField( - max_length=2, - choices=STAGE_CHOICES, - default="N" - ) - history = HistoryField() - - class Player(models.Model): """ Manage player state """ name = models.CharField(max_length=100) + id = models.CharField(max_length=20, primary_key=True) STATUS_CHOICES = ( ("VG", "Voting"), ("VD", "Voted"), @@ -110,3 +81,34 @@ class Player(models.Model): choices=ROLE_CHOICES, default=None ) + + +class Game(models.Model): + """ + Manage game state + """ + owner = models.ForeignKey(Player, related_name="games") + player_list = models.ManyToManyField(Player) + STATUS_CHOICES = ( + ("JN", "Joining"), + ("ST", "Started"), + ("FN", "Finished") + ) + status = models.CharField( + max_length=2, + choices=STATUS_CHOICES, + default="JN" + ) + daynumber = models.IntegerField( + default=0 + ) + STAGE_CHOICES = ( + ("N", "Night"), + ("D", "Day") + ) + stage = models.CharField( + max_length=2, + choices=STAGE_CHOICES, + default="N" + ) + history = HistoryField() From 4924aa4ddd8cccbca7a78f2f31383c82110fd3ca Mon Sep 17 00:00:00 2001 From: Nikoleta Glynatsi Date: Tue, 29 Nov 2016 18:08:47 +0000 Subject: [PATCH 2/3] Create rest framework output. --- werewolf/tailend/serializers.py | 16 ++++++++++++++++ werewolf/tailend/urls.py | 2 ++ werewolf/tailend/views.py | 11 ++++++++++- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/werewolf/tailend/serializers.py b/werewolf/tailend/serializers.py index 178fd6d..84580af 100644 --- a/werewolf/tailend/serializers.py +++ b/werewolf/tailend/serializers.py @@ -1,5 +1,6 @@ from django.contrib.auth.models import User from rest_framework import serializers +from .models import Game, Player, History # Serializers define the API representation. @@ -7,3 +8,18 @@ class UserSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = User fields = ('url', 'username', 'email', 'is_staff') + + +class PlayerSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = Player + fields = ('name', 'status') + + +class GameSerializer(serializers.HyperlinkedModelSerializer): + + player_list = PlayerSerializer(many=True) + + class Meta: + model = Game + fields = ('player_list', 'status', 'daynumber', 'stage', 'history') diff --git a/werewolf/tailend/urls.py b/werewolf/tailend/urls.py index 4cc3319..296711b 100644 --- a/werewolf/tailend/urls.py +++ b/werewolf/tailend/urls.py @@ -5,6 +5,8 @@ # Routers provide an easy way of automatically determining the URL conf. router = routers.DefaultRouter() router.register(r'users', views.UserViewSet) +router.register(r'players', views.PlayerViewSet) +router.register(r'game', views.GameViewSet) urlpatterns = [ url(r'^', include(router.urls)), diff --git a/werewolf/tailend/views.py b/werewolf/tailend/views.py index 70ce0b4..2f295ee 100644 --- a/werewolf/tailend/views.py +++ b/werewolf/tailend/views.py @@ -1,6 +1,6 @@ from django.contrib.auth.models import User from rest_framework import viewsets -from .serializers import UserSerializer +from .serializers import * # ViewSets define the view behavior. @@ -8,3 +8,12 @@ class UserViewSet(viewsets.ModelViewSet): queryset = User.objects.all() serializer_class = UserSerializer + +class PlayerViewSet(viewsets.ModelViewSet): + queryset = Player.objects.all() + serializer_class = PlayerSerializer + + +class GameViewSet(viewsets.ModelViewSet): + queryset = Game.objects.all() + serializer_class = GameSerializer From 7c9d778f70505a1352534d97567b3e18f543df05 Mon Sep 17 00:00:00 2001 From: Nikoleta Glynatsi Date: Tue, 29 Nov 2016 18:20:37 +0000 Subject: [PATCH 3/3] Fix documentation. --- werewolf/tailend/models.py | 41 +++++++++++++++++++++++++++------ werewolf/tailend/serializers.py | 8 ++++--- werewolf/tailend/urls.py | 4 ++-- werewolf/tailend/views.py | 4 +++- 4 files changed, 44 insertions(+), 13 deletions(-) diff --git a/werewolf/tailend/models.py b/werewolf/tailend/models.py index 0366fa9..6d05a7d 100644 --- a/werewolf/tailend/models.py +++ b/werewolf/tailend/models.py @@ -52,20 +52,32 @@ def value_to_string(self, obj): class Player(models.Model): - """ - Manage player state + """Player Class. + + Parameters + ---------- + + -name: Char Field + player's name + -id: Char Field + player's id + -stage: Char Field + the stage the player is currently. There are four stages of each + round of the game + -role: Char Field + player's role """ name = models.CharField(max_length=100) id = models.CharField(max_length=20, primary_key=True) - STATUS_CHOICES = ( + STAGE_CHOICES = ( ("VG", "Voting"), ("VD", "Voted"), ("DD", "Dead"), ("SG", "Sleeping") ) - status = models.CharField( + stage = models.CharField( max_length=2, - choices=STATUS_CHOICES, + choices=STAGE_CHOICES, default="SG" ) ROLE_CHOICES = ( @@ -84,8 +96,23 @@ class Player(models.Model): class Game(models.Model): - """ - Manage game state + """Game class. + + Parameters + ---------- + + -owner: Foreign Key + a player instance that is the game master + -player_list: ManyToManyField + a list of player instances + -status: Char Field + the status of the game. There can only be three different game status + -daynumber: Integer Field + an integer showing in which day the game is currently + -stage: Char Field + the stage can either be day or night + -history: History instance + the history of the entire game """ owner = models.ForeignKey(Player, related_name="games") player_list = models.ManyToManyField(Player) diff --git a/werewolf/tailend/serializers.py b/werewolf/tailend/serializers.py index 84580af..170b07e 100644 --- a/werewolf/tailend/serializers.py +++ b/werewolf/tailend/serializers.py @@ -1,25 +1,27 @@ from django.contrib.auth.models import User from rest_framework import serializers -from .models import Game, Player, History +from .models import Game, Player -# Serializers define the API representation. class UserSerializer(serializers.HyperlinkedModelSerializer): + """User Serializer""" class Meta: model = User fields = ('url', 'username', 'email', 'is_staff') class PlayerSerializer(serializers.HyperlinkedModelSerializer): + """Player Object Serializer""" class Meta: model = Player fields = ('name', 'status') class GameSerializer(serializers.HyperlinkedModelSerializer): + """Game Object Serializer""" player_list = PlayerSerializer(many=True) - + class Meta: model = Game fields = ('player_list', 'status', 'daynumber', 'stage', 'history') diff --git a/werewolf/tailend/urls.py b/werewolf/tailend/urls.py index 296711b..74e2207 100644 --- a/werewolf/tailend/urls.py +++ b/werewolf/tailend/urls.py @@ -2,7 +2,7 @@ from rest_framework import routers from tailend import views -# Routers provide an easy way of automatically determining the URL conf. + router = routers.DefaultRouter() router.register(r'users', views.UserViewSet) router.register(r'players', views.PlayerViewSet) @@ -11,4 +11,4 @@ urlpatterns = [ url(r'^', include(router.urls)), url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')) -] \ No newline at end of file + ] diff --git a/werewolf/tailend/views.py b/werewolf/tailend/views.py index 2f295ee..9b0d9f1 100644 --- a/werewolf/tailend/views.py +++ b/werewolf/tailend/views.py @@ -3,17 +3,19 @@ from .serializers import * -# ViewSets define the view behavior. class UserViewSet(viewsets.ModelViewSet): + """View set for User""" queryset = User.objects.all() serializer_class = UserSerializer class PlayerViewSet(viewsets.ModelViewSet): + """View set for Player""" queryset = Player.objects.all() serializer_class = PlayerSerializer class GameViewSet(viewsets.ModelViewSet): + """View set for Game""" queryset = Game.objects.all() serializer_class = GameSerializer