Skip to content

Update type check in get_user_function to accept Callable instead of only types.FunctionType #317

@junah201

Description

@junah201

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:

from fastapi import FastAPI
from vellox import Vellox

app = FastAPI()


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}

vellox = Vellox(app=app, lifespan="off")

def handler(request):
    return vellox(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.py

def get_user_function(source, source_module, target):
    """Returns user function, raises exception for invalid function."""

    # . . .

    function = getattr(source_module, target)
    # Check that it is a function
    if not isinstance(function, types.FunctionType):
        raise InvalidTargetTypeException(
            "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)
            )
        )
    return function

Instead of forcing the function type to be function, I suggest changing it to Callable, which has a slightly wider scope.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      pFad - Phonifier reborn

      Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

      Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


      Alternative Proxies:

      Alternative Proxy

      pFad Proxy

      pFad v3 Proxy

      pFad v4 Proxy