Created
January 20, 2019 01:37
-
-
Save upvalue/823330b00c35dcce8d0103de9b996104 to your computer and use it in GitHub Desktop.
Routing for GCF.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# hack together router with werkzeug because google cloud functions does not | |
# support full flask apps | |
from werkzeug.routing import Map, Rule, NotFound | |
from werkzeug.exceptions import MethodNotAllowed, HTTPException | |
url_map = [] | |
def route(path, methods=("GET",)): | |
def decorator(fn): | |
def endpoint(req): | |
if methods: | |
if req.method not in methods: | |
raise MethodNotAllowed(list(methods)) | |
return fn(req) | |
url_map.append(Rule(path, endpoint=endpoint)) | |
return decorator | |
@route("/", ("GET",)) | |
def helloWorld(req): | |
return "hello world" | |
url_map = Map(url_map) | |
import logging | |
def entry(request): | |
logging.info(f"{request.full_path}") | |
logging.info(f"{request.path}") | |
urls = url_map.bind("localhost", path_info=request.path) | |
try: | |
endpoint, args = urls.match() | |
return endpoint(request) | |
except HTTPException as e: | |
raise e | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment