def value(self, mrk): if not (CourseDB.get_mark(self.__course_id, self.__task_number, self.__user_id)["date"]): CourseDB.set_mark(self.__course_id, self.__task_number, self.__user_id, 'date', date.today()) CourseDB.set_mark(self.__course_id, self.__task_number, self.__user_id, 'mark', mrk)
def set_attendance(course_id, excel_file): book = None try: book = openpyxl.load_workbook(excel_file) except: raise ExtensionException(excel_file) sheet = book.active p_file = get_attendance(course_id) p_book = openpyxl.load_workbook(p_file) h_p_sheet = p_book['Hidden'] p_sheet = p_book.active course = CourseDB.get_course(course_id) cw_count = len(course['cw_numbers']) u_count = len(course['participants']) for i in range(4, 4 + u_count): for j in range(2, 2 + cw_count): if str(sheet.cell(i, j).value) != '0' or str( sheet.cell(i, j).value) != '1': p_book.close() book.close() raise CellValueException( i, j, '{0} must be replaced with 0 or 1.'.format( sheet.cell(i, j).value)) if str(sheet.cell(i, j).value) != str(p_sheet.cell(i, j).value): u_id = h_p_sheet.cell(i, 1).value cw_id = h_p_sheet.cell(3, j).value CourseDB.set_attendance(course_id, cw_id, u_id, 'value', str(sheet.cell(i, j).value)) p_book.close() book.close()
def __init__(self, course_id, task_number, user_id): self.__course_id = course_id self.__task_number = task_number self.__user_id = user_id if not (CourseDB.get_mark(self.__course_id, self.__task_number, self.__user_id)): CourseDB.create_mark(self.__course_id, self.__task_number, self.__user_id, None, None)
def __init__(self, course_id, cw_number, user_id): self.__course_id = course_id self.__cw_number = cw_number self.__user_id = user_id if not (CourseDB.get_attendance(self.__course_id, self.__cw_number, self.__user_id)): CourseDB.create_attendance(self.__course_id, self.__cw_number, self.__user_id, False)
def mailing(self, email, password, text): participants = [ User.User(user_id) for user_id in CourseDB.get_course( self.__course_id)["participants"] ] recipients = [participant.email for participant in participants] Mail(email, password).send(recipients, text)
def __init__(self, course_id=None, owner_id=None, name=""): # Checking if constructor parameters was used correctry if not((course_id and not(owner_id or name)) or (not course_id and owner_id and name)): raise InterrelatedParametersError(("course_id"), ("owner_id", "name")) if course_id: self.__course_id = course_id else: self.__course_id = CourseDB.create_course(owner_id, name)
def get_marks(course_id): file_name = 'ExcelData/Marks_{0}.xlsx'.format(course_id) book = xlsxwriter.Workbook(file_name) sheet = book.add_worksheet('Успеваемость') h_sheet = book.add_worksheet('Hidden') h_sheet.hide() course = CourseDB.get_course(course_id) centered_format = book.add_format({ 'align': 'center', 'valign': 'vcenter', 'border': 1 }) users = list([UserDB.get_user(u_id) for u_id in course['participants']]) sheet.merge_range(0, 0, 1, 0, 'Студенты', centered_format) sheet.set_column(0, 0, len(max([user['name'] for user in users])) + 4) task_count = len(course['task_numbers']) sheet.merge_range(0, 1, 1, 1 + task_count, 'Задачи', centered_format) sheet.write(2, 1, 'Название') sheet.write(3, 1, 'Макс. балл') sheet.write(4, 1, 'Дедлайн') for i, task in enumerate([ CourseDB.get_task(course_id, t_id) for t_id in course['task_numbers'] ]): sheet.write(2, 2 + i, task['name']) h_sheet.write(2, 2 + i, task['task_id']) sheet.write(3, 2 + i, task['highest_mark']) sheet.write(4, 2 + i, task['deadline']) for i, user in enumerate(users): sheet.write(i + 5, 0, str(i + 1) + '. ' + user['name']) h_sheet.write(i + 5, 0, user['u_id']) for j, mark in enumerate([ CourseDB.get_mark(course_id, t_id, user['u_id']) for t_id in course['task_numbers'] ]): sheet.write(i + 5, j + 2, mark['mark']) book.close() return file_name
def __init__(self, course_id, number=None, name="", description="", highest_mark=None): # Checking if constructor parameters was used correctry if not((number and not(name or description or highest_mark)) or (not number and name and description and highest_mark)): raise InterrelatedParametersError(("course_id", "number"), ("course_id", "name", "description", "highest_mark")) self.__course_id = course_id if number: self.__task_number = number else: self.__task_number = CourseDB.create_task(self.__course_id, name, description, highest_mark, None)
def __init__(self, course_id, number=None, name="", description="", file_id=None, url=""): # Checking if constructor parameters was used correctry if not((number and not(name or description or file_id or url)) or (not number and name)): raise InterrelatedParametersError(("course_id", "number"), ("course_id", "name", "optional: description", "optional: file_id", "optional: url")) self.__course_id = course_id if number: self.__lit_number = number else: self.__lit_number = CourseDB.create_literature(self.__course_id, name, description, file_id, url)
def __init__(self, course_id, number=None, name="", date=None): # Checking if constructor parameters was used correctry if not((number and not(name or date)) or (not number and name)): raise InterrelatedParametersError(("course_id", "number"), ("course_id", "name", "optional: date")) self.__course_id = course_id if number: self.__cw_number = number else: self.__cw_number = CourseDB.create_classwork(self.__course_id, name, date)
def set_marks(course_id, excel_file): book = None try: book = openpyxl.load_workbook(excel_file) except: raise ExtensionException(excel_file) sheet = book.active p_file = get_marks(course_id) p_book = openpyxl.load_workbook(p_file) h_p_sheet = p_book['Hidden'] p_sheet = p_book.active course = CourseDB.get_course(course_id) t_count = len(course['task_numbers']) u_count = len(course['participants']) for i in range(6, 6 + u_count): for j in range(3, 3 + t_count): int_cell = None try: int_cell = int(sheet.cell(i, j).value) except: p_book.close() book.close() raise CellValueException( i, j, '{0} must be an integer.'.format(sheet.cell(i, j).value)) highest_mark = int(p_sheet.cell(4, j)) if 0 <= int_cell <= highest_mark: u_id = h_p_sheet.cell(i, 1).value t_id = h_p_sheet.cell(3, j).value CourseDB.set_mark(course_id, t_id, u_id, 'value', str(int_cell)) else: p_book.close() book.close() raise CellValueException( i, j, '{0} must be greater than 0 and less than {1}.'.format( int_cell, highest_mark)) p_book.close() book.close()
def get_attendance(course_id): file_name = 'ExcelData/Attendance_{0}.xlsx'.format(course_id) book = xlsxwriter.Workbook(file_name) sheet = book.add_worksheet('Посещаемость') h_sheet = book.add_worksheet('Hidden') h_sheet.hide() course = CourseDB.get_course(course_id) centered_format = book.add_format({ 'align': 'center', 'valign': 'vcenter', 'border': 1 }) users = list([UserDB.get_user(u_id) for u_id in course['participants']]) sheet.merge_range(0, 0, 1, 0, 'Студенты', centered_format) sheet.set_column(0, 0, len(max([user['name'] for user in users])) + 4) cw_count = len(course['cw_numbers']) sheet.merge_range(0, 1, 1, cw_count, 'Посещаемость', centered_format) for i, class_work in enumerate([ CourseDB.get_classwork(course_id, c_id) for c_id in course['cw_numbers'] ]): sheet.write(2, i + 1, class_work['date']) h_sheet.write(2, i + 1, class_work['classwork_id']) for i, user in enumerate(users): sheet.write(i + 3, 0, str(i + 1) + '. ' + user['name']) h_sheet.write(i + 3, 0, user['u_id']) for j, attendance in enumerate([ CourseDB.get_attendance(course_id, c_id, user['u_id']) for c_id in course['cw_numbers'] ]): sheet.write(i + 3, j + 1, attendance['value']) book.close() return file_name
def file_id(self, file_id): CourseDB.set_literature(self.__course_id, self.__lit_number, 'file_id', file_id)
def file_id(self): return CourseDB.get_literature(self.__course_id, self.__lit_number)["file_id"]
def description(self, description): CourseDB.set_literature(self.__course_id, self.__lit_number, 'description', description)
def description(self): return CourseDB.get_literature(self.__course_id, self.__lit_number)["description"]
def name(self, name): CourseDB.set_literature(self.__course_id, self.__lit_number, 'name', name)
def literatures(self): return tuple( Literature(self.__course_id, lit_number) for lit_number in CourseDB.get_course(self.__course_id)["lit_numbers"])
def delete(self): CourseDB.delete_literature(self.__course_id, self.__lit_number) del self.__course_id, self.__lit_number
def delete(self): CourseDB.delete_course(self.__course_id) del self.__course_id
def remove_from_blacklist(self, user_id): CourseDB.remove_from_blacklist(self.__course_id, user_id)
def tasks(self): return tuple( Task(self.__course_id, task_number) for task_number in CourseDB.get_course(self.__course_id)["task_numbers"])
def remove_student(self, user_id): CourseDB.remove_user_course(user_id, self.__course_id)
def append_student(self, user_id): CourseDB.append_user_course(user_id, self.__course_id)
def url(self): return CourseDB.get_literature(self.__course_id, self.__lit_number)["url"]
def fetch_all_courses(): return tuple( Course(course_id) for course_id in CourseDB.fetch_all_courses())
def url(self, url): self.__url = url CourseDB.set_literature(self.__course_id, self.__lit_number, 'url', url)
def name(self): return CourseDB.get_literature(self.__course_id, self.__lit_number)["name"]
def append_to_blacklist(self, user_id): CourseDB.append_to_blacklist(self.__course_id, user_id) CourseDB.remove_user_course(user_id, self.__course_id)
def classworks(self): return tuple( Classwork(self.__course_id, cw_number) for cw_number in CourseDB.get_course(self.__course_id)["cw_numbers"])