Commit 3a609903 by Renzo Lucioni

Clean up typeahead dedup

Result count shouldn't be hardcoded, deduplication is by course not by run, and there's no benefit to using a set if you're performing a membership check before adding a new element.
parent 9edbed04
...@@ -135,15 +135,18 @@ class TypeaheadSearchView(PartnerMixin, APIView): ...@@ -135,15 +135,18 @@ class TypeaheadSearchView(PartnerMixin, APIView):
) )
course_runs = course_runs.filter(published=True).exclude(hidden=True).filter(partner=partner.short_code) course_runs = course_runs.filter(published=True).exclude(hidden=True).filter(partner=partner.short_code)
# Get first three results after deduplicating by course run # Get first three results after deduplicating by course key.
course_runs_list, course_keys_set = [], set() seen_course_keys, course_run_list = [], []
for course_run in course_runs: for course_run in course_runs:
course_key = course_run.course_key course_key = course_run.course_key
if course_key in course_keys_set:
if course_key in seen_course_keys:
continue continue
course_keys_set.add(course_key) else:
course_runs_list.append(course_run) seen_course_keys.append(course_key)
if len(course_runs_list) == 3: course_run_list.append(course_run)
if len(course_run_list) == self.RESULT_COUNT:
break break
programs = sqs.models(Program).filter( programs = sqs.models(Program).filter(
...@@ -153,7 +156,7 @@ class TypeaheadSearchView(PartnerMixin, APIView): ...@@ -153,7 +156,7 @@ class TypeaheadSearchView(PartnerMixin, APIView):
programs = programs.filter(status=ProgramStatus.Active).filter(partner=partner.short_code) programs = programs.filter(status=ProgramStatus.Active).filter(partner=partner.short_code)
programs = programs[:self.RESULT_COUNT] programs = programs[:self.RESULT_COUNT]
return course_runs_list, programs return course_run_list, programs
def get(self, request, *args, **kwargs): def get(self, request, *args, **kwargs):
""" """
......
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