|
13 | 13 | # Logic
|
14 | 14 |
|
15 | 15 | ```
|
16 |
| -for each learner+course |
| 16 | +
|
| 17 | +for each learner+course # See bulk_calculate_course_progress_data |
17 | 18 | get newest lgcm record
|
18 | 19 | get newest sm record
|
19 | 20 |
|
| 21 | + # Check if update needed, see _enrollment_metrics_needs_update |
20 | 22 | if not lcgm and not sm
|
21 | 23 | # Learner has not started course
|
22 | 24 | skip collection for this learner+course
|
23 | 25 | else if lcgm and sm
|
24 | 26 | # we have saved history so we can check to update
|
25 |
| - if lcgm.modified is older than sm.modified: |
26 |
| - collect new course data |
| 27 | + if lcgm.modified is older than sm.modified |
| 28 | + collect new course data # See _collect_progress_data |
27 | 29 | return new metrics object created
|
28 | 30 |
|
29 | 31 | else if not lcgm and sm
|
30 | 32 | # Learner started course after last collection action
|
31 |
| - collect new course data |
| 33 | + collect new course data # See _collect_progress_data |
32 | 34 | return new metrics object created
|
33 | 35 |
|
34 | 36 | else # lcgm and not sm
|
|
39 | 41 | return None
|
40 | 42 | ```
|
41 | 43 |
|
42 |
| -# NOTE: Change 'lcgm' in this file to either 'enrollment' or 'lp' when an |
43 |
| - abbreviation is acceptible. This is to get this module forward ready for |
44 |
| - reworking `LearnerCourseGradeMetrics` |
45 |
| -
|
| 44 | +# NOTE: We plan to change 'lcgm' in this file to either 'enrollment' or 'LP' |
| 45 | + (for Learner Progress) when an abbreviation is acceptible. This is to get |
| 46 | + this module forward ready for reworking `LearnerCourseGradeMetrics` |
46 | 47 | """
|
47 | 48 |
|
48 | 49 | from datetime import datetime
|
@@ -148,12 +149,19 @@ def collect_metrics_for_enrollment(course_enrollment, date_for=None, **_kwargs):
|
148 | 149 | raise UnlinkedCourseError('No site found for course "{}"'.format(
|
149 | 150 | course_enrollment.course_id))
|
150 | 151 |
|
151 |
| - most_recent_sm = student_modules_for_course_enrollment( |
152 |
| - course_enrollment).order_by('modified').last() |
| 152 | + # The following are two different ways to avoide the dreaded error |
| 153 | + # "Instance of 'list' has no 'order_by' member (no-member)" |
| 154 | + # See: https://github.com/PyCQA/pylint-django/issues/165 |
| 155 | + student_modules = student_modules_for_course_enrollment(ce=course_enrollment) |
| 156 | + if student_modules: |
| 157 | + most_recent_sm = student_modules.latest('modified') |
| 158 | + else: |
| 159 | + most_recent_sm = None |
153 | 160 |
|
154 |
| - most_recent_lcgm = LearnerCourseGradeMetrics.objects.filter( |
| 161 | + lcgm = LearnerCourseGradeMetrics.objects.filter( |
155 | 162 | user=course_enrollment.user,
|
156 |
| - course_id=str(course_enrollment.course_id)).order_by('date_for').last() |
| 163 | + course_id=str(course_enrollment.course_id)) |
| 164 | + most_recent_lcgm = lcgm.order_by('date_for').last() # pylint: disable=E1101 |
157 | 165 |
|
158 | 166 | if _enrollment_metrics_needs_update(most_recent_lcgm, most_recent_sm):
|
159 | 167 | progress_data = _collect_progress_data(most_recent_sm)
|
|
0 commit comments