/
liquid-g
/
liquid-code
Обзор
Документация
Войти
/
liquid-g
/
liquid-code
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop-0.4
src/liquidcode/application/default_route.py
79 строк
3 KB
User
0.4.9 - переработка документации, рефакторинг кода, покрытие тестами 70%
06 июл 2026, 13:37
06 июл 2026, 13:37
79b2ebc
Код
Авторство
О чём код?
import logging from typing import Callable from .. import __version__ logger = logging.getLogger(__name__) def ensure_default_route(app): """Устанавливает дефолтный маршрут, если его нет.""" if app.router.has_route('/', 'GET'): return def default_handler(**kwargs): try: html = app.render_template('welcome.html.j2', version=__version__) return html.encode('utf-8'), 200, {'Content-Type': 'text/html'} except Exception: # Генерируем HTML-страницу со списком маршрутов routes_html = "" for route in app.router.all_routes(): methods = ', '.join(route['methods']) routes_html += f"<tr><td>{route['path']}</td><td>{methods}</td><td>{route['controller']}</td></tr>" html = f""" <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>LiquidCode</title> <style> body {{ font-family: system-ui, sans-serif; text-align: center; padding: 50px; }} h1 {{ font-size: 3rem; }} code {{ background: #f0f0f0; padding: 2px 6px; border-radius: 4px; }} table {{ margin: 20px auto; border-collapse: collapse; width: 80%; }} th, td {{ border: 1px solid #ddd; padding: 12px; text-align: left; }} th {{ background: #4CAF50; color: white; }} tr:nth-child(even) {{ background: #f2f2f2; }} </style> </head> <body> <h1>🚀 LiquidCode</h1> <p>Версия: <strong>{__version__}</strong></p> <p>Создайте шаблон <code>templates/welcome.html.j2</code> для кастомизации этой страницы.</p> <h2>Маршруты</h2> <table> <tr><th>Путь</th><th>Методы</th><th>Контроллер</th></tr> {routes_html} </table> <p><a href="/routes">Посмотреть маршруты</a></p> </body> </html> """ return html.encode('utf-8'), 200, {'Content-Type': 'text/html'} set_default_route(app, default_handler) def set_default_route(app, handler: Callable) -> None: """Устанавливает пользовательский обработчик для корневого маршрута.""" # Проверяем, существует ли уже корневой маршрут existing_route = None for route in app.router._routes: if route.path == '/' and 'GET' in route.methods: existing_route = route break if existing_route: logger.warning("Дефолтный маршрут уже существует, будет перезаписан.") # Удаляем существующий маршрут и добавляем новый app.router._routes.remove(existing_route) def wrapped(**kwargs): result = handler(**kwargs) if isinstance(result, tuple) and len(result) == 3: return result return result app.router.add_route('/', wrapped, ['GET'])