Mehdi Lallouache
03/25/2026, 9:11 AMMarvin
03/25/2026, 9:11 AMMarvin
03/25/2026, 9:13 AMfrom typing import Literal
from prefect import flow
@flow
def my_flow(env: Literal["dev", "staging", "prod"] = "dev"):
print(env)
- With an Enum (handy if you want a named type):
from enum import Enum
from prefect import flow
class Env(str, Enum):
dev = "dev"
staging = "staging"
prod = "prod"
@flow
def my_flow(env: Env = Env.dev):
print(env)
- If you want labels/descriptions or multiple constrained fields, use a Pydantic model:
from typing import Literal
from pydantic import BaseModel, Field
from prefect import flow
class Params(BaseModel):
env: Literal["dev", "staging", "prod"] = Field(
default="dev", description="Target environment"
)
@flow
def my_flow(params: Params):
print(params.env)
Tip: After changing the allowed values, redeploy so the UI form updates.
Docs: Form-building in Prefect 3