I am making an adapter for running ASGI applications in GCP Cloud Function. (Repo)
Simply, I want to run my ASGI application (such as FastAPI or Django) in Cloud Function.
My adapter(Vellox) works like this:
fromfastapiimportFastAPIfromvelloximportVelloxapp=FastAPI()
@app.get("/")defread_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")defread_item(item_id: int, q: str=None):
return {"item_id": item_id, "q": q}
vellox=Vellox(app=app, lifespan="off")
defhandler(request):
returnvellox(request)I confirmed that my adapter (vellox) works "hello world" example properly. But functions_framework throw error when handler is not types.FunctionType. In abvoe code, handler is instance of Vellox and also it is callable.
The code below is the part that is problematic.
# src/functions_framework/_function_registry.pydefget_user_function(source, source_module, target):
"""Returns user function, raises exception for invalid function."""# . . .function=getattr(source_module, target)
# Check that it is a functionifnotisinstance(function, types.FunctionType):
raiseInvalidTargetTypeException(
"The function defined in file {source} as '{target}' needs to be of ""type function. Got: invalid type {target_type}".format(
source=source, target=target, target_type=type(function)
)
)
returnfunctionInstead of forcing the function type to be function, I suggest changing it to Callable, which has a slightly wider scope.
I am making an adapter for running ASGI applications in GCP Cloud Function. (Repo)
Simply, I want to run my ASGI application (such as FastAPI or Django) in Cloud Function.
My adapter(
Vellox) works like this:I confirmed that my adapter (vellox) works "hello world" example properly. But
functions_frameworkthrow error when handler is nottypes.FunctionType. In abvoe code, handler is instance ofVelloxand also it is callable.The code below is the part that is problematic.
Instead of forcing the function type to be function, I suggest changing it to
Callable, which has a slightly wider scope.