trap-cli 0.0.5__tar.gz → 0.0.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {trap_cli-0.0.5 → trap_cli-0.0.6}/PKG-INFO +1 -1
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/_version.py +2 -2
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/auth/client.py +10 -1
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/display/submit.py +7 -4
- {trap_cli-0.0.5 → trap_cli-0.0.6}/.gitignore +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/LICENSE +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/README.md +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/examples/echo/task/README.md +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/pyproject.toml +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/__init__.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/auth/__init__.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/auth/login.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/auth/oauth.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/auth/store.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/cli/__init__.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/cli/_auth.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/cli/_console.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/cost/__init__.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/cost/calculator.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/cost/providers.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/cost/proxy.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/display/__init__.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/display/progress.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/environment/__init__.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/environment/detector.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/git_ops/__init__.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/git_ops/base.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/git_ops/local.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/git_ops/remote.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/git_ops/rev.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/git_ops/url.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/loader/__init__.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/loader/errors.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/loader/trap_yaml.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/loader/traptask_yaml.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/models/__init__.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/models/cost.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/models/environment.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/models/provenance.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/models/report.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/models/results.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/models/trap_yaml.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/models/traptask_yaml.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/report/__init__.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/report/base.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/report/handle.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/report/json.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/report/rich.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/runner/__init__.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/runner/capture.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/runner/grader.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/runner/judge.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/runner/layout.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/runner/proc.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/runner/solution.py +0 -0
- {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/runner/task.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: trap-cli
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.6
|
|
4
4
|
Summary: tp — non-invasive CLI testing framework for AI workflows. Submits results to trapstreet.run.
|
|
5
5
|
Project-URL: Homepage, https://trapstreet.run
|
|
6
6
|
Project-URL: Repository, https://github.com/trapstreet/trap
|
|
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
|
|
|
18
18
|
commit_id: str | None
|
|
19
19
|
__commit_id__: str | None
|
|
20
20
|
|
|
21
|
-
__version__ = version = '0.0.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 0,
|
|
21
|
+
__version__ = version = '0.0.6'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 0, 6)
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -52,6 +52,15 @@ class ApiClient:
|
|
|
52
52
|
resp.raise_for_status()
|
|
53
53
|
return resp.json()
|
|
54
54
|
except httpx.HTTPStatusError as e:
|
|
55
|
-
raise ApiError(f"http {e.response.status_code}: {e.response
|
|
55
|
+
raise ApiError(f"http {e.response.status_code}: {_error_detail(e.response)}") from None
|
|
56
56
|
except httpx.RequestError as e:
|
|
57
57
|
raise ApiError(f"connection error: {e}") from None
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def _error_detail(resp: httpx.Response) -> str:
|
|
61
|
+
"""The server's JSON {error} message when present, else the raw body text."""
|
|
62
|
+
try:
|
|
63
|
+
error = resp.json().get("error")
|
|
64
|
+
except (ValueError, AttributeError):
|
|
65
|
+
return resp.text
|
|
66
|
+
return str(error) if error else resp.text
|
|
@@ -7,14 +7,17 @@ console = Console()
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
def render_submit_result(resp_data: dict) -> None:
|
|
10
|
+
"""Render a successful POST /api/submit response: {run: {id}, view_url}.
|
|
11
|
+
|
|
12
|
+
Success is decided by the HTTP status alone (ApiClient.submit raises on
|
|
13
|
+
non-2xx), so this only confirms the upload and points at the run page —
|
|
14
|
+
scores and case detail live there, not in the response."""
|
|
10
15
|
run_obj = resp_data.get("run") or {}
|
|
11
|
-
|
|
16
|
+
console.print("[green]✓ submitted[/green]")
|
|
12
17
|
table = Table.grid(padding=(0, 2))
|
|
13
18
|
table.add_column(style="dim")
|
|
14
19
|
table.add_column()
|
|
15
|
-
table.add_row("
|
|
16
|
-
table.add_row("run", f"[bold]{run_obj.get('id', '?')}[/bold]")
|
|
17
|
-
table.add_row("score", f"[cyan]{run_obj.get('total_score')}[/cyan]")
|
|
20
|
+
table.add_row("run_id", f"[bold]{run_obj.get('id', '?')}[/bold]")
|
|
18
21
|
if view_url := resp_data.get("view_url"):
|
|
19
22
|
table.add_row("url", f"[link={view_url}]{view_url}[/link]")
|
|
20
23
|
console.print(table)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|