@@ -86,16 +86,18 @@ class GameViewSet(viewsets.ViewSet):
86
86
strategies_index = {strategy_id (s ): s for s in axl .strategies }
87
87
_not_found_error = 'Strategy not found: {}'
88
88
89
- def _parse_players (self , player_list ):
89
+ def get_strategy_from_id (self , player_list ):
90
90
"""
91
- generate the axelrod Strategy from each player
92
- in the player list.
91
+ retrieve the axelrod Strategy or each player
92
+ in the player list and instantiate them .
93
93
94
94
Parameters
95
95
----------
96
96
player_list: list of strings
97
- a list of player ids
97
+ a list of strategy ids
98
98
"""
99
+ # note that the strategy is being instantiated - bugs with
100
+ # misleading error messages will be generated if they are not
99
101
return [self .strategies_index [s ]() for s in player_list ]
100
102
101
103
@staticmethod
@@ -114,23 +116,35 @@ def create_players(strategy):
114
116
except ObjectDoesNotExist :
115
117
return InternalStrategy .objects .create (id = strategy )
116
118
117
- def start (self , definition , strategies ):
118
- """start a game based on definition and list of strategies"""
119
+ def start_game (self , definition , players ):
120
+ """
121
+ start a game based on definition and list of strategies
122
+
123
+ Parameters
124
+ ----------
125
+ definition: GameDefinition
126
+ definition class that contains all game parameters
127
+ players: list of axelrod.Strategy
128
+ **instantiated** axelrod Strategy classes that are
129
+ playing the game
130
+ """
119
131
game = self .model .objects .create (definition = definition , status = 0 )
120
- result = game .run (strategies )
132
+ result = game .run (players )
121
133
game .results = self .results_serializer (result ).data
122
134
game .save ()
123
135
return game
124
136
125
137
def create (self , request ):
126
138
"""
127
- Take in a game_definition which expects all of the
128
- required parameters of the type of game, a list of
129
- player strings, and starts the game.
139
+ Take in a game definition from JSON post data which
140
+ expects all of the required parameters of the game,
141
+ a list of and a list of player strings. Once all of
142
+ these are validated, start the game.
130
143
"""
131
144
try :
132
- strategies = self ._parse_players (request .data ['player_list' ])
145
+ players = self .get_strategy_from_id (request .data ['player_list' ])
133
146
except KeyError as e :
147
+ # handle case where strategy id is not found in list of strategies
134
148
return Response ({
135
149
'player_list' : [self ._not_found_error .format (e .args [0 ])]
136
150
}, 400 )
@@ -141,15 +155,14 @@ def create(self, request):
141
155
definition_serializer = self .definition_serializer (data = request .data )
142
156
if definition_serializer .is_valid ():
143
157
definition = definition_serializer .save ()
144
- game = self .start (definition , strategies )
145
- response = self .response_serializer (game )
146
- return Response (response .data , 201 )
158
+ game = self .start_game (definition , players )
159
+ return Response (self .game_serializer (game ).data , 201 )
147
160
return Response (definition_serializer .errors , 400 )
148
161
149
162
def list (self , request ):
150
163
"""retrieve a list of all games of this type"""
151
164
games = self .model .objects .all ()
152
- serializer = self .response_serializer (games , many = True )
165
+ serializer = self .game_serializer (games , many = True )
153
166
return Response (serializer .data , 200 )
154
167
155
168
def retrieve (self , request , pk = None ):
@@ -158,10 +171,11 @@ def retrieve(self, request, pk=None):
158
171
game = self .model .objects .get (id = pk )
159
172
except ObjectDoesNotExist :
160
173
raise Http404
161
- serializer = self .response_serializer (game )
174
+ serializer = self .game_serializer (game )
162
175
return Response (serializer .data , 200 )
163
176
164
177
def destroy (self , request , pk = None ):
178
+ """delete a specific game"""
165
179
try :
166
180
self .model .objects .get (id = pk ).delete ()
167
181
except ObjectDoesNotExist :
@@ -179,7 +193,7 @@ class TournamentViewSet(GameViewSet):
179
193
definition_serializer = TournamentDefinitionSerializer
180
194
definition_model = models .TournamentDefinition
181
195
results_serializer = TournamentResultsSerializer
182
- response_serializer = TournamentSerializer
196
+ game_serializer = TournamentSerializer
183
197
model = models .Tournament
184
198
185
199
@@ -192,20 +206,20 @@ class MatchViewSet(GameViewSet):
192
206
definition_serializer = MatchDefinitionSerializer
193
207
definition_model = models .MatchDefinition
194
208
results_serializer = MatchResultsSerializer
195
- response_serializer = MatchSerializer
209
+ game_serializer = MatchSerializer
196
210
model = models .Match
197
211
198
212
199
213
class MoranViewSet (GameViewSet ):
200
214
"""
201
215
View that handles the creation and retrieval of Moran
202
- Processes. This is a
216
+ Processes.
203
217
"""
204
218
205
219
definition_serializer = MoranDefinitionSerializer
206
220
definition_model = models .MoranDefinition
207
221
results_serializer = MoranResultsSerializer
208
- response_serializer = MoranSerializer
222
+ game_serializer = MoranSerializer
209
223
model = models .MoranProcess
210
224
211
225
0 commit comments