From 99960d7001f2378c2918e60a5a1f5b9de621fc68 Mon Sep 17 00:00:00 2001 From: Omar Al-Ithawi Date: Mon, 30 Dec 2019 10:28:21 +0300 Subject: [PATCH] Safer CourseOverview.org filed matching Regular expressions are harder to read and debug --- openedx/core/djangoapps/content/course_overviews/models.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/openedx/core/djangoapps/content/course_overviews/models.py b/openedx/core/djangoapps/content/course_overviews/models.py index f22b6c5b30..1d69d3600c 100644 --- a/openedx/core/djangoapps/content/course_overviews/models.py +++ b/openedx/core/djangoapps/content/course_overviews/models.py @@ -11,6 +11,7 @@ from ccx_keys.locator import CCXLocator from config_models.models import ConfigurationModel from django.conf import settings from django.db import models, transaction +from django.db.models import Q from django.db.models.fields import BooleanField, DateTimeField, DecimalField, FloatField, IntegerField, TextField from django.db.utils import IntegrityError from django.template import defaultfilters @@ -605,7 +606,10 @@ class CourseOverview(TimeStampedModel): # In rare cases, courses belonging to the same org may be accidentally assigned # an org code with a different casing (e.g., Harvardx as opposed to HarvardX). # Case-insensitive matching allows us to deal with this kind of dirty data. - course_overviews = course_overviews.filter(org__iregex=r'(^' + '$|^'.join(orgs) + '$)') + org_filter = Q() # Avoiding the `reduce()` for more readability, so a no-op filter starter is needed. + for org in orgs: + org_filter |= Q(org__iexact=org) + course_overviews = course_overviews.filter(org_filter) if filter_: course_overviews = course_overviews.filter(**filter_)