""" Course settings module. All settings in the global_settings are first applied, and then any settings in the settings.DATA_DIR/course_settings.json are applied. A setting must be in ALL_CAPS. Settings are used by calling from courseware.course_settings import course_settings Note that courseware.course_settings.course_settings is not a module -- it's an object. So importing individual settings is not possible: from courseware.course_settings.course_settings import GRADER # This won't work. """ import json import logging from django.conf import settings from xmodule import graders log = logging.getLogger("mitx.courseware") global_settings_json = """ { "GRADER" : [ { "type" : "Homework", "min_count" : 12, "drop_count" : 2, "short_label" : "HW", "weight" : 0.15 }, { "type" : "Lab", "min_count" : 12, "drop_count" : 2, "category" : "Labs", "weight" : 0.15 }, { "type" : "Midterm", "name" : "Midterm Exam", "short_label" : "Midterm", "weight" : 0.3 }, { "type" : "Final", "name" : "Final Exam", "short_label" : "Final", "weight" : 0.4 } ], "GRADE_CUTOFFS" : { "A" : 0.87, "B" : 0.7, "C" : 0.6 } } """ class Settings(object): def __init__(self): # Load the global settings as a dictionary global_settings = json.loads(global_settings_json) # Load the course settings as a dictionary course_settings = {} try: # TODO: this doesn't work with multicourse with open(settings.DATA_DIR + "/course_settings.json") as course_settings_file: course_settings_string = course_settings_file.read() course_settings = json.loads(course_settings_string) except IOError: log.warning("Unable to load course settings file from " + str(settings.DATA_DIR) + "/course_settings.json") # Override any global settings with the course settings global_settings.update(course_settings) # Now, set the properties from the course settings on ourselves for setting in global_settings: setting_value = global_settings[setting] setattr(self, setting, setting_value) # Here is where we should parse any configurations, so that we can fail early self.GRADER = graders.grader_from_conf(self.GRADER) course_settings = Settings()