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)
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()] })
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)
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)
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 '' })
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 '' })
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)
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)
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)
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 )