qbraid-cli 0.10.5__py3-none-any.whl → 0.10.7__py3-none-any.whl
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.
Potentially problematic release.
This version of qbraid-cli might be problematic. Click here for more details.
- qbraid_cli/_version.py +2 -2
- qbraid_cli/devices/app.py +25 -2
- qbraid_cli/envs/app.py +26 -21
- qbraid_cli/files/app.py +2 -2
- qbraid_cli/handlers.py +16 -0
- qbraid_cli/jobs/app.py +22 -5
- {qbraid_cli-0.10.5.dist-info → qbraid_cli-0.10.7.dist-info}/METADATA +4 -4
- {qbraid_cli-0.10.5.dist-info → qbraid_cli-0.10.7.dist-info}/RECORD +12 -12
- {qbraid_cli-0.10.5.dist-info → qbraid_cli-0.10.7.dist-info}/WHEEL +1 -1
- {qbraid_cli-0.10.5.dist-info → qbraid_cli-0.10.7.dist-info}/entry_points.txt +0 -0
- {qbraid_cli-0.10.5.dist-info → qbraid_cli-0.10.7.dist-info}/licenses/LICENSE +0 -0
- {qbraid_cli-0.10.5.dist-info → qbraid_cli-0.10.7.dist-info}/top_level.txt +0 -0
qbraid_cli/_version.py
CHANGED
qbraid_cli/devices/app.py
CHANGED
|
@@ -12,7 +12,7 @@ import typer
|
|
|
12
12
|
from rich.console import Console
|
|
13
13
|
|
|
14
14
|
from qbraid_cli.devices.validation import validate_provider, validate_status, validate_type
|
|
15
|
-
from qbraid_cli.handlers import run_progress_task
|
|
15
|
+
from qbraid_cli.handlers import print_formatted_data, run_progress_task
|
|
16
16
|
|
|
17
17
|
devices_app = typer.Typer(help="Manage qBraid quantum devices.", no_args_is_help=True)
|
|
18
18
|
|
|
@@ -29,7 +29,10 @@ def devices_list( # pylint: disable=too-many-branches
|
|
|
29
29
|
None,
|
|
30
30
|
"--provider",
|
|
31
31
|
"-p",
|
|
32
|
-
help=
|
|
32
|
+
help=(
|
|
33
|
+
"'AWS'|'IBM'|'IonQ'|'Rigetti'|'OQC'|'QuEra'|'IQM'|"
|
|
34
|
+
"'NEC'|'qBraid'|'Azure'|'Pasqal'|'Quantinuum'|'Equal1'"
|
|
35
|
+
),
|
|
33
36
|
callback=validate_provider,
|
|
34
37
|
),
|
|
35
38
|
) -> None:
|
|
@@ -76,5 +79,25 @@ def devices_list( # pylint: disable=too-many-branches
|
|
|
76
79
|
console.print(f"\n{msg}", style="italic", justify="left")
|
|
77
80
|
|
|
78
81
|
|
|
82
|
+
@devices_app.command(name="get")
|
|
83
|
+
def devices_get(
|
|
84
|
+
device_id: str = typer.Argument(..., help="The ID of the device to get."),
|
|
85
|
+
fmt: bool = typer.Option(
|
|
86
|
+
True, "--no-fmt", help="Disable rich console formatting (output raw data)"
|
|
87
|
+
),
|
|
88
|
+
) -> None:
|
|
89
|
+
"""Get a qBraid quantum device."""
|
|
90
|
+
|
|
91
|
+
def get_device():
|
|
92
|
+
from qbraid_core.services.quantum import QuantumClient
|
|
93
|
+
|
|
94
|
+
client = QuantumClient()
|
|
95
|
+
return client.get_device(device_id)
|
|
96
|
+
|
|
97
|
+
data: dict[str, Any] = run_progress_task(get_device)
|
|
98
|
+
|
|
99
|
+
print_formatted_data(data, fmt)
|
|
100
|
+
|
|
101
|
+
|
|
79
102
|
if __name__ == "__main__":
|
|
80
103
|
devices_app()
|
qbraid_cli/envs/app.py
CHANGED
|
@@ -51,7 +51,7 @@ def envs_create( # pylint: disable=too-many-statements
|
|
|
51
51
|
)
|
|
52
52
|
|
|
53
53
|
env_details_in_cli = name is not None and env_description != ""
|
|
54
|
-
|
|
54
|
+
env_config = None
|
|
55
55
|
if env_details_in_cli and file_path:
|
|
56
56
|
handle_error(
|
|
57
57
|
error_type="ArgumentConflictError",
|
|
@@ -68,12 +68,12 @@ def envs_create( # pylint: disable=too-many-statements
|
|
|
68
68
|
else:
|
|
69
69
|
try:
|
|
70
70
|
if file_path:
|
|
71
|
-
|
|
71
|
+
env_config: EnvironmentConfig = EnvironmentConfig.from_yaml(file_path)
|
|
72
72
|
except ValueError as err:
|
|
73
73
|
handle_error(error_type="YamlValidationError", message=str(err))
|
|
74
74
|
|
|
75
75
|
if not name:
|
|
76
|
-
name =
|
|
76
|
+
name = env_config.name
|
|
77
77
|
|
|
78
78
|
def create_environment(*args, **kwargs) -> "tuple[dict, EMC]":
|
|
79
79
|
"""Create a qBraid environment."""
|
|
@@ -99,42 +99,47 @@ def envs_create( # pylint: disable=too-many-statements
|
|
|
99
99
|
|
|
100
100
|
return env_path, python_version
|
|
101
101
|
|
|
102
|
-
if not
|
|
103
|
-
|
|
102
|
+
if not env_config:
|
|
103
|
+
env_config = EnvironmentConfig(
|
|
104
104
|
name=name,
|
|
105
105
|
description=env_description,
|
|
106
106
|
)
|
|
107
107
|
|
|
108
|
-
|
|
108
|
+
create_env_out: tuple[dict, EMC] = run_progress_task(
|
|
109
109
|
create_environment,
|
|
110
|
-
|
|
110
|
+
env_config,
|
|
111
111
|
description="Validating request...",
|
|
112
112
|
error_message="Failed to create qBraid environment",
|
|
113
113
|
)
|
|
114
114
|
|
|
115
|
-
|
|
115
|
+
environment, emc = create_env_out
|
|
116
|
+
slug = environment.get("slug")
|
|
117
|
+
|
|
118
|
+
local_data_out: tuple[Path, str] = run_progress_task(
|
|
116
119
|
gather_local_data,
|
|
117
120
|
description="Solving environment...",
|
|
118
121
|
error_message="Failed to create qBraid environment",
|
|
119
122
|
)
|
|
120
123
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
124
|
+
env_path, python_version = local_data_out
|
|
125
|
+
|
|
126
|
+
env_config.name = environment.get("displayName")
|
|
127
|
+
env_config.shell_prompt = environment.get("prompt")
|
|
128
|
+
env_config.description = environment.get("description")
|
|
129
|
+
env_config.tags = environment.get("tags")
|
|
130
|
+
env_config.kernel_name = environment.get("kernelName")
|
|
131
|
+
env_config.python_version = python_version
|
|
127
132
|
|
|
128
133
|
slug_path = env_path / slug
|
|
129
134
|
description = "None" if description == "" else description
|
|
130
135
|
|
|
131
136
|
typer.echo("## qBraid Metadata ##\n")
|
|
132
|
-
typer.echo(f" name: {
|
|
133
|
-
typer.echo(f" description: {description}")
|
|
134
|
-
typer.echo(f" tags: {tags}")
|
|
137
|
+
typer.echo(f" name: {env_config.name}")
|
|
138
|
+
typer.echo(f" description: {env_config.description}")
|
|
139
|
+
typer.echo(f" tags: {env_config.tags}")
|
|
135
140
|
typer.echo(f" slug: {slug}")
|
|
136
|
-
typer.echo(f" shellPrompt: {
|
|
137
|
-
typer.echo(f" kernelName: {kernel_name}")
|
|
141
|
+
typer.echo(f" shellPrompt: {env_config.shell_prompt}")
|
|
142
|
+
typer.echo(f" kernelName: {env_config.kernel_name}")
|
|
138
143
|
|
|
139
144
|
typer.echo("\n\n## Environment Plan ##\n")
|
|
140
145
|
typer.echo(f" location: {slug_path}")
|
|
@@ -151,7 +156,7 @@ def envs_create( # pylint: disable=too-many-statements
|
|
|
151
156
|
create_qbraid_env_assets,
|
|
152
157
|
slug,
|
|
153
158
|
slug_path,
|
|
154
|
-
|
|
159
|
+
env_config,
|
|
155
160
|
description="Generating qBraid assets...",
|
|
156
161
|
error_message="Failed to create qBraid environment",
|
|
157
162
|
)
|
|
@@ -159,7 +164,7 @@ def envs_create( # pylint: disable=too-many-statements
|
|
|
159
164
|
run_progress_task(
|
|
160
165
|
create_venv,
|
|
161
166
|
slug_path,
|
|
162
|
-
|
|
167
|
+
env_config.shell_prompt,
|
|
163
168
|
description="Creating virtual environment...",
|
|
164
169
|
error_message="Failed to create qBraid environment",
|
|
165
170
|
)
|
qbraid_cli/files/app.py
CHANGED
|
@@ -27,10 +27,10 @@ def is_file_less_than_10mb(file_path: Path) -> bool:
|
|
|
27
27
|
Returns:
|
|
28
28
|
bool: True if the file is less than 10MB, False otherwise.
|
|
29
29
|
"""
|
|
30
|
-
|
|
30
|
+
ten_mb = 10485760 # 10 MB in bytes (10 * 1024 * 1024)
|
|
31
31
|
|
|
32
32
|
try:
|
|
33
|
-
return file_path.stat().st_size <
|
|
33
|
+
return file_path.stat().st_size < ten_mb
|
|
34
34
|
except OSError:
|
|
35
35
|
return False
|
|
36
36
|
|
qbraid_cli/handlers.py
CHANGED
|
@@ -89,6 +89,22 @@ def handle_filesystem_operation(operation: Callable[[], None], path: Path) -> No
|
|
|
89
89
|
raise QbraidException(f"Failed to save configuration to {path}: {err.strerror}") from err
|
|
90
90
|
|
|
91
91
|
|
|
92
|
+
def print_formatted_data(data: Any, fmt: bool = True) -> None:
|
|
93
|
+
"""
|
|
94
|
+
Print data with optional formatting using rich console.
|
|
95
|
+
|
|
96
|
+
Args:
|
|
97
|
+
data (Any): The data to be printed.
|
|
98
|
+
fmt (bool): If True, use rich console formatting. If False, use standard print.
|
|
99
|
+
Defaults to True.
|
|
100
|
+
"""
|
|
101
|
+
if fmt:
|
|
102
|
+
console = Console()
|
|
103
|
+
console.print(data)
|
|
104
|
+
else:
|
|
105
|
+
print(data)
|
|
106
|
+
|
|
107
|
+
|
|
92
108
|
def run_progress_task(
|
|
93
109
|
operation: Callable[..., Any],
|
|
94
110
|
*args,
|
qbraid_cli/jobs/app.py
CHANGED
|
@@ -11,7 +11,7 @@ from typing import Any, Callable
|
|
|
11
11
|
import typer
|
|
12
12
|
from rich.console import Console
|
|
13
13
|
|
|
14
|
-
from qbraid_cli.handlers import handle_error, run_progress_task
|
|
14
|
+
from qbraid_cli.handlers import handle_error, print_formatted_data, run_progress_task
|
|
15
15
|
from qbraid_cli.jobs.toggle_braket import disable_braket, enable_braket
|
|
16
16
|
from qbraid_cli.jobs.validation import handle_jobs_state, run_progress_get_state, validate_library
|
|
17
17
|
|
|
@@ -107,11 +107,8 @@ def jobs_list(
|
|
|
107
107
|
|
|
108
108
|
result: tuple[Any, Callable] = run_progress_task(import_jobs)
|
|
109
109
|
client, process_job_data = result
|
|
110
|
-
|
|
111
|
-
# raw_data = client.search_jobs(query={"numResults": limit})
|
|
112
|
-
raw_data = client.search_jobs(query={})
|
|
110
|
+
raw_data = client.search_jobs(query={"resultsPerPage": limit, "page": 0})
|
|
113
111
|
job_data, msg = process_job_data(raw_data)
|
|
114
|
-
job_data = job_data[:limit]
|
|
115
112
|
|
|
116
113
|
longest_job_id = max(len(item[0]) for item in job_data)
|
|
117
114
|
spacing = longest_job_id + 5
|
|
@@ -148,5 +145,25 @@ def jobs_list(
|
|
|
148
145
|
handle_error(message="Failed to fetch quantum jobs.")
|
|
149
146
|
|
|
150
147
|
|
|
148
|
+
@jobs_app.command(name="get")
|
|
149
|
+
def jobs_get(
|
|
150
|
+
job_id: str = typer.Argument(..., help="The ID of the job to get."),
|
|
151
|
+
fmt: bool = typer.Option(
|
|
152
|
+
True, "--no-fmt", help="Disable rich console formatting (output raw data)"
|
|
153
|
+
),
|
|
154
|
+
) -> None:
|
|
155
|
+
"""Get a qBraid Quantum Job."""
|
|
156
|
+
|
|
157
|
+
def get_job():
|
|
158
|
+
from qbraid_core.services.quantum import QuantumClient
|
|
159
|
+
|
|
160
|
+
client = QuantumClient()
|
|
161
|
+
return client.get_job(job_id)
|
|
162
|
+
|
|
163
|
+
data: dict[str, Any] = run_progress_task(get_job)
|
|
164
|
+
|
|
165
|
+
print_formatted_data(data, fmt)
|
|
166
|
+
|
|
167
|
+
|
|
151
168
|
if __name__ == "__main__":
|
|
152
169
|
jobs_app()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: qbraid-cli
|
|
3
|
-
Version: 0.10.
|
|
3
|
+
Version: 0.10.7
|
|
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: Proprietary
|
|
@@ -29,12 +29,12 @@ Description-Content-Type: text/markdown
|
|
|
29
29
|
License-File: LICENSE
|
|
30
30
|
Requires-Dist: typer>=0.12.1
|
|
31
31
|
Requires-Dist: rich>=10.11.0
|
|
32
|
-
Requires-Dist: click
|
|
33
|
-
Requires-Dist: qbraid-core<0.2,>=0.1.
|
|
32
|
+
Requires-Dist: click<=8.1.8
|
|
33
|
+
Requires-Dist: qbraid-core<0.2,>=0.1.41
|
|
34
34
|
Provides-Extra: jobs
|
|
35
35
|
Requires-Dist: amazon-braket-sdk>=1.48.1; extra == "jobs"
|
|
36
36
|
Provides-Extra: envs
|
|
37
|
-
Requires-Dist: qbraid-core[environments]; extra == "envs"
|
|
37
|
+
Requires-Dist: qbraid-core[environments]<0.2,>=0.1.41; extra == "envs"
|
|
38
38
|
Provides-Extra: dev
|
|
39
39
|
Requires-Dist: isort; extra == "dev"
|
|
40
40
|
Requires-Dist: black; extra == "dev"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
qbraid_cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
qbraid_cli/_version.py,sha256=
|
|
2
|
+
qbraid_cli/_version.py,sha256=MZArT0XdOyz4PClOVaSsIkigIviF4cY9W9HHSg6r2c8,513
|
|
3
3
|
qbraid_cli/exceptions.py,sha256=KjlhYJhSHMVazaNiBjD_Ur06w4sekP8zRsFzBdyIpno,672
|
|
4
|
-
qbraid_cli/handlers.py,sha256=
|
|
4
|
+
qbraid_cli/handlers.py,sha256=qRxrB37-n9WBYIAf63KLEAPSQ7Hfhb1qRaHgsA2TVH8,8069
|
|
5
5
|
qbraid_cli/main.py,sha256=aSOQyoRRvKBJBcx8VtU4zKZ2WHvGKHhw8I-WiRwPxcE,3926
|
|
6
6
|
qbraid_cli/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
7
|
qbraid_cli/account/__init__.py,sha256=smlpUcVkM3QEbJG0norGM7i71XBJlUGQYByswTfPnmg,181
|
|
@@ -16,17 +16,17 @@ qbraid_cli/configure/__init__.py,sha256=YaJ74Ztz2vl3eYp8_jVBucWkXscxz7EZEIzr70Of
|
|
|
16
16
|
qbraid_cli/configure/actions.py,sha256=VZ7uP4bFE5ks9yH5xZYzllAm4rM0grV70CP2GbXiwrY,3589
|
|
17
17
|
qbraid_cli/configure/app.py,sha256=7UN8Bje0n_s2nDE-cHid8VwOp7gl0jjw9gldyCcZNhI,4164
|
|
18
18
|
qbraid_cli/devices/__init__.py,sha256=hiScO-px6jCL5cJj5Hbty55EUfNejTO4bmqUZuS3aqc,181
|
|
19
|
-
qbraid_cli/devices/app.py,sha256=
|
|
19
|
+
qbraid_cli/devices/app.py,sha256=B-cRdV092C6ACeu3C-5l2P_izpPDxvCzzAKfxO1WkaM,3224
|
|
20
20
|
qbraid_cli/devices/validation.py,sha256=YhShyUufgrKnx2XjXOXF-PqFJYklJT9CgeqIwKcNam4,809
|
|
21
21
|
qbraid_cli/envs/__init__.py,sha256=1-cMvrATsddYxcetPJWxq6bEOqJWMktGdhoZ4qm8euA,172
|
|
22
22
|
qbraid_cli/envs/activate.py,sha256=VpvVYSfQDlcmlNWJOgkLIQ2p8YXPPLG8Jbl5t8GHUDw,2140
|
|
23
|
-
qbraid_cli/envs/app.py,sha256=
|
|
23
|
+
qbraid_cli/envs/app.py,sha256=yDNipJuIM1RJHryoALLlRcxIVOpxWMHIy6O5BiR5wPU,10205
|
|
24
24
|
qbraid_cli/envs/create.py,sha256=gF2wS09IYeQX71xLDabtLVgr_BxKLVP9Pt5XrNSRCS0,1052
|
|
25
25
|
qbraid_cli/envs/data_handling.py,sha256=Ibnp2yJoUDpivb_sNqi0suYgJZNat_LmM6Ya0Ovez5s,1288
|
|
26
26
|
qbraid_cli/files/__init__.py,sha256=3_yhgFoNcviEtS6B75uJBrfFFUjsrMcccCNEntJ54xU,175
|
|
27
|
-
qbraid_cli/files/app.py,sha256=
|
|
27
|
+
qbraid_cli/files/app.py,sha256=gNa88cfAmpzYd9VOK7Q-OWJ1LyyHxq88PKhg8Q9w9Mk,3771
|
|
28
28
|
qbraid_cli/jobs/__init__.py,sha256=qVLRHYIzP4XHpx_QWP_vCzd3LsCscCORaEx-Vcbx29U,172
|
|
29
|
-
qbraid_cli/jobs/app.py,sha256=
|
|
29
|
+
qbraid_cli/jobs/app.py,sha256=NchePouZkoHWxqV1lwiYuXwrLeP99zITKz5Ezc1pm2I,5383
|
|
30
30
|
qbraid_cli/jobs/toggle_braket.py,sha256=3AEu-Z5q4avduB-fJMyMTVTuyZXuA8m-hnvi325wIv4,7444
|
|
31
31
|
qbraid_cli/jobs/validation.py,sha256=KlkqVH1-vlNCHSayEpxzyXU86_TMN5prGfMFEoyBsFs,2971
|
|
32
32
|
qbraid_cli/kernels/__init__.py,sha256=jORS9vV17s5laQyq8gSVB18EPBImgEIbMZ1wKC094DA,181
|
|
@@ -34,9 +34,9 @@ qbraid_cli/kernels/app.py,sha256=n-iyWJHy7_ML6qk4pp-v_rQkGA7WfnZMG8gyiCFGO1c,294
|
|
|
34
34
|
qbraid_cli/pip/__init__.py,sha256=tJtU0rxn-ODogNh5Y4pp_BgDQXMN-3JY1QGj0OZHwjQ,169
|
|
35
35
|
qbraid_cli/pip/app.py,sha256=jkk-djductrDOJIRYfHK_7WDJ12f0zOT3MMkiZp97oM,1365
|
|
36
36
|
qbraid_cli/pip/hooks.py,sha256=jkIeev3cOd-cmaoJSdSqbmhTYCs6z1we84FMqa3ZoZw,2124
|
|
37
|
-
qbraid_cli-0.10.
|
|
38
|
-
qbraid_cli-0.10.
|
|
39
|
-
qbraid_cli-0.10.
|
|
40
|
-
qbraid_cli-0.10.
|
|
41
|
-
qbraid_cli-0.10.
|
|
42
|
-
qbraid_cli-0.10.
|
|
37
|
+
qbraid_cli-0.10.7.dist-info/licenses/LICENSE,sha256=3KvWfsaXBCqbZ4qwk5jN9CQXE53tQeaZTySN5a-CCgQ,2753
|
|
38
|
+
qbraid_cli-0.10.7.dist-info/METADATA,sha256=LYzmNjBfp7iCYoq5Wl6vF5_kp_sG0kqu6PGyaiWlxH4,7628
|
|
39
|
+
qbraid_cli-0.10.7.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
40
|
+
qbraid_cli-0.10.7.dist-info/entry_points.txt,sha256=c5ZJ7NjbxhDqMpou9q5F03_b_KG34HzFDijIDmEIwgQ,47
|
|
41
|
+
qbraid_cli-0.10.7.dist-info/top_level.txt,sha256=LTYJgeYSCHo9Il8vZu0yIPuGdGyNaIw6iRy6BeoZo8o,11
|
|
42
|
+
qbraid_cli-0.10.7.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|