train kata "Simple Web Framework"
This commit is contained in:
parent
323687c00d
commit
d0609303dc
54
src/codewars/SimpleWebFramework.py
Normal file
54
src/codewars/SimpleWebFramework.py
Normal 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!")
|
||||||
Loading…
x
Reference in New Issue
Block a user