Skip to content

Commit 0feb3b5

Browse files
committed
Add example workflows
1 parent 5792a6f commit 0feb3b5

4 files changed

Lines changed: 113 additions & 1 deletion

File tree

.editorconfig

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@ insert_final_newline = true
99
max_line_length = 88
1010
trim_trailing_whitespace = true
1111

12-
[{*.md,*.yml}]
12+
[*.{md,yml}]
1313
indent_size = 2

examples/run_workflow.py

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
"""Helper script to dispatch workflows."""
2+
from argparse import ArgumentParser, FileType
3+
from metafold import MetafoldClient
4+
import json
5+
import os
6+
import sys
7+
8+
9+
def main():
10+
parser = ArgumentParser(description="Run workflow from YAML definition")
11+
parser.add_argument(
12+
"workflow", nargs="?",
13+
type=FileType("r"), default=sys.stdin, help="workflow definition")
14+
15+
parser.add_argument("--assets", help="workflow asset mapping")
16+
parser.add_argument("--params", help="workflow parameter mapping")
17+
18+
parser.add_argument(
19+
"--asset-uploads", nargs="*",
20+
type=FileType("rb"), help="assets to upload before dispatch")
21+
22+
project_id = os.environ.get("METAFOLD_PROJECT_ID")
23+
parser.add_argument("-p", "--project-id", default=project_id)
24+
25+
client_id = os.environ.get("METAFOLD_CLIENT_ID")
26+
parser.add_argument("--client-id", default=client_id)
27+
28+
client_secret = os.environ.get("METAFOLD_CLIENT_SECRET")
29+
parser.add_argument("--client-secret", default=client_secret)
30+
31+
auth_domain = os.environ.get("METAFOLD_AUTH_DOMAIN", "metafold3d.us.auth0.com")
32+
parser.add_argument("--auth-domain", default=auth_domain)
33+
34+
base_url = os.environ.get("METAFOLD_BASE_URL", "https://api.metafold3d.com/")
35+
parser.add_argument("--base-url", default=base_url)
36+
37+
args = parser.parse_args()
38+
39+
if not args.project_id:
40+
parser.error("project id is required")
41+
if not args.client_id:
42+
parser.error("client id is required")
43+
if not args.client_secret:
44+
parser.error("client secret is required")
45+
46+
assets = None
47+
if args.assets:
48+
assets = json.loads(args.assets)
49+
50+
params = None
51+
if args.params:
52+
params = json.loads(args.params)
53+
54+
m = MetafoldClient(
55+
project_id=args.project_id,
56+
client_id=args.client_id,
57+
client_secret=args.client_secret,
58+
auth_domain=args.auth_domain,
59+
base_url=args.base_url)
60+
61+
if args.asset_uploads:
62+
print("Uploading assets…")
63+
for f in args.asset_uploads:
64+
m.assets.create(f)
65+
66+
print("Running workflow…")
67+
definition = args.workflow.read()
68+
w = m.workflows.run(definition, assets=assets, parameters=params)
69+
70+
print(f"Workflow completed: {w.state}")
71+
72+
if w.state == "failure":
73+
for job_id in w.jobs:
74+
j = m.jobs.get(job_id)
75+
if j.state == "failure":
76+
print(f"Job {j.id} failed: {j.error}")
77+
78+
return 0
79+
80+
81+
if __name__ == "__main__":
82+
sys.exit(main())

workflows/export-mesh.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
---
2+
jobs:
3+
evaluate-graph:
4+
type: implicit/evaluate
5+
export-mesh:
6+
type: mesh/from-volume
7+
needs:
8+
- evaluate-graph
9+
assets:
10+
volume: evaluate-graph
11+
...

workflows/sample-mesh.yml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
---
2+
jobs:
3+
preprocess-mesh:
4+
type: mesh/preprocess
5+
compute-bvh:
6+
type: mesh/compute-bvh
7+
needs:
8+
- preprocess-mesh
9+
assets:
10+
mesh: preprocess-mesh
11+
sample-mesh:
12+
type: implicit/from-mesh
13+
needs:
14+
- preprocess-mesh
15+
- compute-bvh
16+
assets:
17+
mesh: preprocess-mesh
18+
bvh: compute-bvh
19+
...

0 commit comments

Comments
 (0)