@@ -150,23 +150,17 @@ def normalize_search_query(q: str) -> str:
150150 )
151151 # expose mnemonic to view
152152 .annotate (mnemonic = F ("subdepartment__mnemonic" ))
153- .filter (max_similarity__gte = similarity_threshold )
154- # filters out classes with 3 digit class numbers (old naming system)
155- .filter (Q (number__isnull = True ) | Q (number__regex = r"^\d{4}$" ))
156- # filters out classes that haven't been taught since Fall 2020
157- .exclude (semester_last_taught_id__lt = 48 )
158- .order_by ("-max_similarity" )
159153 )
160154
161155 # Apply filters
162- if filters .get ("disciplines" ):
163- results = results .filter (disciplines__name__in = filters .get ("disciplines" ))
156+ results = apply_filters (results , filters )
164157
165- if filters .get ("subdepartments" ):
166- results = results .filter (subdepartment__mnemonic__in = filters .get ("subdepartments" ))
158+ results = (results .filter (max_similarity__gte = similarity_threshold )
159+ .filter (Q (number__isnull = True ) | Q (number__regex = r"^\d{4}$" ))
160+ .exclude (semester_last_taught_id__lt = 48 )
161+ .order_by ("-max_similarity" ))
167162
168- if filters .get ("instructors" ):
169- results = results .filter (section__instructors__id__in = filters .get ("instructors" ))
163+ results = results .distinct ().order_by ("subdepartment__mnemonic" , "number" )
170164
171165 courses = [
172166 {
@@ -197,23 +191,7 @@ def filter_courses(filters):
197191 )
198192
199193 # Apply filters
200- if filters .get ("disciplines" ):
201- results = results .filter (disciplines__name__in = filters .get ("disciplines" ))
202-
203- if filters .get ("subdepartments" ):
204- results = results .filter (subdepartment__mnemonic__in = filters .get ("subdepartments" ))
205-
206- if filters .get ("instructors" ):
207- results = results .filter (section__instructors__id__in = filters .get ("instructors" ))
208-
209- # Apply time filters
210- weekdays = [day for day in filters .get ("weekdays" , []) if day ]
211- from_time = filters .get ("from_time" )
212- to_time = filters .get ("to_time" )
213-
214- if any ([weekdays , from_time , to_time ]):
215- time_filtered = Course .filter_by_time (days = weekdays , start_time = from_time , end_time = to_time )
216- results = results .filter (id__in = time_filtered .values_list ("id" , flat = True ))
194+ results = apply_filters (results , filters )
217195
218196 results = results .distinct ().order_by ("subdepartment__mnemonic" , "number" )
219197
@@ -231,3 +209,24 @@ def filter_courses(filters):
231209 ]
232210
233211 return courses
212+
213+ def apply_filters (results , filters ):
214+ """Apply filters to course queryset."""
215+ if filters .get ("disciplines" ):
216+ results = results .filter (disciplines__name__in = filters .get ("disciplines" ))
217+
218+ if filters .get ("subdepartments" ):
219+ results = results .filter (subdepartment__mnemonic__in = filters .get ("subdepartments" ))
220+
221+ if filters .get ("instructors" ):
222+ results = results .filter (section__instructors__id__in = filters .get ("instructors" ))
223+
224+ weekdays = [day for day in filters .get ("weekdays" , []) if day ]
225+ from_time = filters .get ("from_time" )
226+ to_time = filters .get ("to_time" )
227+
228+ if any ([weekdays , from_time , to_time ]):
229+ time_filtered = Course .filter_by_time (days = weekdays , start_time = from_time , end_time = to_time )
230+ results = results .filter (id__in = time_filtered .values_list ("id" , flat = True ))
231+
232+ return results
0 commit comments