def index(level, step): session_id() # Run this for the side effect of generating a session ID g.level = level = int(level) g.lang = requested_lang() g.prefix = '/hedy' # If step is a string that has more than two characters, it must be an id of a program if step and type_check(step, 'str') and len(step) > 2: result = db_get('programs', {'id': step}) if not result: return 'No such program', 404 # Allow only the owner of the program, the admin user and the teacher users to access the program user = current_user(request) if user['username'] != result['username'] and not is_admin( request) and not is_teacher(request): return 'No such program!', 404 loaded_program = result['code'] # We default to step 1 to provide a meaningful default assignment step = 1 else: loaded_program = None return hedyweb.render_assignment_editor(request=request, course=HEDY_COURSE[g.lang], level_number=level, assignment_number=step, menu=render_main_menu('hedy'), translations=TRANSLATIONS, version=version(), loaded_program=loaded_program)
def adventure_page(adventure_name, level): user = current_user(request) level = int(level) adventures = load_adventure_for_language(requested_lang()) # If requested adventure does not exist, return 404 if not adventure_name in adventures['adventures']: return 'No such Hedy adventure!', 404 adventure = adventures['adventures'][adventure_name] # If no level is specified (this will happen if the last element of the path (minus the query parameter) is the same as the adventure_name) if re.sub(r'\?.+', '', request.url.split('/')[len(request.url.split('/')) - 1]) == adventure_name: # If user is logged in, check if they have a program for this adventure # If there are many, note the highest level for which there is a saved program desired_level = 0 if user['username']: existing_programs = DATABASE.programs_for_user(user['username']) for program in existing_programs: if 'adventure_name' in program and program[ 'adventure_name'] == adventure_name and program[ 'level'] > desired_level: desired_level = program['level'] # If the user has a saved program for this adventure, redirect them to the level with the highest adventure if desired_level != 0: return redirect(request.url.replace( '/' + adventure_name, '/' + adventure_name + '/' + str(desired_level)), code=302) # If user is not logged in, or has no saved programs for this adventure, default to the lowest level available for the adventure if desired_level == 0: for key in adventure['levels'].keys(): if isinstance(key, int) and (desired_level == 0 or desired_level > key): desired_level = key level = desired_level # If requested level is not in adventure, return 404 if not level in adventure['levels']: abort(404) adventure_assignments = load_adventure_assignments_per_level( requested_lang(), level) g.prefix = '/hedy' return hedyweb.render_assignment_editor( request=request, course=HEDY_COURSE[requested_lang()], level_number=level, assignment_number=1, menu=render_main_menu('hedy'), translations=TRANSLATIONS, version=version(), adventure_assignments=adventure_assignments, # The relevant loaded program will be available to client-side js and it will be loaded by js. loaded_program='', adventure_name=adventure_name)
def index(level, step): # Sublevel requested if re.match ('\d+-\d+', level): pass # If level has a dash, we keep it as a string # Normal level requested elif re.match ('\d', level): try: g.level = level = int(level) except: return 'No such Hedy level!', 404 else: return 'No such Hedy level!', 404 g.lang = requested_lang() g.prefix = '/hedy' initialize_gfi_session(g.lang) loaded_program = '' loaded_program_name = '' adventure_name = '' # If step is a string that has more than two characters, it must be an id of a program if step and type_check (step, 'str') and len (step) > 2: result = db_get ('programs', {'id': step}) if not result: return 'No such program', 404 # If the program is not public, allow only the owner of the program, the admin user and the teacher users to access the program user = current_user (request) public_program = 'public' in result and result ['public'] if not public_program and user ['username'] != result ['username'] and not is_admin (request) and not is_teacher (request): return 'No such program!', 404 loaded_program = result ['code'] loaded_program_name = result ['name'] if 'adventure_name' in result: adventure_name = result ['adventure_name'] # We default to step 1 to provide a meaningful default assignment step = 1 adventure_assignments = load_adventure_assignments_per_level(g.lang, level) return hedyweb.render_assignment_editor( request=request, course=HEDY_COURSE[g.lang], level_number=level, assignment_number=step, menu=render_main_menu('hedy'), translations=TRANSLATIONS, version=version(), adventure_assignments=adventure_assignments, loaded_program=loaded_program, loaded_program_name=loaded_program_name, adventure_name=adventure_name)
def space_eu(level, step): session_id() # Run this for the side effect of generating a session ID g.level = level = int(level) g.lang = lang = requested_lang() g.prefix = '/space_eu' return hedyweb.render_assignment_editor(course=SPACE_EU_COURSE, level_number=level, assignment_number=step, translations=TRANSLATIONS, version=version(), menu=None)
def onlinemasters(level, step): session_id() # Run this for the side effect of generating a session ID g.level = level = int(level) g.lang = lang = requested_lang() g.prefix = '/onlinemasters' return hedyweb.render_assignment_editor(course=ONLINE_MASTERS_COURSE, level_number=level, assignment_number=step, translations=TRANSLATIONS, version=version(), menu=None)
def index(level, step): session_id() # Run this for the side effect of generating a session ID g.level = level = int(level) g.lang = lang = requested_lang() g.prefix = '/hedy' return hedyweb.render_assignment_editor(course=HEDY_COURSE[lang], level_number=level, assignment_number=step, menu=render_main_menu('hedy'), translations=TRANSLATIONS, version=version())
def space_eu(level, step): g.level = level = int(level) g.lang = requested_lang() g.prefix = '/space_eu' adventure_assignments = load_adventure_assignments_per_level(g.lang, level) return hedyweb.render_assignment_editor( request=request, course=SPACE_EU_COURSE[g.lang], level_number=level, assignment_number=step, translations=TRANSLATIONS, version=version(), menu=None, adventure_assignments=adventure_assignments, loaded_program='', adventure_name='')
def onlinemasters(level, step): g.level = level = int(level) g.lang = lang = requested_lang() g.prefix = '/onlinemasters' adventure_assignments = load_adventure_assignments_per_level(g.lang, level) return hedyweb.render_assignment_editor( request=request, course=ONLINE_MASTERS_COURSE, level_number=level, assignment_number=step, translations=TRANSLATIONS, version=version(), menu=None, adventure_assignments=adventure_assignments, loaded_program='', adventure_name='')