multicourse_settings.py 3.62 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
# multicourse/multicourse_settings.py
#
# central module for providing fixed settings (course name, number, title)
# for multiple courses.  Loads this information from django.conf.settings
#
# Allows backward compatibility with settings configurations without
# multiple courses specified.
#
# The central piece of configuration data is the dict COURSE_SETTINGS, with
# keys being the COURSE_NAME (spaces ok), and the value being a dict of
# parameter,value pairs. The required parameters are:
#
# - number  : course number (used in the simplewiki pages)
# - title   : humanized descriptive course title
#
# Optional parameters:
#
# - xmlpath : path (relative to data directory) for this course (defaults to "")
#
# If COURSE_SETTINGS does not exist, then fallback to 6.002_Spring_2012 default,
# for now.

from django.conf import settings

#-----------------------------------------------------------------------------
# load course settings

28
if hasattr(settings, 'COURSE_SETTINGS'):    	# in the future, this could be replaced by reading an XML file
29 30
    COURSE_SETTINGS = settings.COURSE_SETTINGS

31
elif hasattr(settings, 'COURSE_NAME'):		# backward compatibility
32
    COURSE_SETTINGS = {settings.COURSE_NAME: {'number': settings.COURSE_NUMBER,
33
                                              'title': settings.COURSE_TITLE,
34
                                              'location': settings.COURSE_LOCATION,
35 36 37 38
                                              },
                       }
else:						# default to 6.002_Spring_2012
    COURSE_SETTINGS = {'6.002_Spring_2012': {'number': '6.002x',
39
                                              'title': 'Circuits and Electronics',
40
                                              'location': 'i4x://edx/6002xs12/course/6.002 Spring 2012',
41 42 43 44 45 46
                                              },
                       }

#-----------------------------------------------------------------------------
# wrapper functions around course settings

47

48
def get_coursename_from_request(request):
49 50 51
    if 'coursename' in request.session:
        coursename = request.session['coursename']
        settings.COURSE_TITLE = get_course_title(coursename) 	# overwrite settings.COURSE_TITLE based on this
52 53 54
    else: coursename = None
    return coursename

55

56 57
def get_course_settings(coursename):
    if not coursename:
58
        if hasattr(settings, 'COURSE_DEFAULT'):
59 60 61
            coursename = settings.COURSE_DEFAULT
        else:
            coursename = '6.002_Spring_2012'
62 63 64 65 66
    if coursename in COURSE_SETTINGS:
        return COURSE_SETTINGS[coursename]
    coursename = coursename.replace(' ', '_')
    if coursename in COURSE_SETTINGS:
        return COURSE_SETTINGS[coursename]
67 68
    return None

69

70
def is_valid_course(coursename):
71
    return get_course_settings(coursename) != None
72

73 74

def get_course_property(coursename, property):
75
    cs = get_course_settings(coursename)
76 77 78 79 80 81 82 83 84 85 86

    # raise exception instead?
    if not cs:
        return ''

    if property in cs:
        return cs[property]

    # default
    return ''

87 88

def get_course_xmlpath(coursename):
89 90
    return get_course_property(coursename, 'xmlpath')

91 92

def get_course_title(coursename):
93 94
    return get_course_property(coursename, 'title')

95 96

def get_course_number(coursename):
97 98
    return get_course_property(coursename, 'number')

99

100
def get_course_github_url(coursename):
101 102
    return get_course_property(coursename, 'github_url')

103

104
def get_course_default_chapter(coursename):
105 106
    return get_course_property(coursename, 'default_chapter')

107 108

def get_course_default_section(coursename):
109 110 111
    return get_course_property(coursename, 'default_section')


112 113
def get_course_location(coursename):
    return get_course_property(coursename, 'location')