1. Base Action
Actionable — single typed result. Class and function styles.
Source
"""Actionable — single typed result. Class and function styles."""
import asyncio
from fastsprout.core.action import Actionable
from fastsprout.core.fields import Field
from fastsprout.core.schema import BaseSchema
class GreetIn(BaseSchema):
name: Field[str]
class GreetOut(BaseSchema):
message: Field[str]
class Greet(Actionable[GreetIn, GreetOut]):
async def __call__(self, payload: GreetIn, /) -> GreetOut:
return GreetOut(message=f"hello, {payload.name}")
async def greet(payload: GreetIn, /) -> GreetOut:
return GreetOut(message=f"hello, {payload.name}")
async def main() -> None:
payload = GreetIn(name="world")
print(await Greet()(payload))
print(await greet(payload))
if __name__ == "__main__":
asyncio.run(main())