-
Notifications
You must be signed in to change notification settings - Fork 0
Timetable (Расписание)
Расписание в openSchool - способ хранения порядка уроков для разных классов в разные дни для учеников. В отличие от обычного расписания, где есть название класса и таблица с предметами, кусочки расписания в openSchool храняться в другом и специфичном виде, который упрощает поиск в базе данных (в нашем случае - mongoDB).
Расписания храняться в коллекции timetable
в базе данных. Для того, чтобы подключиться к ней, введите:
import classes
connection = classes.createMongo()
database = connection.timetable
Но более правильным способом работы с базой данных является класс Timetable
(см. classes/timetable/timetable.py
или документацию класса ниже).
-
classNumber
- номер класса -
classLetter
- буква класса (если её нету, тоA
) -
day
- номер дня, где 0 - понедельник, а 6 - воскресенье -
lessons
- список с ID уроками
Заметка) В списке с уроками ID могут быть прописаны вместе с префиксами - знаками о том, какой это тип урока (индивидуальный, общий и т.д).
-
A
- урок для всего класса (все уроки для 1-9 класса, кроме рз. часа, имеют этот префикс) -
I
- индивидуальный урок. При генерации расписания, будет использоватьсяuniqLessons
уUser
. Развивающие часы заполняются с этим префиксом -
,
- перебор уроков через запятую равносиленI
- Если префикса нет, то будет использоваться
A
В дизайне openSchool есть один промах. Списки с ID уроками в расписании должны иметь одинаковую длину для каждого дня в каждом классе, а пропуски в списке должны быть заполнены -
. Если же в базе данных появится расписание с другой длиной списка уроков, это может привести к возрождению динозавров, восстанию машин и уничтожению человеческой жизни и всей её инфраструктуры, построенной за тысячелетия. Но не волнуйтесь! Это в параллельной вселенной. В нашей клиентское приложение просто не сможет вывести расписание. Или крашнется сервер, мы пока не знаем.
Поэтому для предотвращение таких 'странных' последствий от возможной неаккуратности программистов, есть переменная MAX_LESSON_COUNT
в файле конфигурации (см. config.py
). Выставляете максимальное количество уроков в школе и после этого НЕ ТРОГАЙТЕ ЕЁ! Иначе... Ну вы уже знаете...
Переменные класса:
-
db
- подключение к части базы данных с расписанием -
classNumber
- номер класса -
classLetter
- буква класса -
day
- день недели (от 0 до 6) -
lessons
- список со строчками, в которых прописаны ID уроков и префиксы
Методы:
-
toJSON()
- переводит данные из текущей инстанции класса в Python словарь- Аргументы:
- ничего
- Возращает:
- Python словарь
- Аргументы:
-
fromJSON()
- создает инстанцию классаTimetable
из данных, которые находятся в указанном Python словаре.- Аргументы:
-
jsonData
- Python словарь
-
- Возращает:
- инстанция Python класса
Timetable
- инстанция Python класса
- Аргументы:
-
init()
- создает кусочек расписания и сохраняет его в базе данных- Аргументы:
-
class_number
- номер класса -
class_letter
- буква класса (ОБЯЗАТЕЛЬНО КИРИЛЛИЦЕЙ!) -
day
- день недели (от 0 до 6) -
lesson_array
- Python список, состоящий из строчек, в которых прописаны ID уроков и префиксы
-
- Возращает при успехе:
- инстанция Python объекта
Timetable
с данными только что созданного куска расписания
- инстанция Python объекта
- Возращает при неудаче:
- тип
None
- тип
- Аргументы:
-
edit()
- изменяет текущий кусок расписания (точнее, меняет список с уроками, остальное менять нет смысла)- Аргументы:
-
new_lesson_array
- Python список, состоящий из строчек, в которых прописаны новые ID уроков и префиксы
-
- Возращает при успехе:
- заменяет
self.lesson
на новый список; возращаетTrue
- заменяет
- Возращает при неудаче:
- тип
None
- тип
- Аргументы:
-
delete()
- удаляет текущий кусок расписания из базы данных- Аргументы:
- нет
- Возращает при успехе:
True
- Возращает при неудаче:
- тип
None
- тип
- Аргументы:
-
createTimetable()
- формирует расписание для конкретного пользователя на нужный день, основывась на данных из базе данных и с учетом замен, если они есть.- Аргументы:
-
user
- инстанция Python классаUser
-
date
- инстанция Python классаdatetime
c нужной датой
-
- Возращает:
- инстанция Python класса
Timetable
- инстанция Python класса
- Аргументы: