Open
Description
Consider main.py
:
from __future__ import annotations
import functions_framework
import flask
class HelloRequest:
name: str
def __init__(self, name: str) -> None:
self.name = name
@classmethod
def from_dict(cls, d: dict) -> HellowRequest:
return cls(**d)
def to_dict(self) -> dict:
return self.__dict__
@functions_framework.typed
def hello(hr: HelloRequest) -> flask.typing.ResponseReturnValue:
return f"Hello, {hr.name}"
Running import main
yields:
input_type=HelloRequest, type(input_type)=<class 'str'>
Traceback (most recent call last):
File "/home/....venv/lib/python3.11/site-packages/functions_framework/_typed_event.py", line 37, in register_typed_event
_validate_input_type(input_type)
File "/home/.../.venv/lib/python3.11/site-packages/functions_framework/_typed_event.py", line 103, in _validate_input_type
raise AttributeError(
AttributeError: The type HelloRequest does not have the required method called 'from_dict'.
The culprit is from __future__ import annotations
, which is required to annotate from_dict
properly.
The issue is here where inspect.signature
will return annotations as strings (by default) if they are postponed.
The suggested solution is to pass eval_str=True
when calling inspect.signature
.