Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
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()
Exemplo n.º 3
0
 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)
Exemplo n.º 4
0
 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)
Exemplo n.º 5
0
 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)
Exemplo n.º 6
0
	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)
Exemplo n.º 7
0
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
Exemplo n.º 8
0
	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)
Exemplo n.º 9
0
	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)
Exemplo n.º 10
0
	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)
Exemplo n.º 11
0
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()
Exemplo n.º 12
0
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
Exemplo n.º 13
0
 def file_id(self, file_id):
     CourseDB.set_literature(self.__course_id, self.__lit_number, 'file_id',
                             file_id)
Exemplo n.º 14
0
 def file_id(self):
     return CourseDB.get_literature(self.__course_id,
                                    self.__lit_number)["file_id"]
Exemplo n.º 15
0
 def description(self, description):
     CourseDB.set_literature(self.__course_id, self.__lit_number,
                             'description', description)
Exemplo n.º 16
0
 def description(self):
     return CourseDB.get_literature(self.__course_id,
                                    self.__lit_number)["description"]
Exemplo n.º 17
0
 def name(self, name):
     CourseDB.set_literature(self.__course_id, self.__lit_number, 'name',
                             name)
Exemplo n.º 18
0
 def literatures(self):
     return tuple(
         Literature(self.__course_id, lit_number) for lit_number in
         CourseDB.get_course(self.__course_id)["lit_numbers"])
Exemplo n.º 19
0
 def delete(self):
     CourseDB.delete_literature(self.__course_id, self.__lit_number)
     del self.__course_id, self.__lit_number
Exemplo n.º 20
0
 def delete(self):
     CourseDB.delete_course(self.__course_id)
     del self.__course_id
Exemplo n.º 21
0
 def remove_from_blacklist(self, user_id):
     CourseDB.remove_from_blacklist(self.__course_id, user_id)
Exemplo n.º 22
0
 def tasks(self):
     return tuple(
         Task(self.__course_id, task_number) for task_number in
         CourseDB.get_course(self.__course_id)["task_numbers"])
Exemplo n.º 23
0
 def remove_student(self, user_id):
     CourseDB.remove_user_course(user_id, self.__course_id)
Exemplo n.º 24
0
 def append_student(self, user_id):
     CourseDB.append_user_course(user_id, self.__course_id)
Exemplo n.º 25
0
 def url(self):
     return CourseDB.get_literature(self.__course_id,
                                    self.__lit_number)["url"]
Exemplo n.º 26
0
def fetch_all_courses():
    return tuple(
        Course(course_id) for course_id in CourseDB.fetch_all_courses())
Exemplo n.º 27
0
 def url(self, url):
     self.__url = url
     CourseDB.set_literature(self.__course_id, self.__lit_number, 'url',
                             url)
Exemplo n.º 28
0
 def name(self):
     return CourseDB.get_literature(self.__course_id,
                                    self.__lit_number)["name"]
Exemplo n.º 29
0
 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)
Exemplo n.º 30
0
 def classworks(self):
     return tuple(
         Classwork(self.__course_id, cw_number) for cw_number in
         CourseDB.get_course(self.__course_id)["cw_numbers"])