devilry.utils.groups_groupedby_relatedstudent_and_assignment
¶
Provides an easy-to-use API for generating overviews over the results of all students in a period. Collects students that are not related as well as related.
Example¶
Create CSV with the grades of all students on the period, including those ignored because they are not related:
grouper = GroupsGroupedByRelatedStudentAndAssignment(myperiod)
header = ['USER','IGNORED']
for assignment in grouper.iter_assignments():
header.append(assignment.short_name)
print ';'.join(header)
def print_aggregated_relstudentinfo(aggregated_relstudentinfo, ignored):
user = aggregated_relstudentinfo.user
row = [user.username, ignored]
for grouplist in aggregated_relstudentinfo.iter_groups_by_assignment():
# NOTE: There can be more than one group if the same student is in more than one
# group on an assignment - we select the "best" feedback.
feedback = grouplist.get_feedback_with_most_points()
if feedback:
row.append(feedback.grade)
else:
row.append('NO-FEEDBACK')
print ';'.join(row)
# Print all related students
for aggregated_relstudentinfo in grouper.iter_relatedstudents_with_results():
print_aggregated_relstudentinfo(aggregated_relstudentinfo, 'NO')
# Last we print the ignored students (non-related students that are in a group)
for aggregated_relstudentinfo in grouper.iter_students_with_feedback_that_is_candidate_but_not_in_related():
print_aggregated_relstudentinfo(aggregated_relstudentinfo, 'YES')
API¶
-
class
devilry.utils.groups_groupedby_relatedstudent_and_assignment.
GroupList
¶ Bases:
list
Represents a list of
devilry.apps.core.models.AssignmentGroup
objects, with utility functions for commonly needed actions. The list is ment to hold groups where the same student in candidate on a single assignment, and the utilities is ment to make it easier to work with the added complexity of supporting the same user in multiple groups on a single assignment.-
get_feedback_with_most_points
()¶ Get the
devilry.apps.core.models.StaticFeedback
with the most points in the list.
-
get_best_gradestring
()¶ Uses
get_feedback_with_most_points()
to get the feedback with most points, and returns thegrade
-attribute of that feedaback.Returns: The grade or None
.
-
-
class
devilry.utils.groups_groupedby_relatedstudent_and_assignment.
AggreatedRelatedStudentInfo
(user, assignments, relatedstudent=None)¶ Bases:
object
Used by
GroupsGroupedByRelatedStudentAndAssignment
to stores all results for a single student on a period.-
user
= None¶ The Django user object for the student.
-
assignments
= None¶ Dict of assignments where the key is the assignment-id, and the value is a
GroupList
.
-
relatedstudent
= None¶ The
devilry.apps.core.models.RelatedStudent
for users that are related students. This is only available for the objects returned byGroupsGroupedByRelatedStudentAndAssignment.iter_relatedstudents_with_results()
, and not for the objects returned by the ignored students iterators.
-
iter_groups_by_assignment
()¶ Returns an iterator over all
GroupList
objects for this student. Shortcut forself.assignments.itervalues()
.
-
add_group
(group)¶ Used by
GroupsGroupedByRelatedStudentAndAssignment
to add groups.
-
prettyprint
()¶ Prettyprint for debugging.
-
-
class
devilry.utils.groups_groupedby_relatedstudent_and_assignment.
GroupsGroupedByRelatedStudentAndAssignment
(period)¶ Bases:
object
Provides an easy-to-use API for overviews over the results of all students in a period.
Parameters: period – A devilry.apps.core.models.Period
object.-
get_assignment_queryset
()¶ Get the queryset used to fetch all assignments on the period. Override for custom ordering or if you need to optimize the query for your usecase (
select_related
,prefetch_related
, etc.)
-
get_relatedstudents_queryset
()¶ Get the queryset used to fetch all relatedstudents on the period. Override if you need to optimize the query for your usecase (
select_related
,prefetch_related
, etc.)
-
get_groups_queryset
()¶ Get the queryset used to fetch all groups on the period. Override if you need to optimize the query for your usecase (
select_related
,prefetch_related
, etc.)
-
iter_assignments
()¶ Iterate over all the assignments, yielding Assignment-objects. The objects are iterated in the order returned by
get_assignment_queryset()
.
-
iter_relatedstudents_with_results
()¶ Iterate over all relatedstudents, yielding a dict with the following attributes for each related student:
- user
- The Django user-object for the student.
- assignments
- An OrderedDict, ordered the same as
iter_assignments()
, where the key is the assignment-id, and the value is a list of AssignmentGroup-objects where the user is candidate. The list may have 0 or more groups, 0 if the user is not in any group on the assignment, and more than 1 if the user is in more than one group on the assignment.
-
iter_students_that_is_candidate_but_not_in_related
()¶ Iterate over the students that is candidate on one or more groups, but not registered as related students.
This iterator includes everything yielded by both:
-
iter_students_with_feedback_that_is_candidate_but_not_in_related
()¶ Same as
iter_students_that_is_candidate_but_not_in_related()
, but it does not include the students that have no feedback.
-
iter_students_with_no_feedback_that_is_candidate_but_not_in_related
()¶ Iterate over everything returned by
iter_students_that_is_candidate_but_not_in_related()
except for the students returned byiter_students_with_feedback_that_is_candidate_but_not_in_related()
-
serialize
()¶ Serialize all the collected data as plain python objects.
-