/
liquid-g
/
liquid-code
Обзор
Документация
Войти
/
liquid-g
/
liquid-code
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop-0.4
app_service.py
73 строки
3 KB
User
0.4.15 - Улучшение обработки исключений и структура документации по middleware
06 июл 2026, 17:30
06 июл 2026, 17:30
30f3e0a
Код
Авторство
О чём код?
#!/usr/bin/env python3 """ Сервисное приложение LiquidCode. Инициализирует Application, загружает конфигурацию, регистрирует контроллеры и возвращает экземпляр приложения для использования в фоновых задачах, консольных командах или тестах. """ import logging from liquidcode import Application, __version__ from liquidcode.test import TestClient from liquidcode.config import ConfigError # Не настраиваем logging.basicConfig здесь, так как Application сам настроит # логирование в зависимости от debug в конфиге. CONFIG_PATH = "config/config.yaml" def create_app() -> Application: """ Создаёт и настраивает экземпляр приложения. Returns: Application: Готовое к использованию приложение. """ app = Application() try: app.load_config(CONFIG_PATH) except ConfigError as e: error_type = getattr(e, 'error_type', None) if error_type == ConfigError.FILE_NOT_FOUND: logging.warning( f"Конфигурационный файл {CONFIG_PATH} не найден. Используются настройки по умолчанию." ) else: logging.error(f"Ошибка загрузки конфигурации: {e}") # Автоматически регистрируем контроллеры app.discover_controllers() return app # Глобальный экземпляр для простого импорта app = create_app() if __name__ == "__main__": # Если файл запущен напрямую — можно вывести информацию о приложении print(f"Приложение инициализировано. Версия: {__version__}") routes = app.router.all_routes() print(f"Зарегистрировано маршрутов: {len(routes)}") for route in routes[:5]: print(f" {route['methods']} {route['path']} → {route['controller']}") # Демонстрация работы ErrorHandlingMiddleware с TestClient client = TestClient(app) # 404 как JSON (Accept: application/json) print("\n--- 404 как JSON ---") response = client.get("/nonexistent", headers={}) print(f"Статус: {response.status}") print(f"Тело: {response.json()}") # 404 как HTML (Accept: text/html) print("\n--- 404 как HTML ---") response = client.get("/nonexistent", headers={"Accept": "text/html"}) print(f"Статус: {response.status}") html_body = response.text() print(f"Длина HTML: {len(html_body)} символов") print(f"Первые 500 символов:\n{html_body[:500]}")