Skip to content

Commit 457848d

Browse files
author
patx
committed
bump to 0.27 and document Request.query/Request.form helpers
1 parent 14bbaa4 commit 457848d

16 files changed

Lines changed: 83 additions & 22 deletions

File tree

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ class MyApp(App):
141141
return f"Hello, {name}!"
142142

143143
async def hello(self):
144-
name = self.request.query_params.get("name", [None])[0]
144+
name = self.request.query("name")
145145
return f"Hello {name}!"
146146
```
147147
**Access:**
@@ -156,7 +156,7 @@ class MyApp(App):
156156
return f"Form submitted by: {username}"
157157

158158
async def submit_catch_all(self):
159-
username = self.request.body_params.get("username", ["Anonymous"])[0]
159+
username = self.request.form("username", "Anonymous")
160160
return f"Submitted by: {username}"
161161
```
162162

docs/apidocs/conf.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
project = "MicroPie"
44
author = "Harrison Erd"
5-
release = "0.26"
5+
release = "0.27"
66

77
extensions = [
88
"sphinx.ext.autodoc",

docs/apidocs/reference/request.rst

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,13 @@ Request class
3535
.. attribute:: query_params
3636

3737
A ``dict`` mapping each query parameter to a list of values.
38-
For convenience, use ``self.request.query_params['name'][0]`` to
39-
obtain the first value.
38+
For convenience, use :meth:`~micropie.Request.query` to obtain
39+
the first value.
40+
41+
.. method:: query(name, default=None)
42+
43+
Return the first value for query parameter *name*, or *default*
44+
if missing.
4045

4146
.. attribute:: body_params
4247

@@ -45,6 +50,11 @@ Request class
4550
object; for ``application/x-www-form-urlencoded`` forms they are
4651
parsed using :func:`urllib.parse.parse_qs`.
4752

53+
.. method:: form(name, default=None)
54+
55+
Return the first value for form/body field *name*, or *default*
56+
if missing.
57+
4858
.. attribute:: get_json
4959

5060
The JSON body parsed into a Python object. Only populated when
@@ -77,4 +87,4 @@ WebSocketRequest class
7787
Inherits from :class:`~micropie.Request` and represents a WebSocket
7888
connection request. All attributes of :class:`~micropie.Request`
7989
apply. For WebSocket handlers the request is accessible via
80-
``self.request`` inside the handler or via the context variable.
90+
``self.request`` inside the handler or via the context variable.

docs/apidocs/whats_new.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ releases, consult the `GitHub releases page <https://github.com/patx/micropie/re
1111
Version highlights
1212
------------------
1313

14+
* **0.27** – Adds ``Request.query`` and ``Request.form`` helpers for more
15+
direct access to query-string and form data.
1416
* **0.26** – Makes sub-application handoff independent of middleware
1517
ordering, improving reliability for mounted ASGI apps.
1618
* **0.25** – Fixes Unicode redirect handling by percent-encoding

docs/release_notes.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
[![Logo](https://patx.github.io/micropie/logo.png)](https://patx.github.io/micropie)
22

33
## Releases Notes
4+
- **[0.27](https://github.com/patx/micropie/releases/tag/v0.27)** - Add `Request.query` and `Request.form` helpers
45
- **[0.26](https://github.com/patx/micropie/releases/tag/v0.26)** - Sub-app routing no longer depends on middleware ordering
56
- **[0.25](https://github.com/patx/micropie/releases/tag/v0.25)** - Fix unicode redirect handling. Percent-encode non-ASCII path segments before setting Location header. Prevents latin-1 header encoding errors and avoids double-encoding queries.
67
- **[0.24](https://github.com/patx/micropie/releases/tag/v0.24)** - Improve session handling. Expired sessions now clean up properly, and empty sessions delete stored data. Session saving also moved after `after_request` middleware.

examples/auth/app.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ async def login(self):
2222
)
2323

2424
async def callback(self):
25-
code = self.request.query_params.get("code")
25+
code = self.request.query("code")
2626
if not code:
2727
return "Error: No code provided"
2828

examples/blog/app.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ async def login(self):
203203
GET → show login form
204204
POST → authenticate and set session, then redirect
205205
"""
206-
next_path = self.request.query_params.get("next", ["/"])[0]
206+
next_path = self.request.query("next", "/")
207207

208208
if self.request.method == "GET":
209209
return await self._render_template(
@@ -215,8 +215,8 @@ async def login(self):
215215
nav_active="login",
216216
)
217217

218-
username = self.request.body_params.get("username", [""])[0].strip()
219-
password = self.request.body_params.get("password", [""])[0].strip()
218+
username = self.request.form("username", "").strip()
219+
password = self.request.form("password", "").strip()
220220

221221
user = await self.users.find_one({"username": username})
222222
if not user or user.get("password") != password:

examples/explicit_routing/ws.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ async def get_user(self, user_id: int):
1010
@ws_route("/ws/chat/{room:str}")
1111
async def ws_chat(self, ws: WebSocket, room: str):
1212
await ws.accept()
13-
user = self.request.query_params.get("user", ["anonymous"])[0]
13+
user = self.request.query("user", "anonymous")
1414
self.request.session["last_room"] = room
1515
while True:
1616
try:

examples/json_api/basic.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ class PasteApp(App):
99
async def paste(self, pid: str = None):
1010
if self.request.method == "POST":
1111
# Get content from JSON or form, depending on the Content-Type
12-
content = self.request.body_params.get("content")[0]
12+
content = self.request.form("content")
1313
pid = str(uuid4())
1414
await db.aset(pid, content)
1515
return {

examples/middleware/csrf.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ async def index(self):
161161

162162
async def submit(self):
163163
if self.request.method == "POST":
164-
name = self.request.body_params.get("name", ["World"])[0]
164+
name = self.request.form("name", "World")
165165
return f"Hello {name}"
166166

167167

0 commit comments

Comments
 (0)