Example #1
0
    def test_create(self):
        sess1 = self.session(datetime.date(2014, 9, 7), 1, 'A0001', '13')
        sess2 = self.session(datetime.date(2014, 9, 2), 1, 'A0001', '13')
        sess3 = self.session(datetime.date(2014, 9, 2), 1, 'A0001', '14')
        for s in (
                sess1,
                sess2,
                sess3,
        ):
            FirstAidActivity.from_data(s).key.get(use_cache=False)

        stats = list(FirstAidUserStats.new_user_stats(self.student))
        self.assertEqual(3, len(stats))
        topic_stats = {s.topic_id: s for s in stats[:-1]}

        self.assertIn('13', topic_stats)
        self.assertEqual(6, topic_stats['13'].question_taken)
        self.assertEqual(33, topic_stats['13'].performance)

        self.assertIn('14', topic_stats)
        self.assertEqual(3, topic_stats['14'].question_taken)
        self.assertEqual(33, topic_stats['14'].performance)

        user_stats = stats[-1]
        self.assertEqual(9, user_stats.question_taken)
        self.assertEqual(33, user_stats.performance)

        ndb.put_multi(stats)
Example #2
0
    def get(self):
        """Return the list of topic.

        """
        self.response.cache_control = 'public'
        self.response.cache_control.max_age = 300
        self.render_json({
            "type": "topics",
            "topics": [t.summary() for t in FirstAidUserStats.get_topics()]
        })
Example #3
0
    def add_firstaid_stats(self, student):
        keys = ndb.put_multi(list(self.add_firstaid_session_stats(student)))

        @ndb.toplevel
        def populate_cache(keys):
            for k in keys:
                k.get_async(use_cache=False)

        populate_cache(keys)
        stats = FirstAidUserStats.new_user_stats(student)
        ndb.put_multi_async(stats)
Example #4
0
    def get(self):
        """Return the list of topic.

        """
        self.response.cache_control = 'public'
        self.response.cache_control.max_age = 300
        self.render_json({
            "type":
            "topics",
            "topics": [t.summary() for t in FirstAidUserStats.get_topics()]
        })
Example #5
0
def student_handler(student):
    count = 0
    # FirstAidUserStats.new_user_stats yield all the user topic stats
    # created / update and yield the user stats at the end.
    for entity in FirstAidUserStats.new_user_stats(student):
        yield op.db.Put(entity)
        count += 1

    yield op.counters.Increment('User stats updated', 1)
    if count > 1:
        yield op.counters.Increment('User topic stats updated', count - 1)
Example #6
0
def student_handler(student):
    count = 0
    # FirstAidUserStats.new_user_stats yield all the user topic stats
    # created / update and yield the user stats at the end.
    for entity in FirstAidUserStats.new_user_stats(student):
        yield op.db.Put(entity)
        count += 1

    yield op.counters.Increment('User stats updated', 1)
    if count > 1:
        yield op.counters.Increment('User topic stats updated', count - 1)
Example #7
0
    def get(self):
        """List student stats.

        """
        self.staff_required()
        cursor_key = self.request.GET.get('cursor')
        topic_id = self.request.GET.get('topic')
        sort_by = self.request.GET.get('sortBy')

        if topic_id == 'all':
            topic_id = None

        sort_by_options = {
            'performance': 'performance',
            'questionTaken': 'question_taken'
        }
        sort_by = sort_by_options.get(sort_by, 'performance')

        try:
            limit = int(self.request.GET.get('limit'))
        except (
                ValueError,
                TypeError,
        ):
            limit = None

        try:
            residents = self.request.GET.get('residents')
            if residents == 'all':
                residents = None
            else:
                residents = int(residents)
        except (
                ValueError,
                TypeError,
        ):
            residents = None

        stats, cursor = FirstAidUserStats.get_stats(cursor_key=cursor_key,
                                                    limit=limit,
                                                    year=residents,
                                                    topic_id=topic_id,
                                                    sort_by=sort_by)
        self.render_json({
            'stats': [s.summary() for s in stats],
            'cursor': cursor if cursor else ''
        })
