mirror of
https://github.com/x1xhlol/system-prompts-and-models-of-ai-tools.git
synced 2026-06-18 15:29:36 +00:00
96 lines
3.3 KiB
Python
96 lines
3.3 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
بوابة إطلاق موحّدة: pytest كامل ثم (اختياري) فحوص HTTP ضد خادم حي.
|
|
|
|
1) دائماً: تشغيل كل اختبارات backend/tests (واقعية عبر ASGI، بدون خادم).
|
|
2) اختياري --live-http: يتصل بـ DEALIX_BASE_URL (يشغّل uvicorn أولاً).
|
|
|
|
أمثلة:
|
|
py scripts/launch_gate_runner.py
|
|
py scripts/launch_gate_runner.py -- -m launch -q
|
|
py scripts/launch_gate_runner.py --live-http --soft-ready
|
|
$env:DEALIX_BASE_URL="http://127.0.0.1:8000"; py scripts/launch_gate_runner.py --live-http --quick-http
|
|
|
|
أخطاء شائعة (PowerShell):
|
|
- أنت بالفعل داخل ...\\salesflow-saas\\backend فلا تستخدم cd salesflow-saas\\backend.
|
|
- npm و Playwright من مجلد frontend: cd ..\\frontend ثم npm run test:e2e
|
|
- لا تدمج أمرين: py -m pytest ... --tb=line ثم سطر جديد py scripts/...
|
|
(بدون مسافة تصبح --tb=linepy وتفشل pytest)
|
|
- --live-http يفشل إن لم يكن uvicorn شغّال على DEALIX_BASE_URL (افتراضي :8000).
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import subprocess
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
BACKEND = Path(__file__).resolve().parent.parent
|
|
|
|
|
|
def _pytest(extra_args: list[str]) -> int:
|
|
cmd = [sys.executable, "-m", "pytest", str(BACKEND / "tests"), "--tb=short", *extra_args]
|
|
print("Running:", " ".join(cmd), flush=True)
|
|
return subprocess.call(cmd, cwd=str(BACKEND))
|
|
|
|
|
|
def _live_http(soft_ready: bool, quick: bool) -> int:
|
|
script = BACKEND / "scripts" / "full_stack_launch_test.py"
|
|
cmd = [sys.executable, str(script), "--http-only"]
|
|
if soft_ready:
|
|
cmd.append("--soft-ready")
|
|
if quick:
|
|
cmd.append("--quick")
|
|
print("Running live HTTP:", " ".join(cmd), flush=True)
|
|
return subprocess.call(cmd, cwd=str(BACKEND))
|
|
|
|
|
|
def main() -> int:
|
|
argv = sys.argv[1:]
|
|
pytest_extra: list[str] = []
|
|
if "--" in argv:
|
|
sep = argv.index("--")
|
|
pytest_extra = [x for x in argv[sep + 1 :] if x != "--"]
|
|
argv = argv[:sep]
|
|
|
|
p = argparse.ArgumentParser(description="Dealix launch gate: pytest + optional live HTTP smoke")
|
|
p.add_argument(
|
|
"--live-http",
|
|
action="store_true",
|
|
help="After pytest, run full_stack_launch_test against DEALIX_BASE_URL (start uvicorn first)",
|
|
)
|
|
p.add_argument(
|
|
"--soft-ready",
|
|
action="store_true",
|
|
help="Pass --soft-ready to HTTP script (/ready DB may fail locally)",
|
|
)
|
|
p.add_argument(
|
|
"--quick-http",
|
|
action="store_true",
|
|
help="Pass --quick to HTTP script (skip slow LangGraph POST)",
|
|
)
|
|
args = p.parse_args(argv)
|
|
|
|
extra = pytest_extra if pytest_extra else ["-q"]
|
|
rc = _pytest(extra)
|
|
if rc != 0:
|
|
print("pytest FAILED — fix tests before launch.", flush=True)
|
|
return rc
|
|
|
|
print("pytest OK.", flush=True)
|
|
|
|
if not args.live_http:
|
|
print(
|
|
"Live HTTP skipped. Start API then run:\n"
|
|
f" py scripts/full_stack_launch_test.py --http-only\n"
|
|
f"Or: py scripts/launch_gate_runner.py --live-http --soft-ready",
|
|
flush=True,
|
|
)
|
|
return 0
|
|
|
|
return _live_http(args.soft_ready, args.quick_http)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|