Request objects
===============
.. _request-object:
MicroPie provides two request classes: :class:`~micropie.Request` for
HTTP requests and :class:`~micropie.WebSocketRequest` for WebSocket
connections. You access the current request via
:meth:`~micropie.App.request` on your application instance or by using
the context variable in lower‑level code.
Request class
-------------
.. class:: Request(scope)
Represents an incoming HTTP request. The *scope* argument is the
ASGI scope dictionary provided by the server. You should not
instantiate this class yourself. MicroPie creates one per
request and stores it in a context variable.
.. attribute:: scope
The original ASGI scope for the request.
.. attribute:: method
The HTTP method, such as ``GET`` or ``POST``.
.. attribute:: path_params
A list of positional path parameters. See
:doc:`../tutorial/routing` for details on parameter mapping.
.. attribute:: query_params
A ``dict`` mapping each query parameter to a list of values.
This is the raw parsed mapping from the query string. For
convenience, use :meth:`~micropie.Request.query` to obtain
the first value.
.. method:: query(name, default=None)
Return the first value for query parameter *name*, or *default*
if missing.
.. attribute:: body_params
A ``dict`` mapping form field names to lists of values. For
JSON requests, body parameters are derived from the top‑level
object; for ``application/x-www-form-urlencoded`` forms they are
parsed using :func:`urllib.parse.parse_qs`. This is the raw
mapping used by MicroPie for argument binding.
.. method:: form(name, default=None)
Return the first value for form/body field *name*, or *default*
if missing.
.. attribute:: get_json
The JSON body parsed into a Python object. Only populated when
the request contains valid JSON with content type
``application/json``.
.. method:: json(name=None, default=None)
Return the parsed JSON payload or a value from a top-level JSON
object.
If *name* is omitted, this method returns the full parsed payload
(equivalent to :attr:`~micropie.Request.get_json`). If *name* is
provided and the payload is an object, the value for that key is
returned; otherwise *default* is returned.
.. attribute:: session
A ``dict`` for storing per‑client data across requests. See
:doc:`../howto/sessions`.
.. attribute:: files
A ``dict`` of uploaded files for multipart/form‑data requests.
Each entry is a mapping containing keys ``filename``,
``content_type`` and ``content``, where ``content`` is an
``asyncio.Queue`` yielding file chunks as bytes. See
:doc:`../tutorial/routing` for information on awaiting file fields.
.. attribute:: headers
A case‑insensitive mapping of header names to values, decoded as
UTF‑8 with invalid bytes replaced. Header names are lowercased.
WebSocketRequest class
----------------------
.. class:: WebSocketRequest(scope)
Inherits from :class:`~micropie.Request` and represents a WebSocket
connection request. All attributes of :class:`~micropie.Request`
apply. For WebSocket handlers the request is accessible via
``self.request`` inside the handler or via the context variable.