Commit 987ef9dc by Nimisha Asthagiri

Prevent high mem usage in generate_course_overview.

parent 0205720d
......@@ -54,4 +54,4 @@ class Command(BaseCommand):
except InvalidKeyError:
raise CommandError('Invalid key specified.')
CourseOverview.get_select_courses(course_keys, force_update=options.get('force_update'))
CourseOverview.update_select_courses(course_keys, force_update=options.get('force_update'))
......@@ -487,9 +487,10 @@ class CourseOverview(TimeStampedModel):
return json.loads(self._pre_requisite_courses_json)
@classmethod
def get_select_courses(cls, course_keys, force_update=False):
def update_select_courses(cls, course_keys, force_update=False):
"""
Returns CourseOverview objects for the given course_keys.
A side-effecting method that updates CourseOverview objects for
the given course_keys.
Arguments:
course_keys (list[CourseKey]): Identifies for which courses to
......@@ -498,8 +499,6 @@ class CourseOverview(TimeStampedModel):
whether the requested CourseOverview objects should be
forcefully updated (i.e., re-synched with the modulestore).
"""
course_overviews = []
log.info('Generating course overview for %d courses.', len(course_keys))
log.debug('Generating course overview(s) for the following courses: %s', course_keys)
......@@ -507,7 +506,7 @@ class CourseOverview(TimeStampedModel):
for course_key in course_keys:
try:
course_overviews.append(action(course_key))
action(course_key)
except Exception as ex: # pylint: disable=broad-except
log.exception(
'An error occurred while generating course overview for %s: %s',
......@@ -517,8 +516,6 @@ class CourseOverview(TimeStampedModel):
log.info('Finished generating course overviews.')
return course_overviews
@classmethod
def get_all_courses(cls, orgs=None, filter_=None):
"""
......
......@@ -450,13 +450,14 @@ class CourseOverviewTestCase(ModuleStoreTestCase):
unmodified_overview = CourseOverview.get_from_id(course.id)
self.assertEqual(unmodified_overview.version, 11)
def test_get_select_courses(self):
def test_update_select_courses(self):
course_ids = [CourseFactory.create().id for __ in range(3)]
select_course_ids = course_ids[:len(course_ids) - 1] # all items except the last
self.assertEqual(
{course_overview.id for course_overview in CourseOverview.get_select_courses(select_course_ids)},
set(select_course_ids),
)
with mock.patch(
'openedx.core.djangoapps.content.course_overviews.models.CourseOverview.get_from_id'
) as mock_get_from_id:
CourseOverview.update_select_courses(select_course_ids)
self.assertEquals(mock_get_from_id.call_count, len(select_course_ids))
def test_get_all_courses(self):
course_ids = [CourseFactory.create(emit_signals=True).id for __ in range(3)]
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment