mirror of
https://github.com/Faridik/Carolyn.git
synced 2026-07-08 05:11:52 +00:00
add more methods for manager 2
This commit is contained in:
parent
dd01aba777
commit
eec8d1b2d5
@ -6,6 +6,18 @@ from google.oauth2.credentials import Credentials
|
||||
|
||||
from models.student import Student
|
||||
from models.group import Group
|
||||
from models.group import StudentNotFound
|
||||
from models.assignment import Assignment
|
||||
|
||||
STUDENT_NUMBERS = 0
|
||||
STUDENT_NAMES = 1
|
||||
GROUP_IDS = 2 # for StudentList and AssignmentList
|
||||
TELEGRAM_IDS = 3
|
||||
ASSIGNMENT_NAMES = 1
|
||||
ASSIGNMENT_SUBJECT = 3
|
||||
ASSIGNMENT_WEIGHTS = 4
|
||||
ASSIGNMENT_RANGES = 5
|
||||
ASSIGNMENT_ALLOWS = 6
|
||||
|
||||
class Manager:
|
||||
"""Позволяет выполнять операции с Google таблицами."""
|
||||
@ -35,22 +47,85 @@ class Manager:
|
||||
self.sheet = service.spreadsheets()
|
||||
|
||||
|
||||
|
||||
|
||||
def get_values(self, range_name: str = 'StudentList') -> list: # TODO: change subject
|
||||
"""Получить значения с таблицы."""
|
||||
|
||||
result = self.sheet.values().get(spreadsheetId=self.spreadsheet_id,
|
||||
range=range_name).execute()
|
||||
|
||||
return result.get('values', [])
|
||||
|
||||
|
||||
|
||||
|
||||
def get_group(self, group_id: int) -> Group:
|
||||
"""Получить группу со студентами."""
|
||||
|
||||
GROUPS = 2
|
||||
STUDENT_NUMBERS = 0
|
||||
STUDENT_NAMES = 1
|
||||
|
||||
result = self.sheet.values().get(spreadsheetId=self.spreadsheet_id,
|
||||
range='Студенты!A2:Z').execute()
|
||||
values = result.get('values', [])
|
||||
values = self.get_values()
|
||||
|
||||
group = Group(group_id)
|
||||
|
||||
f = lambda row: group_id == int(row[GROUPS])
|
||||
f = lambda row: group_id == int(row[GROUP_IDS])
|
||||
for row in filter(f, values):
|
||||
group.add_student(Student(int(row[STUDENT_NUMBERS]), row[STUDENT_NAMES]))
|
||||
group.add_student(Student(int(row[STUDENT_NUMBERS]), row[STUDENT_NAMES],
|
||||
group_id, row[TELEGRAM_IDS]))
|
||||
|
||||
return group
|
||||
|
||||
|
||||
|
||||
|
||||
def get_student_by_name(self, name: str) -> Student:
|
||||
"""Получить студента по имени."""
|
||||
|
||||
values = self.get_values()
|
||||
|
||||
f = lambda row: name == row[STUDENT_NAMES]
|
||||
try:
|
||||
row = next(filter(f, values))
|
||||
return Student(int(row[STUDENT_NUMBERS]), name,
|
||||
row[GROUP_IDS], row[TELEGRAM_IDS])
|
||||
except StopIteration:
|
||||
raise StudentNotFound("Не могу найти студента по имени")
|
||||
|
||||
|
||||
|
||||
|
||||
def get_student_by_tg_id(self, tg_id: int) -> Student:
|
||||
"""Получить студента по telegram id."""
|
||||
|
||||
values = self.get_values()
|
||||
|
||||
f = lambda row: tg_id == row[TELEGRAM_IDS]
|
||||
try:
|
||||
row = next(filter(f, values))
|
||||
return Student(int(row[STUDENT_NUMBERS]), row[STUDENT_NAMES],
|
||||
row[GROUP_IDS], tg_id)
|
||||
except StopIteration:
|
||||
raise StudentNotFound("Не могу найти студента по telegram id")
|
||||
|
||||
|
||||
|
||||
|
||||
def set_assignments_for_student(self, student: Student):
|
||||
"""Добавить задания студенту."""
|
||||
|
||||
values = self.get_values('AssignmentList')
|
||||
|
||||
f = lambda row: student.group_id == int(row[GROUP_IDS]) # TODO add subject
|
||||
for row in filter(f,values):
|
||||
assignment_value = self.get_values(row[ASSIGNMENT_RANGES])
|
||||
ass_values = list(map(float, assignment_value[student.number]))
|
||||
student.add_assignment(Assignment(row[ASSIGNMENT_NAMES], ass_values,
|
||||
row[ASSIGNMENT_WEIGHTS]))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user