Намерения
Вспомогательный класс намерений.
Часто при работе над расписанием, поиском, счётчиками или списком изменений, нам бы хотелось более точно указать результаты работы. Например если мы хотим получить результат только для определённого класса или дня недели.
С этой целью был создан класс намерений, который используется как фильтр, чтобы более точно описать что вы хотите получить от расписания.
TODO: Портировать v7
Intent
Bases: NamedTuple
Вспомогательный класс, хранящий в себе намерение.
Позволяет вам более точно указать результаты работы методов расписания. К примеру если вы производите подсчёт элементов расписания, то можете указать что хотите считать для определённых дней недели или классов.
Так вы можете уточнять результаты работы со всеми методами, что поддерживают намерения.
.. warning:: Пожалуйста не вводите данные вручную.
Если вы хотите собрать новое намерение, то используйте
метод класса ``construct``:
.. code-block:: python
sc = Schedule()
i = Intent.construct(sc, cl="8в")
Или воспользуйтесь методом `parse`:
.. code-block:: python
sc = Schedule()
prompt = "9в матем 204"
i = Intent.parse(sc, prompt.split())
Ручная сборка намерения используется **только** в тех случаях,
когда вы уверены в том что переданные данные присутствуют в
расписании.
cl: set[str] = set()
class-attribute
instance-attribute
days: set[int] = set()
class-attribute
instance-attribute
lessons: set[str] = set()
class-attribute
instance-attribute
cabinets: set[str] = set()
class-attribute
instance-attribute
to_str() -> str
Запаковывает намерение в строку.
Используется, для сохранения содержимого намерения в строке. Например при сохранении в базу данных или другое хранилище. После данное намерение легко можно будет распаковать из строки.
Примеры запакованных намерений:
:::- Пустое намерение.9в::матем:- Намерение с классом "9в" и "уроком математика".:1,2::- Намерение с несколькими значениями (тут днями).
from_str(s: str) -> Self
classmethod
Распаковывает намерение из строки.
Получает экземпляр намерение, которое ранее было упаковано
в строку через метод to_str().
.. code-block:: python
# Запаковываем намерение
sc = Schedule()
i = Intent.construct(sc, cl="8в")
i_str = i.to_str()
# Тут будет ваш код...
# ... Что-то делаем...
# ... И спустя долгое время...
# а теперь вы захотели загрузить намерение из строки
i = Intent.from_str(i_str)
.. note::
Обратите внимание, что метод from_str не производит
валидацию передаваемых значений относительно расписания.
Мы предполагаем что вы никак не изменяли запакованную строку.
Формат строки:
``cl,...:day,...:lessons,...:cabinets,cabinets2,cabinetsN``
- "9в:1,2::" ->
Intent(cl=["9в"], days=[1, 2])
construct(sc: Schedule, cl: Iterable[str] | str = (), days: Iterable[int] | int = (), lessons: Iterable[str] | str = (), cabinets: Iterable[str] | str = ()) -> Self
classmethod
Собирает новый экземпляр намерений.
Занимается сборкой и валидацией нового экземпляра намерений. Вы можете передавать для сборки итерируемые контейнеры.
.. code-block:: python
i = Intent.construct(sc, cl="8а")
# Intent({"8а"}, set(), set(), set())
i = Intent.construct(sc, days=[2, 3], lessons="матем")
Экземпляр Schedule используется для валидации параметров относительно текущего расписания.
parse(sc: Schedule, args: Iterable[str]) -> Self
classmethod
Извлекает намерения из списка строковых аргументов.
.. code-block:: text
Урок Кабинет
/ /
> Химия вторник 204 8а
/ /
День класс
Также занимается валидацией параметров, использую класс Schedule относительно текущего расписания.