Improve the performance of access checking for a specific user in CourseViewList by prefetching data

This commit is contained in:
Calen Pennington
2019-03-08 12:34:59 -05:00
parent c532077f3a
commit a2a340bcd0
5 changed files with 54 additions and 22 deletions

View File

@@ -12,14 +12,24 @@ def is_in_holdback(user):
"""
in_holdback = False
if user and user.is_authenticated:
try:
holdback_value = ExperimentData.objects.get(
user=user,
experiment_id=EXPERIMENT_ID,
key=EXPERIMENT_DATA_HOLDBACK_KEY,
).value
in_holdback = holdback_value == 'True'
except ExperimentData.DoesNotExist:
pass
if 'experimentdata' in getattr(user, '_prefetched_objects_cache', {}):
for experiment_data in user.experimentdata_set.all():
if (
experiment_data.experiment_id == EXPERIMENT_ID and
experiment_data.key == EXPERIMENT_DATA_HOLDBACK_KEY
):
in_holdback = experiment_data.value == 'True'
break
else:
try:
holdback_value = ExperimentData.objects.get(
user=user,
experiment_id=EXPERIMENT_ID,
key=EXPERIMENT_DATA_HOLDBACK_KEY,
).value
except ExperimentData.DoesNotExist:
pass
else:
in_holdback = holdback_value == 'True'
return in_holdback