Repository navigation
Expand file tree
/
Copy pathrouter.mojo
More file actions
73 lines (55 loc) · 1.84 KB
/
Copy pathrouter.mojo
File metadata and controls
73 lines (55 loc) · 1.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
"""Example 15 - Router: path parameters, method dispatch, 404 / 405.
Builds a ``Router`` with a home route, a parameterised user route,
and a POST endpoint. The example does not actually bind a server
socket (that would block the test runner forever); it drives the
Router directly via synthesised ``Request`` values. This keeps the
example runnable inside ``pixi run tests`` while still
demonstrating every major Router feature.
Run:
pixi run example-router
"""
from flare.http import (
Router,
Request,
Response,
Method,
Status,
ok,
not_found,
)
def home(req: Request) raises -> Response:
return ok("flare - home")
def get_user(req: Request) raises -> Response:
return ok("user id = " + req.param("id"))
def create_user(req: Request) raises -> Response:
return ok("created")
def main() raises:
print("=" * 60)
print("flare example 15 - Router")
print("=" * 60)
var r = Router()
r.get("/", home)
r.get("/users/:id", get_user)
r.post("/users", create_user)
# Literal hit
var home_resp = r.serve(Request.test_get("/"))
print("GET / →", home_resp.status, home_resp.text())
# Parameter extraction
var u_resp = r.serve(Request.test_get("/users/42"))
print("GET /users/42 →", u_resp.status, u_resp.text())
# POST routed to its own handler
var post_resp = r.serve(Request(method=Method.POST, url="/users"))
print("POST /users →", post_resp.status, post_resp.text())
# Wrong method on a known path → 405 with Allow header
var wrong = r.serve(Request(method=Method.PUT, url="/users"))
print(
"PUT /users →",
wrong.status,
"Allow:",
wrong.headers.get("Allow"),
)
# Unknown path → 404
var nope = r.serve(Request.test_get("/whoami"))
print("GET /whoami →", nope.status)
print()
print("OK.")