72 lines
2.0 KiB
Python
72 lines
2.0 KiB
Python
import datetime
|
|
|
|
from requests import get
|
|
|
|
import settings
|
|
from helpers import User
|
|
|
|
fields = [
|
|
'discipline',
|
|
'building',
|
|
'auditorium',
|
|
'date',
|
|
'beginLesson',
|
|
'endLesson',
|
|
'lecturer'
|
|
]
|
|
|
|
|
|
class RUZ:
|
|
|
|
def find_person(self, user: User) -> dict | None:
|
|
if user.is_teacher:
|
|
person_type = "person"
|
|
else:
|
|
person_type = "student"
|
|
search_str = settings.RUZ_API + f"search?term={user.name}&type={person_type}"
|
|
try:
|
|
data = get(search_str)
|
|
except:
|
|
return None
|
|
if data.status_code == 200:
|
|
return data.json()
|
|
return None
|
|
|
|
def get_schedule(self, user: User, begin_date: datetime.datetime, end_date: datetime.datetime):
|
|
start_date_str = begin_date.strftime("%Y.%m.%d")
|
|
end_date_str = end_date.strftime("%Y.%m.%d")
|
|
if user.is_teacher:
|
|
person_type = "person"
|
|
else:
|
|
person_type = "student"
|
|
search_str = settings.RUZ_API + f"schedule/{person_type}/{user.hse_id}?start={start_date_str}&finish={end_date_str}&lng=1"
|
|
try:
|
|
data = get(search_str)
|
|
except:
|
|
return None
|
|
if data.status_code != 200:
|
|
return None
|
|
data = data.json()
|
|
formatted_data = [
|
|
{
|
|
field: element[field]
|
|
for field in fields
|
|
}
|
|
for element in data
|
|
]
|
|
return formatted_data
|
|
|
|
def schedule_builder(self, lessons: list[dict]) -> str:
|
|
ans = ""
|
|
for lesson in lessons:
|
|
ans += f"Дисциплина: {lesson['discipline']}\n"
|
|
ans += f"Аудитория: {lesson['building']}, {lesson['auditorium']}\n"
|
|
ans += f"Начало: {lesson['begin'].strftime('%d.%m %H:%M')}\n"
|
|
ans += f"Конец: {lesson['end'].strftime('%d.%m %H:%M')}\n"
|
|
ans += f"Преподаватель: {(lesson['lecturer'] or 'Неизвестно')}\n"
|
|
ans += "_______________\n"
|
|
return ans
|
|
|
|
|
|
ruz = RUZ()
|