Модуль вопросов (questionary)

Модуль управления вопросами.

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

Classes:

Questionary: Основной класс для управления вопросами

mylife3000.questionary.get_section_questions()

Получение вопросов раздела

mylife3000.questionary.get_section_description()

Получение описания раздела

mylife3000.questionary.get_random_question()

Получение случайного вопроса

mylife3000.questionary.get_themes()

Получение списка тем раздела

mylife3000.questionary.get_all_sections()

Получение всех разделов

class mylife3000.questionary.Questionary[исходный код]

Базовые классы: object

Класс для управления вопросами с возможностью dependency injection.

Предоставляет интерфейс для доступа к вопросам, разбитым по разделам и темам. Реализует паттерн dependency injection для изоляции обработчиков от логики работы с вопросами.

sections

Словарь разделов, тем и списков вопросов

Type:

Dict[str, Dict[str, List[str]]]

section_descriptions

Словарь описаний разделов

Type:

Dict[str, str]

__init__()[исходный код]
_load_questions()[исходный код]

Загружает все вопросы из модуля questions_data в память.

Инициализирует структуры данных sections и section_descriptions, добавляя категорию «Случайный вопрос» в каждый раздел.

Тип результата:

None

get_section_questions(section_name)[исходный код]

Возвращает словарь тем и вопросов для указанного раздела.

Параметры:

section_name (str) – Название раздела

Результат:

Словарь {тема: список_вопросов} или None если раздел не найден

Тип результата:

Optional[Dict[str, List[str]]]

get_section_description(section_name)[исходный код]

Возвращает описание указанного раздела.

Параметры:

section_name (str) – Название раздела

Результат:

Описание раздела или пустая строка если раздел не найден

Тип результата:

str

get_random_question(section_name, theme=None)[исходный код]

Возвращает случайный вопрос из указанного раздела и/или темы.

Параметры:
  • section_name (str) – Название раздела

  • theme (Optional[str], optional) – Название темы, по умолчанию None (случайный вопрос из всего раздела)

Результат:

Случайный вопрос или None если вопросы не найдены

Тип результата:

Optional[str]

get_themes(section_name)[исходный код]

Возвращает список тем для указанного раздела.

Исключает категорию «Случайный вопрос» из результата.

Параметры:

section_name (str) – Название раздела

Результат:

Список названий тем

Тип результата:

List[str]

get_all_sections()[исходный код]

Возвращает список всех доступных разделов.

Результат:

Список названий разделов

Тип результата:

List[str]

Обзор

Модуль questionary.py реализует паттерн Dependency Injection для изоляции обработчиков от логики работы с вопросами. Класс Questionary предоставляет единый интерфейс для доступа к вопросам, разбитым по разделам и темам.

Архитектура данных

Класс Questionary

class mylife3000.questionary.Questionary[исходный код]

Основной класс для управления вопросами.

Атрибуты:

sections

Словарь разделов, тем и списков вопросов

Тип: Dict[str, Dict[str, List[str]]]

section_descriptions

Словарь описаний разделов

Тип: Dict[str, str]

Методы Questionary

Questionary._load_questions()[исходный код]

Приватный метод загрузки вопросов из модуля questions_data.

Действия:

  • Инициализирует структуру sections

  • Заполняет section_descriptions

  • Добавляет категорию «Случайный вопрос» в каждый раздел

Questionary.get_section_questions(section_name: str) Dict[str, List[str]] | None[исходный код]

Возвращает словарь тем и вопросов для указанного раздела.

Parameters:

  • section_name - название раздела

Returns:

  • Словарь {тема: список_вопросов} или None

Questionary.get_section_description(section_name: str) str[исходный код]

Возвращает описание указанного раздела.

Returns:

  • Описание раздела или пустую строку

Questionary.get_random_question(section_name: str, theme: str | None = None) str | None[исходный код]

Возвращает случайный вопрос из указанного раздела и/или темы.

Логика выбора:

  1. Если указана тема - вопрос из темы

  2. Если нет - вопрос из категории «Случайный вопрос»

  3. Если нет - случайный вопрос из всего раздела

Returns:

  • Случайный вопрос или None

Questionary.get_themes(section_name: str) List[str][исходный код]

Возвращает список тем для указанного раздела.

Важно: Исключает категорию «Случайный вопрос»

Questionary.get_all_sections() List[str][исходный код]

Возвращает список всех доступных разделов.

Структура разделов

Dependency Injection

Questionary используется через механизм Dependency Injection:

# В main.py
questionary = Questionary()
application.bot_data['questionary'] = questionary

# В обработчиках
questionary: Questionary = context.bot_data['questionary']

Пример использования

# Создание экземпляра
questionary = Questionary()

# Получение всех разделов
sections = questionary.get_all_sections()
# ['Самопознание: Кто Я?', 'Вектор: Куда я движусь?', ...]

# Получение тем раздела
themes = questionary.get_themes('Самопознание: Кто Я?')
# ['Ядро личности', 'Сильные и слабые стороны', ...]

# Получение случайного вопроса
question = questionary.get_random_question('Самопознание: Кто Я?', 'Ядро личности')
# "Если бы тебе нужно было описать свою сущность..."

Статистика вопросов

Количество вопросов по разделам

Раздел

Тем

Вопросов

Самопознание: Кто Я?

6

48

Вектор: Куда я движусь?

4

32

Вызовы: Что мне мешает?

4

28

Окружение: Мои отношения?

5

40

Интеграция: Как я живу?

5

40

Капсула Времени

6

48

Всего

30

236

Смотрите также