53 lines
1.5 KiB
Python
53 lines
1.5 KiB
Python
"""Import a flow from Langflow into our backend via the running API.
|
|
|
|
Usage:
|
|
uv run python scripts/deploy_flow.py --api http://localhost:8000 \\
|
|
--langflow-id <uuid> [--name my-flow] [--author jane] [--no-deploy]
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import json
|
|
import sys
|
|
|
|
import httpx
|
|
|
|
|
|
def post(api: str, path: str, body: dict) -> dict:
|
|
try:
|
|
response = httpx.post(api.rstrip("/") + path, json=body, timeout=60.0)
|
|
try:
|
|
payload = response.json()
|
|
except ValueError:
|
|
payload = response.text[:2000]
|
|
return {"status": response.status_code, "body": payload}
|
|
except httpx.HTTPError as exc:
|
|
return {"status": 0, "body": str(exc)[:2000]}
|
|
|
|
|
|
def main() -> int:
|
|
parser = argparse.ArgumentParser(description=__doc__)
|
|
parser.add_argument("--api", default="http://localhost:8000")
|
|
parser.add_argument("--langflow-id", required=True)
|
|
parser.add_argument("--name", default=None)
|
|
parser.add_argument("--author", default="")
|
|
parser.add_argument("--no-deploy", action="store_true")
|
|
args = parser.parse_args()
|
|
|
|
result = post(
|
|
args.api,
|
|
"/api/flows/import",
|
|
{
|
|
"langflow_flow_id": args.langflow_id,
|
|
"name": args.name,
|
|
"author": args.author,
|
|
"deploy": not args.no_deploy,
|
|
},
|
|
)
|
|
print(json.dumps(result, indent=2, ensure_ascii=False))
|
|
return 0 if result["status"] in (200, 201) else 1
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|