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.
Files changed (56) hide show
  1. {trap_cli-0.0.5 → trap_cli-0.0.6}/PKG-INFO +1 -1
  2. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/_version.py +2 -2
  3. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/auth/client.py +10 -1
  4. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/display/submit.py +7 -4
  5. {trap_cli-0.0.5 → trap_cli-0.0.6}/.gitignore +0 -0
  6. {trap_cli-0.0.5 → trap_cli-0.0.6}/LICENSE +0 -0
  7. {trap_cli-0.0.5 → trap_cli-0.0.6}/README.md +0 -0
  8. {trap_cli-0.0.5 → trap_cli-0.0.6}/examples/echo/task/README.md +0 -0
  9. {trap_cli-0.0.5 → trap_cli-0.0.6}/pyproject.toml +0 -0
  10. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/__init__.py +0 -0
  11. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/auth/__init__.py +0 -0
  12. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/auth/login.py +0 -0
  13. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/auth/oauth.py +0 -0
  14. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/auth/store.py +0 -0
  15. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/cli/__init__.py +0 -0
  16. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/cli/_auth.py +0 -0
  17. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/cli/_console.py +0 -0
  18. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/cost/__init__.py +0 -0
  19. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/cost/calculator.py +0 -0
  20. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/cost/providers.py +0 -0
  21. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/cost/proxy.py +0 -0
  22. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/display/__init__.py +0 -0
  23. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/display/progress.py +0 -0
  24. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/environment/__init__.py +0 -0
  25. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/environment/detector.py +0 -0
  26. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/git_ops/__init__.py +0 -0
  27. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/git_ops/base.py +0 -0
  28. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/git_ops/local.py +0 -0
  29. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/git_ops/remote.py +0 -0
  30. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/git_ops/rev.py +0 -0
  31. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/git_ops/url.py +0 -0
  32. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/loader/__init__.py +0 -0
  33. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/loader/errors.py +0 -0
  34. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/loader/trap_yaml.py +0 -0
  35. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/loader/traptask_yaml.py +0 -0
  36. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/models/__init__.py +0 -0
  37. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/models/cost.py +0 -0
  38. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/models/environment.py +0 -0
  39. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/models/provenance.py +0 -0
  40. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/models/report.py +0 -0
  41. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/models/results.py +0 -0
  42. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/models/trap_yaml.py +0 -0
  43. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/models/traptask_yaml.py +0 -0
  44. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/report/__init__.py +0 -0
  45. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/report/base.py +0 -0
  46. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/report/handle.py +0 -0
  47. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/report/json.py +0 -0
  48. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/report/rich.py +0 -0
  49. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/runner/__init__.py +0 -0
  50. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/runner/capture.py +0 -0
  51. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/runner/grader.py +0 -0
  52. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/runner/judge.py +0 -0
  53. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/runner/layout.py +0 -0
  54. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/runner/proc.py +0 -0
  55. {trap_cli-0.0.5 → trap_cli-0.0.6}/src/trap/runner/solution.py +0 -0
  56. {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.5
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.5'
22
- __version_tuple__ = version_tuple = (0, 0, 5)
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.text}") from None
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
- passed = run_obj.get("passed")
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("status", "[green] passed[/green]" if passed else "[red]✗ failed[/red]")
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