train kata "Simple Web Framework"

This commit is contained in:
Michael Schären 2026-03-13 20:57:09 +01:00
parent 323687c00d
commit d0609303dc

View File

@ -0,0 +1,54 @@
import typing
class Router(object):
def __init__(self):
self.routes = {}
def bind(self, path: str, method: str, func: typing.Callable):
self.routes[(path, method)] = func
def run_request(self, path: str, method: str):
return self.routes.get((path, method), lambda: "Error 404: Not Found")()
if __name__ == "__main__":
# Should handle GET routes'
router = Router()
router.bind("/hello", "GET", lambda: "hello world")
router.bind("/login", "GET", lambda: "Please log-in.")
assert router.run_request("/hello", "GET") == "hello world"
assert router.run_request("/login", "GET") == "Please log-in."
# Should handle POST routes
router = Router()
router.bind("/vote", "POST", lambda: "Voted.")
router.bind("/comment", "POST", lambda: "Comment sent.")
assert router.run_request("/vote", "POST") == "Voted."
assert router.run_request("/comment", "POST") == "Comment sent."
# Should handle mixed routes.
router = Router()
router.bind("/login", "GET", lambda: "Please log-in.")
router.bind("/login", "POST", lambda: "Logging-in.")
assert router.run_request("/login", "GET") == "Please log-in."
assert router.run_request("/login", "POST") == "Logging-in."
# Should return 404 for non-existing routes.
router = Router()
assert (
router.run_request("/this-url-does-not-exist", "GET") == "Error 404: Not Found"
)
# Should modify existing routes
router = Router()
router.bind("/page", "GET", lambda: "First binding.")
router.bind("/page", "GET", lambda: "Modified binding.")
assert router.run_request("/page", "GET") == "Modified binding."
print("All tests passed!")