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

This reverts commit d8cd6135a6.
This commit is contained in:
Calen Pennington
2019-03-18 15:24:40 -04:00
parent f11f388efe
commit 6059e21bff
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