mirror of
https://github.com/hatchet-dev/hatchet.git
synced 2026-01-04 23:59:49 -06:00
* fix: version * feat: first pass at new base rest client * fix: typing * fix: base client cleanup * feat: basic runs client * fix: finally!! * feat: helper functions for uuid and metadata conversion and api format fix * fix: patches * feat: run list apis * feat: add bulk replay and cancel * feat: replays and cancels * feat: result getter * feat: cron client * feat: scheduled workflows * feat: rate limit * refactor: don't export admin client anymore * feat: add a bunch more clients and remove the old `rest` thing * fix: scheduled workflow trigger time * fix: emptymodel default * refactor: stop passing pooled workflow run listener around everywhere * fix: more cleanup of context * refactor: remove unused stuff from runner * unwind: keep passing listeners around * fix: rm some unused stuff * fix: example * feat: metrics api * feat: a couple tests * feat: more default emptymodels * fix: tests * [Docs]: Misc. Python Migration Guide Issues, Rate limits, V1 new features (#1417) * fix: misc python migration guide * feat: rate limits docs * fix: lint * fix: lint * feat: skeleton * feat: add a bunch of docs * feat: bulk replay and cancel docs * fix: add task output to example * fix: otel docs + naming * fix: lint * fix: rm timeout * feat: initial python sdk guide * fix: raise on dupe on failure or on success * fix: dags docs * feat: 1.0.1
61 lines
1.4 KiB
Python
61 lines
1.4 KiB
Python
from datetime import timedelta
|
|
from typing import Any
|
|
|
|
from pydantic import BaseModel
|
|
|
|
from hatchet_sdk import Context, Hatchet, TriggerWorkflowOptions
|
|
|
|
hatchet = Hatchet(debug=True)
|
|
|
|
|
|
class ParentInput(BaseModel):
|
|
n: int = 5
|
|
|
|
|
|
class ChildInput(BaseModel):
|
|
a: str
|
|
|
|
|
|
sync_fanout_parent = hatchet.workflow(
|
|
name="SyncFanoutParent", input_validator=ParentInput
|
|
)
|
|
sync_fanout_child = hatchet.workflow(name="SyncFanoutChild", input_validator=ChildInput)
|
|
|
|
|
|
@sync_fanout_parent.task(execution_timeout=timedelta(minutes=5))
|
|
def spawn(input: ParentInput, ctx: Context) -> dict[str, list[dict[str, Any]]]:
|
|
print("spawning child")
|
|
|
|
results = sync_fanout_child.run_many(
|
|
[
|
|
sync_fanout_child.create_bulk_run_item(
|
|
input=ChildInput(a=str(i)),
|
|
key=f"child{i}",
|
|
options=TriggerWorkflowOptions(additional_metadata={"hello": "earth"}),
|
|
)
|
|
for i in range(input.n)
|
|
],
|
|
)
|
|
|
|
print(f"results {results}")
|
|
|
|
return {"results": results}
|
|
|
|
|
|
@sync_fanout_child.task()
|
|
def process(input: ChildInput, ctx: Context) -> dict[str, str]:
|
|
return {"status": "success " + input.a}
|
|
|
|
|
|
def main() -> None:
|
|
worker = hatchet.worker(
|
|
"sync-fanout-worker",
|
|
slots=40,
|
|
workflows=[sync_fanout_parent, sync_fanout_child],
|
|
)
|
|
worker.start()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|