runnable-hub/python/example/process/cli-tool-demo.py (26 lines of code) (raw):
#!/usr/bin/env python3
import asyncio
import os
import sys
import yaml
import json
current_dir = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, os.path.dirname(os.path.dirname(current_dir)))
from runnable_workers.processWorker.worker import Worker as ProcessWorker
from runnable_workers.processWorker.request.processRequest import ProcessRequest
from runnable_workers.jinjaWorker.worker import Worker as JinjaWorker
from runnable_workers.apiWorker.worker import Worker as ApiWorker
from runnable_hub import RunnableHub
from runnable_hub.store import RunnableLocalFileStore
requestYaml = """
outputs: ${{ jobs.call.outputs }}
jobs:
call:
outputs: ${{ steps.result.outputs }}
steps:
- id: setting
jinja:
data:
input:
domain: baidu.com
outputLoads: JSON
template: |
{
"url": "https://cloudflare-dns.com/dns-query",
"method": "GET",
"headers":{
"Accept": "application/dns-json"
},
"outputLoads": "JSON",
"params":{
"name": "{{ input.domain }}",
"type": "A"
}
}
- id: call
api: ${{ steps.setting.outputs }}
- id: result
jinja:
data:
result: ${{ steps.call.outputs }}
outputLoads: TEXT
template: |
{{result.Answer[0].data}}
"""
async def main():
runnableHub = RunnableHub(store=RunnableLocalFileStore("/tmp/"))
runnableHub.registerWorker(ProcessWorker())
runnableHub.registerWorker(ApiWorker())
runnableHub.registerWorker(JinjaWorker())
print(runnableHub.workers)
runnableContext = await runnableHub.executeStart(
ProcessRequest.model_validate_json(json.dumps(yaml.safe_load(requestYaml))))
runnableContext = await runnableHub.executeWait(runnableContext)
print(json.dumps(json.loads(runnableContext.model_dump_json()), indent=4))
if __name__ == "__main__":
asyncio.run(main())