deepctl-cmd-requests 0.0.2__tar.gz → 0.5.0__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.
- {deepctl_cmd_requests-0.0.2 → deepctl_cmd_requests-0.5.0}/PKG-INFO +9 -8
- {deepctl_cmd_requests-0.0.2 → deepctl_cmd_requests-0.5.0}/README.md +3 -3
- {deepctl_cmd_requests-0.0.2 → deepctl_cmd_requests-0.5.0}/pyproject.toml +10 -5
- {deepctl_cmd_requests-0.0.2 → deepctl_cmd_requests-0.5.0}/src/deepctl_cmd_requests/command.py +50 -34
- {deepctl_cmd_requests-0.0.2 → deepctl_cmd_requests-0.5.0}/src/deepctl_cmd_requests/models.py +10 -0
- {deepctl_cmd_requests-0.0.2 → deepctl_cmd_requests-0.5.0}/src/deepctl_cmd_requests.egg-info/PKG-INFO +9 -8
- deepctl_cmd_requests-0.5.0/src/deepctl_cmd_requests.egg-info/requires.txt +5 -0
- deepctl_cmd_requests-0.0.2/src/deepctl_cmd_requests.egg-info/requires.txt +0 -4
- {deepctl_cmd_requests-0.0.2 → deepctl_cmd_requests-0.5.0}/setup.cfg +0 -0
- {deepctl_cmd_requests-0.0.2 → deepctl_cmd_requests-0.5.0}/src/deepctl_cmd_requests/__init__.py +0 -0
- {deepctl_cmd_requests-0.0.2 → deepctl_cmd_requests-0.5.0}/src/deepctl_cmd_requests.egg-info/SOURCES.txt +0 -0
- {deepctl_cmd_requests-0.0.2 → deepctl_cmd_requests-0.5.0}/src/deepctl_cmd_requests.egg-info/dependency_links.txt +0 -0
- {deepctl_cmd_requests-0.0.2 → deepctl_cmd_requests-0.5.0}/src/deepctl_cmd_requests.egg-info/entry_points.txt +0 -0
- {deepctl_cmd_requests-0.0.2 → deepctl_cmd_requests-0.5.0}/src/deepctl_cmd_requests.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: deepctl-cmd-requests
|
|
3
|
-
Version: 0.0
|
|
3
|
+
Version: 0.5.0
|
|
4
4
|
Summary: Requests history command for deepctl
|
|
5
5
|
Author-email: Deepgram <devrel@deepgram.com>
|
|
6
6
|
Maintainer-email: Deepgram <devrel@deepgram.com>
|
|
@@ -14,10 +14,11 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.12
|
|
15
15
|
Requires-Python: >=3.10
|
|
16
16
|
Description-Content-Type: text/markdown
|
|
17
|
-
Requires-Dist: deepctl
|
|
18
|
-
Requires-Dist:
|
|
19
|
-
Requires-Dist:
|
|
20
|
-
Requires-Dist:
|
|
17
|
+
Requires-Dist: deepctl==0.5.0
|
|
18
|
+
Requires-Dist: deepctl-core==0.5.0
|
|
19
|
+
Requires-Dist: click<9,>=8.2.0
|
|
20
|
+
Requires-Dist: rich<16,>=13.0.0
|
|
21
|
+
Requires-Dist: pydantic<3,>=2.0.0
|
|
21
22
|
|
|
22
23
|
# deepctl-cmd-requests
|
|
23
24
|
|
|
@@ -54,9 +55,9 @@ pipx run deepctl --help
|
|
|
54
55
|
|
|
55
56
|
## Dependencies
|
|
56
57
|
|
|
57
|
-
- `click>=8.
|
|
58
|
-
- `rich>=13.0.0`
|
|
59
|
-
- `pydantic>=2.0.0`
|
|
58
|
+
- `click>=8.2.0,<9`
|
|
59
|
+
- `rich>=13.0.0,<16`
|
|
60
|
+
- `pydantic>=2.0.0,<3`
|
|
60
61
|
|
|
61
62
|
## License
|
|
62
63
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "deepctl-cmd-requests"
|
|
7
|
-
version = "0.0
|
|
7
|
+
version = "0.5.0" # x-release-please-version
|
|
8
8
|
description = "Requests history command for deepctl"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
@@ -21,10 +21,11 @@ classifiers = [
|
|
|
21
21
|
keywords = ["deepgram", "cli", "requests", "history"]
|
|
22
22
|
requires-python = ">=3.10"
|
|
23
23
|
dependencies = [
|
|
24
|
-
"deepctl
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
24
|
+
"deepctl==0.5.0", # x-release-please-version
|
|
25
|
+
"deepctl-core==0.5.0", # x-release-please-version
|
|
26
|
+
"click>=8.2.0,<9",
|
|
27
|
+
"rich>=13.0.0,<16",
|
|
28
|
+
"pydantic>=2.0.0,<3",
|
|
28
29
|
]
|
|
29
30
|
|
|
30
31
|
[project.scripts]
|
|
@@ -38,3 +39,7 @@ package-dir = { "" = "src" }
|
|
|
38
39
|
[tool.setuptools.packages.find]
|
|
39
40
|
where = ["src"]
|
|
40
41
|
include = ["deepctl_cmd_requests*"]
|
|
42
|
+
|
|
43
|
+
[tool.uv.sources]
|
|
44
|
+
deepctl = { workspace = true }
|
|
45
|
+
deepctl-core = { workspace = true }
|
{deepctl_cmd_requests-0.0.2 → deepctl_cmd_requests-0.5.0}/src/deepctl_cmd_requests/command.py
RENAMED
|
@@ -11,13 +11,18 @@ from deepctl_core import (
|
|
|
11
11
|
BaseResult,
|
|
12
12
|
Config,
|
|
13
13
|
DeepgramClient,
|
|
14
|
+
get_output_format,
|
|
15
|
+
get_status_console,
|
|
14
16
|
)
|
|
15
17
|
from rich.console import Console
|
|
16
18
|
from rich.table import Table
|
|
17
19
|
|
|
18
|
-
from .models import RequestInfo, RequestsResult
|
|
20
|
+
from .models import RequestDetailResult, RequestInfo, RequestsResult
|
|
19
21
|
|
|
20
22
|
console = Console()
|
|
23
|
+
# Status/progress chrome must never touch stdout, or it corrupts JSON/CSV
|
|
24
|
+
# output that callers pipe into jq and friends.
|
|
25
|
+
status_console = get_status_console()
|
|
21
26
|
|
|
22
27
|
|
|
23
28
|
class RequestsCommand(BaseCommand):
|
|
@@ -144,7 +149,7 @@ class RequestsCommand(BaseCommand):
|
|
|
144
149
|
last_day=kwargs.get("last_day", False),
|
|
145
150
|
)
|
|
146
151
|
except Exception as e:
|
|
147
|
-
|
|
152
|
+
status_console.print(f"[red]Error:[/red] {e}")
|
|
148
153
|
return BaseResult(status="error", message=str(e))
|
|
149
154
|
|
|
150
155
|
def _list_requests(
|
|
@@ -176,7 +181,7 @@ class RequestsCommand(BaseCommand):
|
|
|
176
181
|
start_dt = datetime.fromisoformat(start_date)
|
|
177
182
|
end_dt = datetime.fromisoformat(end_date) if end_date else datetime.now()
|
|
178
183
|
|
|
179
|
-
|
|
184
|
+
status_console.print("[blue]Fetching request history...[/blue]")
|
|
180
185
|
|
|
181
186
|
result = client.list_requests(
|
|
182
187
|
project_id=project_id,
|
|
@@ -191,18 +196,10 @@ class RequestsCommand(BaseCommand):
|
|
|
191
196
|
|
|
192
197
|
requests_raw = result.get("requests", [])
|
|
193
198
|
if not requests_raw:
|
|
194
|
-
|
|
199
|
+
status_console.print("[yellow]No requests found[/yellow]")
|
|
195
200
|
return RequestsResult(status="info", message="No requests found")
|
|
196
201
|
|
|
197
202
|
req_models: list[RequestInfo] = []
|
|
198
|
-
table = Table(title="API Requests", show_header=True, header_style="bold blue")
|
|
199
|
-
table.add_column("Time", style="dim")
|
|
200
|
-
table.add_column("Endpoint", style="cyan")
|
|
201
|
-
table.add_column("Method")
|
|
202
|
-
table.add_column("Status")
|
|
203
|
-
table.add_column("Duration")
|
|
204
|
-
table.add_column("Request ID", style="dim")
|
|
205
|
-
|
|
206
203
|
for r in requests_raw:
|
|
207
204
|
req_data = (
|
|
208
205
|
r
|
|
@@ -222,20 +219,35 @@ class RequestsCommand(BaseCommand):
|
|
|
222
219
|
)
|
|
223
220
|
req_models.append(info)
|
|
224
221
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
f"{info.duration:.2f}s" if info.duration else "-",
|
|
232
|
-
info.request_id[:12] + "..."
|
|
233
|
-
if len(info.request_id) > 12
|
|
234
|
-
else info.request_id,
|
|
222
|
+
# Render the human table only in default mode. For json/yaml/csv the
|
|
223
|
+
# framework serialises the returned result to stdout, so printing the
|
|
224
|
+
# table here would prepend non-parseable text to that output.
|
|
225
|
+
if get_output_format() == "default":
|
|
226
|
+
table = Table(
|
|
227
|
+
title="API Requests", show_header=True, header_style="bold blue"
|
|
235
228
|
)
|
|
229
|
+
table.add_column("Time", style="dim")
|
|
230
|
+
table.add_column("Endpoint", style="cyan")
|
|
231
|
+
table.add_column("Method")
|
|
232
|
+
table.add_column("Status")
|
|
233
|
+
table.add_column("Duration")
|
|
234
|
+
table.add_column("Request ID", style="dim")
|
|
235
|
+
|
|
236
|
+
for info in req_models:
|
|
237
|
+
status_style = "green" if info.status == "succeeded" else "red"
|
|
238
|
+
table.add_row(
|
|
239
|
+
info.created[:19] if info.created else "-",
|
|
240
|
+
info.path or "-",
|
|
241
|
+
info.method or "-",
|
|
242
|
+
f"[{status_style}]{info.status}[/{status_style}]",
|
|
243
|
+
f"{info.duration:.2f}s" if info.duration else "-",
|
|
244
|
+
info.request_id[:12] + "..."
|
|
245
|
+
if len(info.request_id) > 12
|
|
246
|
+
else info.request_id,
|
|
247
|
+
)
|
|
236
248
|
|
|
237
|
-
|
|
238
|
-
|
|
249
|
+
console.print(table)
|
|
250
|
+
console.print(f"\n[dim]{len(req_models)} request(s) shown[/dim]")
|
|
239
251
|
|
|
240
252
|
return RequestsResult(
|
|
241
253
|
status="success", requests=req_models, count=len(req_models)
|
|
@@ -247,16 +259,20 @@ class RequestsCommand(BaseCommand):
|
|
|
247
259
|
request_id: str,
|
|
248
260
|
project_id: str | None,
|
|
249
261
|
) -> BaseResult:
|
|
250
|
-
|
|
262
|
+
status_console.print(f"[blue]Fetching request details:[/blue] {request_id}")
|
|
251
263
|
result = client.get_request(request_id, project_id=project_id)
|
|
252
264
|
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
265
|
+
if get_output_format() == "default":
|
|
266
|
+
console.print("[green]Request Details:[/green]")
|
|
267
|
+
for key, value in result.items():
|
|
268
|
+
if isinstance(value, dict):
|
|
269
|
+
console.print(f" {key}:")
|
|
270
|
+
for k, v in value.items():
|
|
271
|
+
console.print(f" {k}: {v}")
|
|
272
|
+
else:
|
|
273
|
+
console.print(f" {key}: {value}")
|
|
261
274
|
|
|
262
|
-
return
|
|
275
|
+
return RequestDetailResult(
|
|
276
|
+
status="success",
|
|
277
|
+
detail=dict(result) if isinstance(result, dict) else {"value": result},
|
|
278
|
+
)
|
{deepctl_cmd_requests-0.0.2 → deepctl_cmd_requests-0.5.0}/src/deepctl_cmd_requests/models.py
RENAMED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
5
7
|
from deepctl_core import BaseResult
|
|
6
8
|
from pydantic import BaseModel, Field
|
|
7
9
|
|
|
@@ -18,3 +20,11 @@ class RequestInfo(BaseModel):
|
|
|
18
20
|
class RequestsResult(BaseResult):
|
|
19
21
|
requests: list[RequestInfo] = Field(default_factory=list)
|
|
20
22
|
count: int = 0
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class RequestDetailResult(BaseResult):
|
|
26
|
+
# Returned by `--show`; carries the full request detail so json/yaml
|
|
27
|
+
# output is useful instead of a bare success message. Kept separate from
|
|
28
|
+
# RequestsResult so single-request output doesn't emit an empty
|
|
29
|
+
# `requests: []` / `count: 0` alongside the detail.
|
|
30
|
+
detail: dict[str, Any] = Field(default_factory=dict)
|
{deepctl_cmd_requests-0.0.2 → deepctl_cmd_requests-0.5.0}/src/deepctl_cmd_requests.egg-info/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: deepctl-cmd-requests
|
|
3
|
-
Version: 0.0
|
|
3
|
+
Version: 0.5.0
|
|
4
4
|
Summary: Requests history command for deepctl
|
|
5
5
|
Author-email: Deepgram <devrel@deepgram.com>
|
|
6
6
|
Maintainer-email: Deepgram <devrel@deepgram.com>
|
|
@@ -14,10 +14,11 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.12
|
|
15
15
|
Requires-Python: >=3.10
|
|
16
16
|
Description-Content-Type: text/markdown
|
|
17
|
-
Requires-Dist: deepctl
|
|
18
|
-
Requires-Dist:
|
|
19
|
-
Requires-Dist:
|
|
20
|
-
Requires-Dist:
|
|
17
|
+
Requires-Dist: deepctl==0.5.0
|
|
18
|
+
Requires-Dist: deepctl-core==0.5.0
|
|
19
|
+
Requires-Dist: click<9,>=8.2.0
|
|
20
|
+
Requires-Dist: rich<16,>=13.0.0
|
|
21
|
+
Requires-Dist: pydantic<3,>=2.0.0
|
|
21
22
|
|
|
22
23
|
# deepctl-cmd-requests
|
|
23
24
|
|
|
@@ -54,9 +55,9 @@ pipx run deepctl --help
|
|
|
54
55
|
|
|
55
56
|
## Dependencies
|
|
56
57
|
|
|
57
|
-
- `click>=8.
|
|
58
|
-
- `rich>=13.0.0`
|
|
59
|
-
- `pydantic>=2.0.0`
|
|
58
|
+
- `click>=8.2.0,<9`
|
|
59
|
+
- `rich>=13.0.0,<16`
|
|
60
|
+
- `pydantic>=2.0.0,<3`
|
|
60
61
|
|
|
61
62
|
## License
|
|
62
63
|
|
|
File without changes
|
{deepctl_cmd_requests-0.0.2 → deepctl_cmd_requests-0.5.0}/src/deepctl_cmd_requests/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|