Example #1
0
    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))
Example #2
0
    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))
Example #3
0
    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)
Example #4
0
    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)
Example #5
0
    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)
Example #6
0
    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)
Example #7
0
    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)
Example #8
0
    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)
Example #9
0
    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')
Example #10
0
    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)
Example #11
0
    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))
Example #12
0
    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))
Example #13
0
    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')
Example #14
0
    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')
Example #15
0
 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))
Example #16
0
 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))
Example #17
0
 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))
Example #18
0
 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))