Source code for pyechonext.request
import json
from typing import Any, Dict, Union
from urllib.parse import parse_qs
from pyechonext.config import Settings
from pyechonext.logging import logger
def _build_get_params_dict(raw_params: str) -> dict:
"""Build GET params dictionary
Args:
raw_params (str): raw params string
Returns:
dict: GET params
"""
return parse_qs(raw_params)
def _build_post_params_dict(raw_params: bytes) -> dict:
"""Build POST params dictionary
Args:
raw_params (bytes): raw parameters
Returns:
dict: POST params
"""
try:
raw_params = json.loads(raw_params)
except json.decoder.JSONDecodeError:
raw_params = raw_params.decode()
else:
return raw_params
return parse_qs(raw_params)
[docs]
class Request:
"""
This class describes a request.
"""
__slots__ = (
"environ",
"settings",
"method",
"path",
"GET",
"POST",
"user_agent",
"extra",
)
[docs]
def __init__(self, environ: dict = {}, settings: Settings = None):
"""Constructs a new request
Args:
environ (dict, optional): environ info. Defaults to {}.
settings (Settings, optional): settings of app. Defaults to None.
"""
self.environ: Dict[str, Any] = environ
self.settings: Settings = settings
self.method: str = self.environ.get("REQUEST_METHOD")
self.path: str = self.environ.get("PATH_INFO")
self.GET: Dict[Any, Any] = _build_get_params_dict(
self.environ.get("QUERY_STRING")
)
self.POST: Dict[Any, Any] = _build_post_params_dict(
self.environ.get("wsgi.input").read()
)
self.user_agent: str = self.environ.get("HTTP_USER_AGENT")
self.extra: Dict[Any, Any] = {}
logger.debug(f"New request created: {self.method} {self.path}")
def __getattr__(self, item: Any) -> Union[Any, None]:
"""Magic method for get attrs (from extra)
Args:
item (Any): item key
Returns:
Union[Any, None]: value
"""
return self.extra.get(item, None)