Модуль вопросов (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[исходный код]
Возвращает случайный вопрос из указанного раздела и/или темы.
Логика выбора:
Если указана тема - вопрос из темы
Если нет - вопрос из категории «Случайный вопрос»
Если нет - случайный вопрос из всего раздела
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 |
Смотрите также
Модуль данных вопросов (questions_data) - Исходные данные вопросов
Модуль обработчиков (handlers) - Использование Questionary в обработчиках
Главный модуль (main) - Инициализация Dependency Injection