@@ -121,6 +121,18 @@ def _score_one_parsons(row, points, autograde):
121121 return _score_from_pct_correct (pct_correct , points , autograde )
122122
123123
124+ def _score_one_microparsons (row , points , autograde ):
125+ # row is from microparsons_answers
126+ if autograde == "pct_correct" and "percent" in row and row .percent is not None :
127+ pct_correct = int (round (row .percent * 100 ))
128+ else :
129+ if row .correct :
130+ pct_correct = 100
131+ else :
132+ pct_correct = 0
133+ return _score_from_pct_correct (pct_correct , points , autograde )
134+
135+
124136def _score_one_fitb (row , points , autograde ):
125137 # row is from fitb_answers
126138 if autograde == "pct_correct" and "percent" in row and row .percent is not None :
@@ -329,6 +341,30 @@ def _scorable_parsons_answers(
329341 return db (query ).select (orderby = db .parsons_answers .timestamp )
330342
331343
344+ def _scorable_microparsons_answers (
345+ course_name ,
346+ sid ,
347+ question_name ,
348+ points ,
349+ deadline ,
350+ practice_start_time = None ,
351+ db = None ,
352+ now = None ,
353+ ):
354+ query = (
355+ (db .microparsons_answers .course_name == course_name )
356+ & (db .microparsons_answers .sid == sid )
357+ & (db .microparsons_answers .div_id == question_name )
358+ )
359+ if deadline :
360+ query = query & (db .microparsons_answers .timestamp < deadline )
361+ if practice_start_time :
362+ query = query & (db .microparsons_answers .timestamp >= practice_start_time )
363+ if now :
364+ query = query & (db .microparsons_answers .timestamp <= now )
365+ return db (query ).select (orderby = db .microparsons_answers .timestamp )
366+
367+
332368def _scorable_fitb_answers (
333369 course_name ,
334370 sid ,
@@ -708,6 +744,21 @@ def _autograde_one_q(
708744 scoring_fn = _score_one_webwork
709745 logger .debug ("AGDB - done with webwork" )
710746
747+ elif question_type == "hparsons" :
748+ logger .debug ("grading a microparsons!!" )
749+ results = _scorable_microparsons_answers (
750+ course_name ,
751+ sid ,
752+ question_name ,
753+ points ,
754+ deadline ,
755+ practice_start_time ,
756+ db = db ,
757+ now = now ,
758+ )
759+ scoring_fn = _score_one_microparsons
760+ logger .debug ("AGDB - done with microparsons" )
761+
711762 elif question_type == "codelens" :
712763 if (
713764 autograde == "interact"
0 commit comments