diff --git a/src/codewars/SimpleWebFramework.py b/src/codewars/SimpleWebFramework.py new file mode 100644 index 0000000..dd111de --- /dev/null +++ b/src/codewars/SimpleWebFramework.py @@ -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!")