/
liquid-g
/
liquid-code
Обзор
Документация
Войти
/
liquid-g
/
liquid-code
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop-0.2.0
src/liquidcode/http/http_request.py
84 строки
3 KB
User
ci: настроен Black и flake8 для автоматического форматирования кода
04 июл 2026, 08:14
04 июл 2026, 08:14
4778ed6
Код
Авторство
О чём код?
""" HTTP-реализация абстрактного Request для работы с входящими HTTP-запросами. """ from typing import Any, Dict, Optional from urllib.parse import parse_qs, urlparse from ..contracts import Request class HttpRequest(Request): """ Реализация Request для HTTP-протокола. Принимает данные из HTTP-запроса (путь, метод, заголовки, тело). """ def __init__( self, path: str, method: str, headers: Optional[Dict[str, str]] = None, body: bytes = b"", query_params: Optional[Dict[str, str]] = None, ) -> None: """ Args: path: Путь запроса (включая query-строку). method: HTTP-метод (GET, POST, etc). headers: Словарь заголовков. body: Тело запроса в байтах. query_params: Предварительно разобранные query-параметры. """ self._path = path self._method = method.upper() self._headers = headers or {} self._body = body self._route_params: Dict[str, str] = {} self._attrs: Dict[str, Any] = {} # Парсим query-параметры, если не переданы готовые if query_params is not None: self._query_params = query_params else: self._query_params = self._parse_query_params(path) def _parse_query_params(self, path: str) -> Dict[str, str]: """Извлекает query-параметры из пути.""" parsed = urlparse(path) query = parse_qs(parsed.query) return {k: v[-1] if v else "" for k, v in query.items()} def get_method(self) -> str: return self._method def get_path(self) -> str: """Возвращает путь без query-строки.""" from urllib.parse import urlparse parsed = urlparse(self._path) return parsed.path def get_headers(self) -> Dict[str, str]: return self._headers def get_body(self) -> bytes: return self._body def get_query_params(self) -> Dict[str, str]: return self._query_params def get_route_params(self) -> Dict[str, str]: return self._route_params def set_route_params(self, params: Dict[str, str]) -> None: self._route_params = params def get_attr(self, key: str, default: Any = None) -> Any: return self._attrs.get(key, default) def set_attr(self, key: str, value: Any) -> None: self._attrs[key] = value def __repr__(self) -> str: return f"<HttpRequest {self._method} {self._path}>"