def test_no_active_missions(self): """Tests when there are no active missions.""" _, err = active_mission() self.assertTrue(isinstance(err, HttpResponseServerError)) _, err = mission_for_request({}) self.assertTrue(isinstance(err, HttpResponseServerError))
def test_no_active_missions(self): """Tests when there are no active missions.""" _, err = active_mission() self.assertTrue(isinstance(err, HttpResponseServerError)) _, err = mission_for_request({}) self.assertTrue(isinstance(err, HttpResponseServerError))
def get(self, request): logger.info('Admin downloading team evaluation.') # Get the mission to evaluate a team for. mission, error = mission_for_request(request.GET) if error: logger.warning('Could not get mission to evaluate teams.') return error # Get the optional team to eval. users = None if 'team' in request.GET: try: team = int(request.GET['team']) users = [User.objects.get(pk=team)] except TypeError: return HttpResponseBadRequest('Team not an ID.') except User.DoesNotExist: return HttpResponseNotFound('Team not found.') # Get the eval data for the teams user_eval_data = mission.evaluate_teams(users) if not user_eval_data: logger.warning('No data for team evaluation.') return HttpResponseServerError( 'Could not get user evaluation data.') # Convert to username key-d map. user_eval_data = {u.username: d for u, d in user_eval_data.iteritems()} return self.format_response(user_eval_data)
def get(self, request): logger.info('Admin downloading team evaluation.') # Get the mission to evaluate a team for. mission, error = mission_for_request(request.GET) if error: logger.warning('Could not get mission to evaluate teams.') return error # Get the optional team to eval. users = None if 'team' in request.GET: try: team = int(request.GET['team']) users = [User.objects.get(pk=team)] except TypeError: return HttpResponseBadRequest('Team not an ID.') except User.DoesNotExist: return HttpResponseNotFound('Team not found.') # Get the eval data for the teams user_eval_data = mission.evaluate_teams(users) if not user_eval_data: logger.warning('No data for team evaluation.') return HttpResponseServerError( 'Could not get user evaluation data.') # Convert to username key-d map. user_eval_data = {u.username: d for u, d in user_eval_data.iteritems()} return self.format_response(user_eval_data)
def test_specified_mission(self): """Tests getting the mission for a specified ID.""" config = self.create_config() config.is_active = False config.save() params = {'mission': str(config.pk)} recv_config, _ = mission_for_request(params) self.assertEqual(config, recv_config)
def test_specified_mission(self): """Tests getting the mission for a specified ID.""" config = self.create_config() config.is_active = False config.save() params = {'mission': str(config.pk)} recv_config, _ = mission_for_request(params) self.assertEqual(config, recv_config)
def test_active_mission(self): """Tests getting the single active mission.""" config = self.create_config() config.is_active = True config.save() recv_config, _ = active_mission() self.assertEqual(config, recv_config) recv_config, _ = mission_for_request({}) self.assertEqual(config, recv_config)
def test_active_mission(self): """Tests getting the single active mission.""" config = self.create_config() config.is_active = True config.save() recv_config, _ = active_mission() self.assertEqual(config, recv_config) recv_config, _ = mission_for_request({}) self.assertEqual(config, recv_config)
def get(self, request): logger.info('Admin downloaded team evaluation.') # Get the mission to evaluate a team for. mission, error = mission_for_request(request.GET) if error: logger.warning('Could not get mission to evaluate teams.') return error # Get the eval data for the teams user_eval_data = mission.evaluate_teams() if not user_eval_data: logger.warning('No data for team evaluation.') return HttpResponseServerError( 'Could not get user evaluation data.') # Reformat to column oriented user_col_data = {} for (user, eval_data) in user_eval_data.iteritems(): col_data = user_col_data.setdefault(user, {}) col_data['username'] = user.username work_queue = [([], eval_data)] while len(work_queue) > 0: (cur_prefixes, cur_map) = work_queue.pop() for (key, val) in cur_map.iteritems(): new_prefixes = copy.copy(cur_prefixes) new_prefixes.append(str(key)) if isinstance(val, dict): work_queue.append((new_prefixes, val)) else: column_key = '.'.join(new_prefixes) if isinstance(val, list): col_data[column_key] = ','.join(val) else: col_data[column_key] = val # Get column headers col_headers = set() for col_data in user_col_data.values(): for header in col_data.keys(): col_headers.add(header) col_headers = sorted(col_headers) # Write output csv_output = cStringIO.StringIO() writer = csv.DictWriter(csv_output, fieldnames=col_headers) writer.writeheader() for col_data in user_col_data.values(): writer.writerow(col_data) output = csv_output.getvalue() csv_output.close() return HttpResponse(output, content_type='text/csv')
def get(self, request): logger.info('Admin downloaded team evaluation.') # Get the mission to evaluate a team for. mission, error = mission_for_request(request.GET) if error: logger.warning('Could not get mission to evaluate teams.') return error # Get the eval data for the teams user_eval_data = mission.evaluate_teams() if not user_eval_data: logger.warning('No data for team evaluation.') return HttpResponseServerError( 'Could not get user evaluation data.') # Reformat to column oriented user_col_data = {} for (user, eval_data) in user_eval_data.iteritems(): col_data = user_col_data.setdefault(user, {}) col_data['username'] = user.username work_queue = [([], eval_data)] while len(work_queue) > 0: (cur_prefixes, cur_map) = work_queue.pop() for (key, val) in cur_map.iteritems(): new_prefixes = copy.copy(cur_prefixes) new_prefixes.append(str(key)) if isinstance(val, dict): work_queue.append((new_prefixes, val)) else: column_key = '.'.join(new_prefixes) if isinstance(val, list): col_data[column_key] = ','.join(val) else: col_data[column_key] = val # Get column headers col_headers = set() for col_data in user_col_data.values(): for header in col_data.keys(): col_headers.add(header) col_headers = sorted(col_headers) # Write output csv_output = cStringIO.StringIO() writer = csv.DictWriter(csv_output, fieldnames=col_headers) writer.writeheader() for col_data in user_col_data.values(): writer.writerow(col_data) output = csv_output.getvalue() csv_output.close() return HttpResponse(output)
def test_multiple_active_missions(self): """Tests when too many active missions.""" config = self.create_config() config.is_active = True config.save() config = self.create_config() config.is_active = True config.save() _, err = active_mission() self.assertTrue(isinstance(err, HttpResponseServerError)) _, err = mission_for_request({}) self.assertTrue(isinstance(err, HttpResponseServerError))
def test_multiple_active_missions(self): """Tests when too many active missions.""" config = self.create_config() config.is_active = True config.save() config = self.create_config() config.is_active = True config.save() _, err = active_mission() self.assertTrue(isinstance(err, HttpResponseServerError)) _, err = mission_for_request({}) self.assertTrue(isinstance(err, HttpResponseServerError))
def get(self, request): logger.info('Admin downloading team evaluation.') # Get the mission to evaluate a team for. mission, error = mission_for_request(request.GET) if error: logger.warning('Could not get mission to evaluate teams.') return error # Get the optional team to eval. users = None if 'team' in request.GET: try: team = int(request.GET['team']) users = [User.objects.get(pk=team)] except TypeError: return HttpResponseBadRequest('Team not an ID.') except User.DoesNotExist: return HttpResponseNotFound('Team not found.') # Get the eval data for the teams. mission_eval = mission_evaluation.evaluate_teams(mission, users) if not mission_eval: logger.warning('No data for team evaluation.') return HttpResponseServerError( 'Could not get user evaluation data.') # Form Zip file. zip_io = cStringIO.StringIO() with zipfile.ZipFile(zip_io, 'w') as zip_file: zip_file.writestr( '/evaluate_teams/all.json', self.pretty_json(json_format.MessageToJson(mission_eval))) team_jsons = [] for team_eval in mission_eval.teams: team_json = self.pretty_json( json_format.MessageToJson(team_eval)) zip_file.writestr( '/evaluate_teams/teams/%s.json' % team_eval.team, team_json) team_jsons.append(team_json) zip_file.writestr('/evaluate_teams/all.csv', self.csv_from_json(team_jsons)) zip_output = zip_io.getvalue() zip_io.close() return HttpResponse(zip_output, content_type='application/zip')
def get(self, request): logger.info('Admin downloading team evaluation.') # Get the mission to evaluate a team for. mission, error = mission_for_request(request.GET) if error: logger.warning('Could not get mission to evaluate teams.') return error # Get the optional team to eval. users = None if 'team' in request.GET: try: team = int(request.GET['team']) users = [User.objects.get(pk=team)] except TypeError: return HttpResponseBadRequest('Team not an ID.') except User.DoesNotExist: return HttpResponseNotFound('Team not found.') # Get the eval data for the teams. mission_eval = mission_evaluation.evaluate_teams(mission, users) if not mission_eval: logger.warning('No data for team evaluation.') return HttpResponseServerError( 'Could not get user evaluation data.') # Form Zip file. zip_io = cStringIO.StringIO() with zipfile.ZipFile(zip_io, 'w') as zip_file: zip_file.writestr( '/evaluate_teams/all.json', self.pretty_json(json_format.MessageToJson(mission_eval))) team_jsons = [] for team_eval in mission_eval.teams: team_json = self.pretty_json(json_format.MessageToJson( team_eval)) zip_file.writestr('/evaluate_teams/teams/%s.json' % team_eval.team, team_json) team_jsons.append(team_json) zip_file.writestr('/evaluate_teams/all.csv', self.csv_from_json(team_jsons)) zip_output = zip_io.getvalue() zip_io.close() return HttpResponse(zip_output, content_type='application/zip')
def test_noninteger_id(self): """Tests a non-integer mission ID in request.""" params = {'mission': 'a'} _, err = mission_for_request(params) self.assertTrue(isinstance(err, HttpResponseBadRequest))
def test_noninteger_id(self): """Tests a non-integer mission ID in request.""" params = {'mission': 'a'} _, err = mission_for_request(params) self.assertTrue(isinstance(err, HttpResponseBadRequest))
def test_config_doesnt_exist(self): """Tests a mission ID for a mission that doesn't exist.""" params = {'mission': '1'} _, err = mission_for_request(params) self.assertTrue(isinstance(err, HttpResponseBadRequest))
def test_config_doesnt_exist(self): """Tests a mission ID for a mission that doesn't exist.""" params = {'mission': '1'} _, err = mission_for_request(params) self.assertTrue(isinstance(err, HttpResponseBadRequest))