Example #8
0
    def get(self):
        """List student stats.

        """
        self.staff_required()
        cursor_key = self.request.GET.get('cursor')
        topic_id = self.request.GET.get('topic')
        sort_by = self.request.GET.get('sortBy')

        if topic_id == 'all':
            topic_id = None

        sort_by_options = {
            'performance': 'performance',
            'questionTaken': 'question_taken'
        }
        sort_by = sort_by_options.get(sort_by, 'performance')

        try:
            limit = int(self.request.GET.get('limit'))
        except (ValueError, TypeError,):
            limit = None

        try:
            residents = self.request.GET.get('residents')
            if residents == 'all':
                residents = None
            else:
                residents = int(residents)
        except (ValueError, TypeError,):
            residents = None

        stats, cursor = FirstAidUserStats.get_stats(
            cursor_key=cursor_key,
            limit=limit,
            year=residents,
            topic_id=topic_id,
            sort_by=sort_by
        )
        self.render_json({
            'stats': [s.summary() for s in stats],
            'cursor': cursor if cursor else ''
        })
Example #9
0
    def get(self, studentId):
        """Get the detailed stats for a student.

        """
        student_id = studentId.upper()
        current_user = self.login_required()
        if current_user.student_id != student_id:
            self.staff_required()

        stats = FirstAidUserStats.get_by_id(student_id)
        if stats is None:
            self.abort(404)
        details = stats.details()
        today = datetime.date.today()

        details['history'] = [{
            'predictiveSum':
            0,
            'date': (today - datetime.timedelta(days=i)).isoformat()
        } for i in reversed(range(183))]
        self.render_json(details)
Example #10
0
    def get(self, studentId):
        """Get the detailed stats for a student.

        """
        student_id = studentId.upper()
        current_user = self.login_required()
        if current_user.student_id != student_id:
            self.staff_required()

        stats = FirstAidUserStats.get_by_id(student_id)
        if stats is None:
            self.abort(404)
        details = stats.details()
        today = datetime.date.today()

        details['history'] = [
            {
                'predictiveSum': 0,
                'date': (today - datetime.timedelta(days=i)).isoformat()
            } for i in reversed(range(183))
        ]
        self.render_json(details)
Example #11
0
    def test_create(self):
        sess1 = self.session(datetime.date(2014, 9, 7), 1, 'A0001', '13')
        sess2 = self.session(datetime.date(2014, 9, 2), 1, 'A0001', '13')
        sess3 = self.session(datetime.date(2014, 9, 2), 1, 'A0001', '14')
        for s in (sess1, sess2, sess3,):
            FirstAidActivity.from_data(s).key.get(use_cache=False)

        stats = list(FirstAidUserStats.new_user_stats(self.student))
        self.assertEqual(3, len(stats))
        topic_stats = {s.topic_id: s for s in stats[:-1]}

        self.assertIn('13', topic_stats)
        self.assertEqual(6, topic_stats['13'].question_taken)
        self.assertEqual(33, topic_stats['13'].performance)

        self.assertIn('14', topic_stats)
        self.assertEqual(3, topic_stats['14'].question_taken)
        self.assertEqual(33, topic_stats['14'].performance)

        user_stats = stats[-1]
        self.assertEqual(9, user_stats.question_taken)
        self.assertEqual(33, user_stats.performance)

        ndb.put_multi(stats)
Example #12
0
 def __init__(self, *args, **kw):
     super(FakeStudents, self).__init__(*args, **kw)
     self.rosh_review_topics = RoshReviewUserStats.get_topics()
     self.firstaid_topics = FirstAidUserStats.get_topics().map(
         lambda k: k.id(), keys_only=True
     )