qbraid-cli 0.12.0a2__tar.gz → 0.12.0a4__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.
- {qbraid_cli-0.12.0a2/qbraid_cli.egg-info → qbraid_cli-0.12.0a4}/PKG-INFO +1 -1
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/pyproject.toml +1 -1
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/account/app.py +2 -2
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/devices/app.py +42 -28
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/devices/validation.py +6 -2
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/envs/app.py +739 -93
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/jobs/app.py +58 -34
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4/qbraid_cli.egg-info}/PKG-INFO +1 -1
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/LICENSE +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/README.md +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/__init__.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/_version.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/account/__init__.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/admin/__init__.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/admin/app.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/admin/headers.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/admin/validation.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/chat/__init__.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/chat/app.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/configure/__init__.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/configure/actions.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/configure/app.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/configure/claude_config.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/devices/__init__.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/envs/__init__.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/envs/activate.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/envs/create.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/envs/data_handling.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/exceptions.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/files/__init__.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/files/app.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/handlers.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/jobs/__init__.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/jobs/toggle_braket.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/jobs/validation.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/kernels/__init__.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/kernels/app.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/main.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/mcp/__init__.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/mcp/app.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/mcp/serve.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/pip/__init__.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/pip/app.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/pip/hooks.py +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli/py.typed +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli.egg-info/SOURCES.txt +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli.egg-info/dependency_links.txt +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli.egg-info/entry_points.txt +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli.egg-info/requires.txt +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/qbraid_cli.egg-info/top_level.txt +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/setup.cfg +0 -0
- {qbraid_cli-0.12.0a2 → qbraid_cli-0.12.0a4}/tests/test_version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: qbraid-cli
|
|
3
|
-
Version: 0.12.
|
|
3
|
+
Version: 0.12.0a4
|
|
4
4
|
Summary: Command Line Interface for interacting with all parts of the qBraid platform.
|
|
5
5
|
Author-email: qBraid Development Team <contact@qbraid.com>
|
|
6
6
|
License-Expression: LicenseRef-Proprietary
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "qbraid-cli"
|
|
7
|
-
version = "0.12.
|
|
7
|
+
version = "0.12.0a4"
|
|
8
8
|
description = "Command Line Interface for interacting with all parts of the qBraid platform."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
authors = [{ name = "qBraid Development Team", email = "contact@qbraid.com" }]
|
|
@@ -22,9 +22,9 @@ def account_credits():
|
|
|
22
22
|
"""Get number of qBraid credits remaining."""
|
|
23
23
|
|
|
24
24
|
def get_credits() -> float:
|
|
25
|
-
from qbraid_core import
|
|
25
|
+
from qbraid_core.client import QbraidClientV1
|
|
26
26
|
|
|
27
|
-
client =
|
|
27
|
+
client = QbraidClientV1()
|
|
28
28
|
return client.user_credits_value()
|
|
29
29
|
|
|
30
30
|
qbraid_credits: float = run_progress_task(get_credits)
|
|
@@ -6,7 +6,7 @@ Module defining commands in the 'qbraid devices' namespace.
|
|
|
6
6
|
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
|
-
from typing import Any,
|
|
9
|
+
from typing import Any, Optional
|
|
10
10
|
|
|
11
11
|
import typer
|
|
12
12
|
from rich.console import Console
|
|
@@ -18,9 +18,13 @@ devices_app = typer.Typer(help="Manage qBraid quantum devices.", no_args_is_help
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
@devices_app.command(name="list")
|
|
21
|
-
def devices_list(
|
|
21
|
+
def devices_list(
|
|
22
22
|
status: Optional[str] = typer.Option(
|
|
23
|
-
None,
|
|
23
|
+
None,
|
|
24
|
+
"--status",
|
|
25
|
+
"-s",
|
|
26
|
+
help="'ONLINE'|'OFFLINE'|'UNAVAILABLE'|'RETIRED'",
|
|
27
|
+
callback=validate_status,
|
|
24
28
|
),
|
|
25
29
|
device_type: Optional[str] = typer.Option(
|
|
26
30
|
None, "--type", "-t", help="'QPU'|'SIMULATOR'", callback=validate_type
|
|
@@ -37,51 +41,58 @@ def devices_list( # pylint: disable=too-many-branches
|
|
|
37
41
|
),
|
|
38
42
|
) -> None:
|
|
39
43
|
"""List qBraid quantum devices."""
|
|
40
|
-
filters = {}
|
|
41
|
-
if status:
|
|
42
|
-
filters["status"] = status
|
|
43
|
-
if device_type:
|
|
44
|
-
filters["type"] = "Simulator" if device_type == "SIMULATOR" else device_type
|
|
45
|
-
if provider:
|
|
46
|
-
filters["provider"] = provider
|
|
47
44
|
|
|
48
|
-
def
|
|
49
|
-
from qbraid_core.services.
|
|
45
|
+
def fetch_devices():
|
|
46
|
+
from qbraid_core.services.runtime import QuantumRuntimeClient
|
|
50
47
|
|
|
51
|
-
client =
|
|
48
|
+
client = QuantumRuntimeClient()
|
|
49
|
+
return client.list_devices()
|
|
52
50
|
|
|
53
|
-
|
|
51
|
+
devices = run_progress_task(fetch_devices)
|
|
54
52
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
53
|
+
# Apply filters (client returns all devices, we filter locally)
|
|
54
|
+
if status:
|
|
55
|
+
devices = [d for d in devices if d.status.value == status]
|
|
56
|
+
if device_type:
|
|
57
|
+
devices = [d for d in devices if d.deviceType == device_type]
|
|
58
|
+
if provider:
|
|
59
|
+
devices = [d for d in devices if d.vendor.lower() == provider.lower()]
|
|
59
60
|
|
|
60
61
|
console = Console()
|
|
61
|
-
header_1 = "
|
|
62
|
+
header_1 = "Vendor"
|
|
62
63
|
header_2 = "Device Name"
|
|
63
|
-
header_3 = "
|
|
64
|
+
header_3 = "QRN"
|
|
64
65
|
header_4 = "Status"
|
|
65
66
|
console.print(
|
|
66
|
-
f"[bold]{header_1.ljust(12)}{header_2.ljust(35)}{header_3.ljust(
|
|
67
|
+
f"[bold]{header_1.ljust(12)}{header_2.ljust(35)}{header_3.ljust(50)}{header_4}[/bold]"
|
|
67
68
|
)
|
|
68
|
-
|
|
69
|
+
|
|
70
|
+
for device in devices:
|
|
71
|
+
device_status = device.status.value
|
|
69
72
|
if device_status == "ONLINE":
|
|
70
73
|
status_color = "green"
|
|
71
74
|
elif device_status == "OFFLINE":
|
|
72
75
|
status_color = "red"
|
|
76
|
+
elif device_status == "UNAVAILABLE":
|
|
77
|
+
status_color = "yellow"
|
|
73
78
|
else:
|
|
74
79
|
status_color = "grey"
|
|
80
|
+
|
|
81
|
+
# Truncate long names/qrns for display
|
|
82
|
+
name = device.name[:33] + ".." if len(device.name) > 35 else device.name
|
|
83
|
+
qrn = device.qrn[:48] + ".." if len(device.qrn) > 50 else device.qrn
|
|
84
|
+
|
|
75
85
|
console.print(
|
|
76
|
-
f"{
|
|
86
|
+
f"{device.vendor.ljust(12)}{name.ljust(35)}{qrn.ljust(50)}",
|
|
77
87
|
f"[{status_color}]{device_status}[/{status_color}]",
|
|
78
88
|
)
|
|
79
|
-
|
|
89
|
+
|
|
90
|
+
console.print(f"\n[italic]Displaying {len(devices)} devices[/italic]")
|
|
80
91
|
|
|
81
92
|
|
|
82
93
|
@devices_app.command(name="get")
|
|
83
94
|
def devices_get(
|
|
84
|
-
device_id: str = typer.Argument(..., help="The ID of the device to get."),
|
|
95
|
+
device_id: str = typer.Argument(..., help="The QRN or ID of the device to get."),
|
|
85
96
|
fmt: bool = typer.Option(
|
|
86
97
|
True, "--no-fmt", help="Disable rich console formatting (output raw data)"
|
|
87
98
|
),
|
|
@@ -89,12 +100,15 @@ def devices_get(
|
|
|
89
100
|
"""Get a qBraid quantum device."""
|
|
90
101
|
|
|
91
102
|
def get_device():
|
|
92
|
-
from qbraid_core.services.
|
|
103
|
+
from qbraid_core.services.runtime import QuantumRuntimeClient
|
|
93
104
|
|
|
94
|
-
client =
|
|
105
|
+
client = QuantumRuntimeClient()
|
|
95
106
|
return client.get_device(device_id)
|
|
96
107
|
|
|
97
|
-
|
|
108
|
+
device = run_progress_task(get_device)
|
|
109
|
+
|
|
110
|
+
# Convert Pydantic model to dict for display
|
|
111
|
+
data: dict[str, Any] = device.model_dump()
|
|
98
112
|
|
|
99
113
|
print_formatted_data(data, fmt)
|
|
100
114
|
|
|
@@ -13,7 +13,7 @@ from qbraid_cli.handlers import validate_item
|
|
|
13
13
|
|
|
14
14
|
def validate_status(value: Optional[str]) -> Union[str, None]:
|
|
15
15
|
"""Validate device status query parameter."""
|
|
16
|
-
return validate_item(value, ["ONLINE", "OFFLINE", "RETIRED"], "Status")
|
|
16
|
+
return validate_item(value, ["ONLINE", "OFFLINE", "UNAVAILABLE", "RETIRED"], "Status")
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
def validate_type(value: Optional[str]) -> Union[str, None]:
|
|
@@ -23,4 +23,8 @@ def validate_type(value: Optional[str]) -> Union[str, None]:
|
|
|
23
23
|
|
|
24
24
|
def validate_provider(value: Optional[str]) -> Union[str, None]:
|
|
25
25
|
"""Validate device provider query parameter."""
|
|
26
|
-
return validate_item(
|
|
26
|
+
return validate_item(
|
|
27
|
+
value,
|
|
28
|
+
["aws", "azure", "ibm", "ionq", "qbraid"],
|
|
29
|
+
"Provider",
|
|
30
|
+
)
|