Перейти к содержанию

Намерения

Вспомогательный класс намерений.

Часто при работе над расписанием, поиском, счётчиками или списком изменений, нам бы хотелось более точно указать результаты работы. Например если мы хотим получить результат только для определённого класса или дня недели.

С этой целью был создан класс намерений, который используется как фильтр, чтобы более точно описать что вы хотите получить от расписания.

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 относительно текущего расписания.