def __init__(self, courseid, content, task_factory, hook_manager): super(WebAppCourse, self).__init__(courseid, content, task_factory, hook_manager) if self._content.get('nofrontend', False): raise Exception( "That course is not allowed to be displayed directly in the webapp" ) try: self._admins = self._content.get('admins', []) self._tutors = self._content.get('tutors', []) self._accessible = AccessibleTime( self._content.get("accessible", None)) self._registration = AccessibleTime( self._content.get("registration", None)) self._registration_password = self._content.get( 'registration_password', None) self._registration_ac = self._content.get('registration_ac', None) if self._registration_ac not in [ None, "username", "realname", "email" ]: raise Exception( "Course has an invalid value for registration_ac: " + self.get_id()) self._registration_ac_list = self._content.get( 'registration_ac_list', []) self._groups_student_choice = self._content.get( "groups_student_choice", False) self._use_classrooms = self._content.get('use_classrooms', True) self._allow_unregister = self._content.get('allow_unregister', True) except: raise Exception("Course has an invalid description: " + self.get_id())
def __init__(self, course, taskid, content, directory_path, hook_manager, task_problem_types=None): super(WebAppTask, self).__init__(course, taskid, content, directory_path, hook_manager, task_problem_types) # Grade weight self._weight = float(self._data.get("weight", 1.0)) # _accessible self._accessible = AccessibleTime(self._data.get("accessible", None)) # Group task self._groups = bool(self._data.get("groups", False)) # Submission limits self._submission_limit = self._data.get("submission_limit", {"amount": -1, "period": -1})
def __init__(self, course, taskid, content, directory_path, task_problem_types=None): super(WebAppTask, self).__init__(course, taskid, content, directory_path, task_problem_types) # Grade weight self._weight = float(self._data.get("weight", 1.0)) # _accessible self._accessible = AccessibleTime(self._data.get("accessible", None)) # Order self._order = int(self._data.get('order', -1)) # Group task self._groups = bool(self._data.get("groups", False))
def POST_AUTH(self, courseid): # pylint: disable=arguments-differ """ POST request """ course, _ = self.get_course_and_check_rights(courseid, allow_all_staff=False) errors = [] course_content = {} try: data = web.input() course_content = self.course_factory.get_course_descriptor_content( courseid) course_content['name'] = data['name'] if course_content['name'] == "": errors.append('Invalid name') course_content['admins'] = list( map(str.strip, data['admins'].split(','))) if not self.user_manager.user_is_superadmin( ) and self.user_manager.session_username( ) not in course_content['admins']: errors.append( 'You cannot remove yourself from the administrators of this course' ) course_content['tutors'] = list( map(str.strip, data['tutors'].split(','))) if len(course_content['tutors'] ) == 1 and course_content['tutors'][0].strip() == "": course_content['tutors'] = [] course_content['groups_student_choice'] = True if data[ "groups_student_choice"] == "true" else False if course_content.get('use_classrooms', True) != (data['use_classrooms'] == "true"): self.database.aggregations.delete_many( {"courseid": course.get_id()}) course_content['use_classrooms'] = True if data[ "use_classrooms"] == "true" else False if data["accessible"] == "custom": course_content['accessible'] = "{}/{}".format( data["accessible_start"], data["accessible_end"]) elif data["accessible"] == "true": course_content['accessible'] = True else: course_content['accessible'] = False try: AccessibleTime(course_content['accessible']) except: errors.append('Invalid accessibility dates') course_content['allow_unregister'] = True if data[ "allow_unregister"] == "true" else False if data["registration"] == "custom": course_content['registration'] = "{}/{}".format( data["registration_start"], data["registration_end"]) elif data["registration"] == "true": course_content['registration'] = True else: course_content['registration'] = False try: AccessibleTime(course_content['registration']) except: errors.append('Invalid registration dates') course_content['registration_password'] = data[ 'registration_password'] if course_content['registration_password'] == "": course_content['registration_password'] = None course_content['registration_ac'] = data['registration_ac'] if course_content['registration_ac'] not in [ "None", "username", "realname", "email" ]: errors.append('Invalid ACL value') if course_content['registration_ac'] == "None": course_content['registration_ac'] = None course_content['registration_ac_list'] = data[ 'registration_ac_list'].split("\n") except: errors.append('User returned an invalid form.') if len(errors) == 0: self.course_factory.update_course_descriptor_content( courseid, course_content) errors = None course, _ = self.get_course_and_check_rights( courseid, allow_all_staff=False ) # don't forget to reload the modified course return self.page(course, errors, errors is None)
def task_accessibility(course, _, default): contest_data = get_contest_data(course) if contest_data['enabled']: return AccessibleTime(contest_data['start'] + '/') else: return default
def POST(self, courseid): """ POST request """ course, _ = self.get_course_and_check_rights(courseid, allow_all_staff=False) errors = [] course_content = {} try: data = web.input() course_content = self.course_factory.get_course_descriptor_content( courseid) course_content['name'] = data['name'] if course_content['name'] == "": errors.append('Invalid name') course_content['admins'] = data['admins'].split(',') if self.user_manager.session_username( ) not in course_content['admins']: errors.append( 'You cannot remove yourself from the administrators of this course' ) course_content['tutors'] = data['tutors'].split(',') if len(course_content['tutors'] ) == 1 and course_content['tutors'][0].strip() == "": course_content['tutors'] = [] if data["groups_student_choice"] == "true": course_content['groups_student_choice'] = True else: course_content['groups_student_choice'] = False if data["accessible"] == "custom": course_content['accessible'] = "{}/{}".format( data["accessible_start"], data["accessible_end"]) elif data["accessible"] == "true": course_content['accessible'] = True else: course_content['accessible'] = False try: AccessibleTime(course_content['accessible']) except: errors.append('Invalid accessibility dates') if data["registration"] == "custom": course_content['registration'] = "{}/{}".format( data["registration_start"], data["registration_end"]) elif data["registration"] == "true": course_content['registration'] = True else: course_content['registration'] = False try: AccessibleTime(course_content['registration']) except: errors.append('Invalid registration dates') course_content['registration_password'] = data[ 'registration_password'] if course_content['registration_password'] == "": course_content['registration_password'] = None course_content['registration_ac'] = data['registration_ac'] if course_content['registration_ac'] not in [ "None", "username", "realname", "email" ]: errors.append('Invalid ACL value') if course_content['registration_ac'] == "None": course_content['registration_ac'] = None course_content['registration_ac_list'] = data[ 'registration_ac_list'].split("\n") except: errors.append('User returned an invalid form.') if len(errors) == 0: self.course_factory.update_course_descriptor_content( courseid, course_content) errors = None course, _ = self.get_course_and_check_rights( courseid, allow_all_staff=False ) # don't forget to reload the modified course return self.page(course, errors, errors is None)
def task_accessibility(course, task, default): # pylint: disable=unused-argument contest_data = get_contest_data(course) if contest_data['enabled']: return AccessibleTime(contest_data['start'] + '/') else: return default