From d91008b73a14e5b1599a2bc965e39d75d1785138 Mon Sep 17 00:00:00 2001 From: Victor Shnayder Date: Fri, 15 Mar 2013 19:36:14 -0700 Subject: [PATCH] Prevent random.Random() from running at import time. --- common/djangoapps/course_groups/cohorts.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/common/djangoapps/course_groups/cohorts.py b/common/djangoapps/course_groups/cohorts.py index ded20e1613..7924012bfe 100644 --- a/common/djangoapps/course_groups/cohorts.py +++ b/common/djangoapps/course_groups/cohorts.py @@ -18,8 +18,20 @@ log = logging.getLogger(__name__) # tl;dr: global state is bad. capa reseeds random every time a problem is loaded. Even # if and when that's fixed, it's a good idea to have a local generator to avoid any other # code that messes with the global random module. -local_random = random.Random() +_local_random = None +def local_random(): + """ + Get the local random number generator. In a function so that we don't run + random.Random() at import time. + """ + # ironic, isn't it? + global _local_random + + if _local_random is None: + _local_random = random.Random() + + return _local_random def is_course_cohorted(course_id): """ @@ -135,7 +147,7 @@ def get_cohort(user, course_id): return None # Put user in a random group, creating it if needed - group_name = local_random.choice(choices) + group_name = local_random().choice(choices) group, created = CourseUserGroup.objects.get_or_create( course_id=course_id,