qbraid-cli 0.8.7__tar.gz → 0.9.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.

Potentially problematic release.


This version of qbraid-cli might be problematic. Click here for more details.

Files changed (132) hide show
  1. qbraid_cli-0.9.0/.github/workflows/docs-pr.yml +128 -0
  2. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/.github/workflows/docs.yml +3 -1
  3. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/.github/workflows/format.yml +4 -2
  4. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/.github/workflows/main.yml +4 -1
  5. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/CONTRIBUTING.md +12 -5
  6. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/Makefile +8 -2
  7. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/PKG-INFO +5 -4
  8. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/README.md +1 -1
  9. qbraid_cli-0.8.7/docs/guide/overview.rst → qbraid_cli-0.9.0/docs/index.rst +19 -5
  10. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/pyproject.toml +5 -4
  11. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli/_version.py +2 -2
  12. qbraid_cli-0.9.0/qbraid_cli/account/__init__.py +11 -0
  13. qbraid_cli-0.9.0/qbraid_cli/account/app.py +65 -0
  14. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli/devices/app.py +1 -1
  15. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli/envs/app.py +3 -3
  16. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli/handlers.py +4 -0
  17. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli/jobs/app.py +1 -1
  18. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli/jobs/toggle_braket.py +1 -1
  19. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli/main.py +18 -9
  20. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli.egg-info/PKG-INFO +5 -4
  21. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli.egg-info/SOURCES.txt +6 -25
  22. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli.egg-info/requires.txt +4 -2
  23. qbraid_cli-0.9.0/tests/account/test_account_credits.py +88 -0
  24. qbraid_cli-0.9.0/tests/conftest.py +35 -0
  25. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tests/devices/test_devices_list.py +4 -16
  26. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tests/jobs/test_jobs_list.py +3 -13
  27. qbraid_cli-0.8.7/docs/_static/api-key.png +0 -0
  28. qbraid_cli-0.8.7/docs/_static/cards/jupyter.png +0 -0
  29. qbraid_cli-0.8.7/docs/_static/cards/python.png +0 -0
  30. qbraid_cli-0.8.7/docs/_static/cards/terminal.png +0 -0
  31. qbraid_cli-0.8.7/docs/cli/configure.rst +0 -60
  32. qbraid_cli-0.8.7/docs/cli/credits.rst +0 -23
  33. qbraid_cli-0.8.7/docs/cli/devices-list.rst +0 -35
  34. qbraid_cli-0.8.7/docs/cli/devices.rst +0 -17
  35. qbraid_cli-0.8.7/docs/cli/envs-activate.rst +0 -36
  36. qbraid_cli-0.8.7/docs/cli/envs-list.rst +0 -37
  37. qbraid_cli-0.8.7/docs/cli/envs-uninstall.rst +0 -40
  38. qbraid_cli-0.8.7/docs/cli/envs.rst +0 -25
  39. qbraid_cli-0.8.7/docs/cli/jobs-add.rst +0 -49
  40. qbraid_cli-0.8.7/docs/cli/jobs-disable.rst +0 -36
  41. qbraid_cli-0.8.7/docs/cli/jobs-enable.rst +0 -35
  42. qbraid_cli-0.8.7/docs/cli/jobs-list.rst +0 -35
  43. qbraid_cli-0.8.7/docs/cli/jobs.rst +0 -26
  44. qbraid_cli-0.8.7/docs/cli/kernels.rst +0 -31
  45. qbraid_cli-0.8.7/docs/cli/qbraid.rst +0 -68
  46. qbraid_cli-0.8.7/docs/index.rst +0 -113
  47. qbraid_cli-0.8.7/qbraid_cli/credits/__init__.py +0 -11
  48. qbraid_cli-0.8.7/qbraid_cli/credits/app.py +0 -35
  49. qbraid_cli-0.8.7/ruff.toml +0 -62
  50. qbraid_cli-0.8.7/tests/credits/test_credits_value.py +0 -43
  51. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/.env.example +0 -0
  52. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  53. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  54. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  55. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/.github/workflows/bump-version.yml +0 -0
  56. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/.github/workflows/pre-release.yml +0 -0
  57. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/.github/workflows/publish.yml +0 -0
  58. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/.github/workflows/tag-on-merge.yml +0 -0
  59. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/.gitignore +0 -0
  60. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/.readthedocs.yml +0 -0
  61. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/LICENSE +0 -0
  62. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/MANIFEST.IN +0 -0
  63. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/docs/Makefile +0 -0
  64. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/docs/_static/favicon.ico +0 -0
  65. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/docs/_static/logo.png +0 -0
  66. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/docs/_static/style/custom.css +0 -0
  67. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/docs/_static/style/s4defs-roles.css +0 -0
  68. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/docs/conf.py +0 -0
  69. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/docs/make.bat +0 -0
  70. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/docs/requirements.txt +0 -0
  71. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli/__init__.py +0 -0
  72. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli/admin/__init__.py +0 -0
  73. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli/admin/app.py +0 -0
  74. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli/admin/headers.py +0 -0
  75. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli/admin/validation.py +0 -0
  76. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli/configure/__init__.py +0 -0
  77. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli/configure/actions.py +0 -0
  78. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli/configure/app.py +0 -0
  79. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli/devices/__init__.py +0 -0
  80. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli/devices/validation.py +0 -0
  81. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli/envs/__init__.py +0 -0
  82. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli/envs/activate.py +0 -0
  83. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli/envs/create.py +0 -0
  84. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli/envs/data_handling.py +0 -0
  85. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli/exceptions.py +0 -0
  86. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli/jobs/__init__.py +0 -0
  87. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli/jobs/validation.py +0 -0
  88. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli/kernels/__init__.py +0 -0
  89. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli/kernels/app.py +0 -0
  90. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli/pip/__init__.py +0 -0
  91. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli/pip/app.py +0 -0
  92. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli/pip/hooks.py +0 -0
  93. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli/py.typed +0 -0
  94. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli.egg-info/dependency_links.txt +0 -0
  95. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli.egg-info/entry_points.txt +0 -0
  96. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/qbraid_cli.egg-info/top_level.txt +0 -0
  97. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/setup.cfg +0 -0
  98. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tests/__init__.py +0 -0
  99. {qbraid_cli-0.8.7/tests/configure → qbraid_cli-0.9.0/tests/account}/__init__.py +0 -0
  100. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tests/admin/test_headers.py +0 -0
  101. {qbraid_cli-0.8.7/tests/credits → qbraid_cli-0.9.0/tests/configure}/__init__.py +0 -0
  102. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tests/configure/test_configure_prompt_for_config.py +0 -0
  103. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tests/configure/test_configure_set.py +0 -0
  104. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tests/configure/test_configure_validate_input.py +0 -0
  105. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tests/devices/__init__.py +0 -0
  106. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tests/devices/test_devices_validations.py +0 -0
  107. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tests/envs/__init__.py +0 -0
  108. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tests/envs/test_envs_activate.py +0 -0
  109. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tests/envs/test_envs_activate_find_shell_rc.py +0 -0
  110. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tests/envs/test_envs_activate_print_command.py +0 -0
  111. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tests/envs/test_envs_activate_pyenv.py +0 -0
  112. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tests/envs/test_envs_list.py +0 -0
  113. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tests/envs/test_envs_remove.py +0 -0
  114. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tests/jobs/__init__.py +0 -0
  115. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tests/jobs/test_jobs_disable.py +0 -0
  116. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tests/jobs/test_jobs_enable.py +0 -0
  117. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tests/jobs/test_jobs_state.py +0 -0
  118. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tests/jobs/test_jobs_toggle_braket_confirm.py +0 -0
  119. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tests/jobs/test_jobs_toggle_braket_disable.py +0 -0
  120. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tests/jobs/test_jobs_toggle_braket_enable.py +0 -0
  121. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tests/jobs/test_jobs_toggle_braket_get_data.py +0 -0
  122. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tests/jobs/test_jobs_validate_get_state.py +0 -0
  123. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tests/jobs/test_jobs_validate_handle_state.py +0 -0
  124. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tests/jobs/test_jobs_validate_library.py +0 -0
  125. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tests/kernels/__init__.py +0 -0
  126. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tests/kernels/test_kernels_list.py +0 -0
  127. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tools/bump_version.py +0 -0
  128. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tools/create_dev_build.sh +0 -0
  129. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tools/install_wheel_extras.sh +0 -0
  130. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tools/split_md.py +0 -0
  131. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tools/split_rst.py +0 -0
  132. {qbraid_cli-0.8.7 → qbraid_cli-0.9.0}/tools/stamp_pre_release.py +0 -0
@@ -0,0 +1,128 @@
1
+ name: Open Docs PR
2
+
3
+ on:
4
+ pull_request:
5
+ types: [closed]
6
+
7
+ jobs:
8
+ generate-docs-assets:
9
+ if: github.event.pull_request.merged == true && github.event.pull_request.user.login == 'github-actions[bot]' && startsWith(github.event.pull_request.title, 'Bump project version to ')
10
+ runs-on: ubuntu-latest
11
+ outputs:
12
+ cli_version: ${{ steps.get_version.outputs.version }}
13
+ steps:
14
+ - name: Checkout code
15
+ uses: actions/checkout@v4
16
+ with:
17
+ ref: main
18
+
19
+ - name: Install dependencies
20
+ run: |
21
+ python -m pip install --upgrade pip setuptools build
22
+ python -m pip install -r docs/requirements.txt
23
+
24
+ - name: Build & install package
25
+ run: |
26
+ make build
27
+ tools/install_wheel_extras.sh dist --extra envs
28
+
29
+ - name: Get qbraid-cli version
30
+ id: get_version
31
+ run: |
32
+ VERSION=$(qbraid --version | grep -o '[0-9]*\.[0-9]*\.[0-9]*')
33
+ echo "version=$VERSION" >> $GITHUB_OUTPUT
34
+
35
+ - name: Generate docs assets
36
+ run: |
37
+ make docs-mdx
38
+
39
+ - name: Upload docs assets
40
+ uses: actions/upload-artifact@v4
41
+ with:
42
+ name: api-reference
43
+ path: docs/tree/qbraid*.mdx
44
+
45
+ commit-and-pr:
46
+ if: github.event.pull_request.merged == true && github.event.pull_request.user.login == 'github-actions[bot]' && startsWith(github.event.pull_request.title, 'Bump project version to ')
47
+ runs-on: ubuntu-latest
48
+ needs: generate-docs-assets
49
+ permissions:
50
+ contents: write
51
+ pull-requests: write
52
+
53
+ steps:
54
+ - name: Download docs assets
55
+ uses: actions/download-artifact@v4
56
+ with:
57
+ name: api-reference
58
+ path: ./api-reference
59
+
60
+ - name: Checkout qBraid/docs repo
61
+ uses: actions/checkout@v4
62
+ with:
63
+ repository: qBraid/docs
64
+ token: ${{ secrets.BOT_TOKEN }}
65
+ path: ./qbraid_docs
66
+ ref: main
67
+
68
+ - name: Create feature branch
69
+ run: |
70
+ cd qbraid_docs
71
+ git checkout -b qbraid-cli-bot/${{ github.run_id }}
72
+
73
+ - name: Update docs in qBraid/docs
74
+ run: |
75
+ rm -f qbraid_docs/cli/api-reference/*
76
+ cp api-reference/qbraid*.mdx qbraid_docs/cli/api-reference/
77
+
78
+ - name: Inject version
79
+ run: |
80
+ VERSION=${{ needs.generate-docs-assets.outputs.cli_version }}
81
+ sed -i "6iVersion: [$VERSION](https://pypi.org/project/qbraid-cli/$VERSION)\n" qbraid_docs/cli/api-reference/qbraid.mdx
82
+
83
+ - name: Set up Node.js
84
+ uses: actions/setup-node@v4
85
+ with:
86
+ node-version: '22'
87
+
88
+ - name: Install dependencies
89
+ run: |
90
+ cd qbraid_docs
91
+ npm install
92
+
93
+ - name: Run prettier fixes
94
+ run: |
95
+ cd qbraid_docs
96
+ npx prettier --write cli/api-reference/qbraid*.mdx
97
+
98
+ - name: Setup Git config
99
+ run: |
100
+ git config --global user.name 'qbraidTeam'
101
+ git config --global user.email 'qbraid.team@qbraid.com'
102
+
103
+ - name: Commit and push changes
104
+ id: commit_and_push
105
+ run: |
106
+ cd qbraid_docs
107
+ git add cli/api-reference/
108
+ git commit -m "qBraid-CLI API reference docs update for version $VERSION"
109
+ git push origin qbraid-cli-bot/${{ github.run_id }}
110
+
111
+ - name: Create Pull Request
112
+ id: create_pr
113
+ run: |
114
+ cd qbraid_docs
115
+ VERSION=${{ needs.generate-docs-assets.outputs.cli_version }}
116
+ PR_URL=$(gh pr create -B main -H qbraid-cli-bot/${{ github.run_id }} --title "Update qBraid-CLI version $VERSION" --body "This PR updates the qBraid-CLI API reference docs for the latest release version $VERSION")
117
+ PR_NUMBER=$(echo "$PR_URL" | grep -o '[0-9]*$')
118
+ echo "url=$PR_URL" >> $GITHUB_OUTPUT
119
+ echo "number=$PR_NUMBER" >> $GITHUB_OUTPUT
120
+ env:
121
+ GH_TOKEN: ${{ secrets.BOT_TOKEN }}
122
+
123
+ - name: Summary
124
+ run: |
125
+ VERSION=${{ needs.generate-docs-assets.outputs.cli_version }}
126
+ PR_URL=${{ steps.create_pr.outputs.url }}
127
+ PR_NUMBER=${{ steps.create_pr.outputs.number }}
128
+ echo "Opened PR [#$PR_NUMBER]($PR_URL) to update CLI docs for version **$VERSION**." >> $GITHUB_STEP_SUMMARY
@@ -3,12 +3,14 @@ name: Build Docs
3
3
  on:
4
4
  pull_request:
5
5
  branches: ['main']
6
+ types: [opened, reopened, ready_for_review, synchronize]
6
7
  push:
7
8
  branches: ['main']
8
9
  workflow_dispatch:
9
10
 
10
11
  jobs:
11
12
  build:
13
+ if: github.event.pull_request.draft == false
12
14
  runs-on: ubuntu-latest
13
15
 
14
16
  steps:
@@ -25,7 +27,7 @@ jobs:
25
27
  - name: Build & install package
26
28
  run: |
27
29
  python -m build .
28
- python -m pip install dist/*.whl
30
+ tools/install_wheel_extras.sh dist --extra envs
29
31
  - name: Generate docs assets
30
32
  run: |
31
33
  python -c "import pathlib; pathlib.Path('docs/tree').mkdir(parents=True, exist_ok=True)"
@@ -1,12 +1,14 @@
1
- name: Formatting check
1
+ name: Format
2
2
 
3
3
  on:
4
4
  pull_request:
5
5
  branches: ['main']
6
+ types: [opened, reopened, ready_for_review, synchronize]
6
7
  workflow_dispatch:
7
8
 
8
9
  jobs:
9
- main:
10
+ check:
11
+ if: github.event.pull_request.draft == false
10
12
  runs-on: ubuntu-latest
11
13
 
12
14
  steps:
@@ -3,12 +3,14 @@ name: CI
3
3
  on:
4
4
  pull_request:
5
5
  branches: ['main']
6
+ types: [opened, reopened, ready_for_review, synchronize]
6
7
  push:
7
8
  branches: ['main']
8
9
  workflow_dispatch:
9
10
 
10
11
  jobs:
11
12
  build:
13
+ if: github.event.pull_request.draft == false
12
14
  runs-on: ubuntu-latest
13
15
  strategy:
14
16
  matrix:
@@ -35,6 +37,7 @@ jobs:
35
37
  path: dist/*.whl
36
38
 
37
39
  test:
40
+ if: github.event.pull_request.draft == false
38
41
  needs: build
39
42
  runs-on: ${{ matrix.os }}
40
43
  strategy:
@@ -64,7 +67,7 @@ jobs:
64
67
  shell: pwsh
65
68
  - name: Install testing dependencies
66
69
  run: |
67
- pip install pytest pytest-cov
70
+ pip install pytest pytest-cov qbraid-core[environments]
68
71
  - name: Run tests with pytest
69
72
  run: |
70
73
  pytest --cov=qbraid_cli tests/ --cov-report=html --cov-report=xml --cov-report=term --cov-config=pyproject.toml
@@ -1,10 +1,8 @@
1
1
  # Contributing
2
2
 
3
3
  [![CI](https://github.com/qBraid/qBraid-CLI/actions/workflows/main.yml/badge.svg?branch=main)](https://github.com/qBraid/qBraid-CLI/actions/workflows/main.yml)
4
- [![Documentation Status](https://readthedocs.com/projects/qbraid-qbraid-cli/badge/?version=latest)](https://docs.qbraid.com/projects/cli/en/latest/?badge=latest)
5
4
  [![codecov](https://codecov.io/gh/qBraid/qBraid-CLI/graph/badge.svg?token=wVNrLILy9c)](https://codecov.io/gh/qBraid/qBraid-CLI)
6
5
 
7
-
8
6
  Welcome! We're delighted that you're interested in contributing. Your help is essential for keeping the project great.
9
7
 
10
8
  ## Getting Started
@@ -41,6 +39,12 @@ To view available `make` commands, run:
41
39
  make help
42
40
  ```
43
41
 
42
+ To test out changes on the command line with re-installing each time:
43
+
44
+ ```bash
45
+ python3 qbraid_cli/main.py [OPTIONS] COMMAND [ARGS]...
46
+ ```
47
+
44
48
  ## Testing
45
49
 
46
50
  Install test dependencies:
@@ -99,17 +103,20 @@ open docs/build/html/index.html
99
103
 
100
104
  ## Code style
101
105
 
102
- For code style, our project uses [ruff](https://github.com/astral-sh/ruff). Specific configurations for these tools should be added to [`pyproject.toml`](pyproject.toml).
106
+ For code style, our project uses a combination of [isort](https://github.com/PyCQA/isort), [pylint](https://github.com/pylint-dev/pylint), [black](https://github.com/psf/black), and [mypy](https://github.com/python/mypy). Specific configurations for these tools should be added to [`pyproject.toml`](pyproject.toml).
103
107
 
104
108
  Install linters:
105
109
 
106
110
  ```bash
107
- pip install ruff qbraid-cli
111
+ pip install black isort pylint mypy
108
112
  ```
109
113
 
110
114
  Run the following and make changes as needed to satisfy format checks:
111
115
 
112
116
  ```bash
113
- ruff format qbraid_cli tests tools
117
+ black qbraid_cli tests tools
118
+ isort qbraid_cli tests tools
119
+ pylint qbraid_cli tests tools
120
+ mypy qbraid_cli tests tools
114
121
  qbraid admin headers qbraid_cli tests tools --type=default --fix
115
122
  ```
@@ -16,15 +16,21 @@ help: ## Display this help message
16
16
  @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-30s\033[0m %s\n", $$1, $$2}'
17
17
  @echo
18
18
 
19
- docs: check_dependencies_docs check_build_version ## Generate documentation
19
+ docs: check_dependencies_docs check_build_version ## Generate documentation (Sphinx)
20
20
  @python -c "import pathlib; pathlib.Path('$(TREE_DIR)').mkdir(parents=True, exist_ok=True)"
21
- @python -c "import glob, os; [os.remove(f) for f in glob.glob('$(TREE_DIR)/*.rst')]"
21
+ @python -c "import glob, os; [os.remove(f) for f in glob.glob('$(TREE_DIR)/*')]"
22
22
  @typer qbraid_cli.main utils docs --name=qbraid --output=$(TREE_DIR)/qbraid.md
23
23
  @m2r $(TREE_DIR)/qbraid.md
24
24
  @python -c "import os; os.remove('$(TREE_DIR)/qbraid.md')"
25
25
  @python $(TOOLS_DIR)/split_rst.py $(TREE_DIR)/qbraid.rst
26
26
  @sphinx-build -W -b html $(DOCS_DIR) $(BUILD_DIR)
27
27
 
28
+ docs-mdx: check_dependencies_docs check_build_version ## Generate documentation (Mintlify)
29
+ @python -c "import pathlib; pathlib.Path('$(TREE_DIR)').mkdir(parents=True, exist_ok=True)"
30
+ @python -c "import glob, os; [os.remove(f) for f in glob.glob('$(TREE_DIR)/*')]"
31
+ @typer qbraid_cli.main utils docs --name=qbraid --output=$(TREE_DIR)/qbraid.md
32
+ @python $(TOOLS_DIR)/split_md.py $(TREE_DIR)/qbraid.md
33
+
28
34
  test: check_dependencies_test ## Run tests with pytest
29
35
  @python -m pytest $(TESTS_DIR)
30
36
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: qbraid-cli
3
- Version: 0.8.7
3
+ Version: 0.9.0
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,11 +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: qbraid-core[environments]>=0.1.23
32
+ Requires-Dist: qbraid-core>=0.1.29
33
33
  Provides-Extra: jobs
34
34
  Requires-Dist: amazon-braket-sdk>=1.48.1; extra == "jobs"
35
+ Provides-Extra: envs
36
+ Requires-Dist: qbraid-core[environments]; extra == "envs"
35
37
  Provides-Extra: dev
36
- Requires-Dist: ruff; extra == "dev"
37
38
  Requires-Dist: isort; extra == "dev"
38
39
  Requires-Dist: black; extra == "dev"
39
40
  Requires-Dist: pytest; extra == "dev"
@@ -141,7 +142,7 @@ Options
141
142
 
142
143
  Commands
143
144
  configure Configure qBraid CLI options.
144
- credits Manage qBraid credits.
145
+ account Manage qBraid account.
145
146
  devices Manage qBraid quantum devices.
146
147
  envs Manage qBraid environments.
147
148
  jobs Manage qBraid quantum jobs.
@@ -100,7 +100,7 @@ Options
100
100
 
101
101
  Commands
102
102
  configure Configure qBraid CLI options.
103
- credits Manage qBraid credits.
103
+ account Manage qBraid account.
104
104
  devices Manage qBraid quantum devices.
105
105
  envs Manage qBraid environments.
106
106
  jobs Manage qBraid quantum jobs.
@@ -1,7 +1,5 @@
1
- .. _cli_overview:
2
-
3
- Overview
4
- =========
1
+ Documentation
2
+ ==============
5
3
 
6
4
  .. raw:: html
7
5
 
@@ -33,7 +31,7 @@ the qBraid CLI can be intalled using `pip <https://pypi.org/project/qbraid-cli/>
33
31
  pip install qbraid-cli
34
32
 
35
33
  To use the qBraid CLI, login to qBraid (or create an account), launch Lab, and then open Terminal.
36
- You can also access the CLI directly from within `Notebooks <https://docs.qbraid.com/projects/lab/en/latest/lab/notebooks.html>`_
34
+ You can also access the CLI directly from within `Notebooks <https://docs.qbraid.com/lab/user-guide/notebooks>`_
37
35
  using the ``!`` operator. See `quantum jobs example <https://github.com/qBraid/qbraid-lab-demo/blob/045c7a8fbdcae66a7e64533dd9fe0e981dc02cf4/qbraid_lab/quantum_jobs/aws_quantum_jobs.ipynb>`_.
38
36
 
39
37
  - `Launch qBraid Lab → <https://lab.qbraid.com/>`_
@@ -107,3 +105,19 @@ by disabling quantum jobs:
107
105
  .. code-block:: console
108
106
 
109
107
  $ qbraid jobs disable braket # toggle quantum jobs off
108
+
109
+
110
+ .. toctree::
111
+ :maxdepth: 1
112
+ :caption: CLI API Reference
113
+ :hidden:
114
+
115
+ tree/qbraid
116
+ tree/qbraid_admin
117
+ tree/qbraid_configure
118
+ tree/qbraid_account
119
+ tree/qbraid_devices
120
+ tree/qbraid_envs
121
+ tree/qbraid_jobs
122
+ tree/qbraid_kernels
123
+ tree/qbraid_pip
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "qbraid-cli"
7
- version = "0.8.7"
7
+ version = "0.9.0"
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" }]
@@ -30,7 +30,7 @@ classifiers = [
30
30
  dependencies = [
31
31
  "typer>=0.12.1",
32
32
  "rich>=10.11.0",
33
- "qbraid-core[environments]>=0.1.23",
33
+ "qbraid-core>=0.1.29",
34
34
  ]
35
35
  requires-python = ">= 3.9"
36
36
 
@@ -42,7 +42,8 @@ Discord = "https://discord.gg/KugF6Cnncm"
42
42
 
43
43
  [project.optional-dependencies]
44
44
  jobs = ["amazon-braket-sdk>=1.48.1"]
45
- dev = ["ruff", "isort", "black", "pytest", "pytest-cov"]
45
+ envs = ["qbraid-core[environments]"]
46
+ dev = ["isort", "black", "pytest", "pytest-cov"]
46
47
 
47
48
  [project.scripts]
48
49
  qbraid = "qbraid_cli.main:app"
@@ -52,7 +53,7 @@ write_to = "qbraid_cli/_version.py"
52
53
 
53
54
  [tool.black]
54
55
  line-length = 100
55
- target-version = ["py39", "py310", "py311"]
56
+ target-version = ["py39", "py310", "py311", "py312"]
56
57
 
57
58
  [tool.isort]
58
59
  profile = "black"
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.1.dev1+g49939c4'
16
- __version_tuple__ = version_tuple = (0, 1, 'dev1', 'g49939c4')
15
+ __version__ = version = '0.1.dev1+g3ef6e9f'
16
+ __version_tuple__ = version_tuple = (0, 1, 'dev1', 'g3ef6e9f')
@@ -0,0 +1,11 @@
1
+ # Copyright (c) 2024, qBraid Development Team
2
+ # All rights reserved.
3
+
4
+ """
5
+ Module defining the qbraid account namespace
6
+
7
+ """
8
+
9
+ from .app import account_app
10
+
11
+ __all__ = ["account_app"]
@@ -0,0 +1,65 @@
1
+ # Copyright (c) 2024, qBraid Development Team
2
+ # All rights reserved.
3
+
4
+ """
5
+ Module defining commands in the 'qbraid user' namespace.
6
+
7
+ """
8
+
9
+ from typing import Any
10
+
11
+ import rich
12
+ import typer
13
+
14
+ from qbraid_cli.handlers import run_progress_task
15
+
16
+ account_app = typer.Typer(help="Manage qBraid account.")
17
+
18
+
19
+ @account_app.command(name="credits")
20
+ def account_credits():
21
+ """Get number of qBraid credits remaining."""
22
+
23
+ def get_credits() -> float:
24
+ from qbraid_core import QbraidClient
25
+
26
+ client = QbraidClient()
27
+ return client.user_credits_value()
28
+
29
+ qbraid_credits: float = run_progress_task(get_credits)
30
+ typer.secho(
31
+ f"{typer.style('qBraid credits remaining:')} "
32
+ f"{typer.style(f'{qbraid_credits:.4f}', fg=typer.colors.MAGENTA, bold=True)}",
33
+ nl=True, # Ensure a newline after output (default is True)
34
+ )
35
+ rich.print("\nFor more information, visit: https://docs.qbraid.com/home/pricing#credits")
36
+
37
+
38
+ @account_app.command(name="info")
39
+ def account_info():
40
+ """Get qBraid account (user) metadata."""
41
+
42
+ def get_user() -> dict[str, Any]:
43
+ from qbraid_core import QbraidSession
44
+
45
+ session = QbraidSession()
46
+ user = session.get_user()
47
+ personal_info: dict = user.get("personalInformation", {})
48
+ metadata = {
49
+ "_id": user.get("_id"),
50
+ "userName": user.get("userName"),
51
+ "email": user.get("email"),
52
+ "joinedDate": user.get("createdAt", "Unknown"),
53
+ "activePlan": user.get("activePlan", "") or "Free",
54
+ "organization": personal_info.get("organization", "") or "qbraid",
55
+ "role": personal_info.get("role", "") or "guest",
56
+ }
57
+
58
+ return metadata
59
+
60
+ info = run_progress_task(get_user)
61
+ rich.print(info)
62
+
63
+
64
+ if __name__ == "__main__":
65
+ account_app()
@@ -60,7 +60,7 @@ def devices_list( # pylint: disable=too-many-branches
60
60
  header_3 = "ID"
61
61
  header_4 = "Status"
62
62
  console.print(
63
- f"\n[bold]{header_1.ljust(12)}{header_2.ljust(35)}{header_3.ljust(41)}{header_4}[/bold]"
63
+ f"[bold]{header_1.ljust(12)}{header_2.ljust(35)}{header_3.ljust(41)}{header_4}[/bold]"
64
64
  )
65
65
  for device_provider, device_name, device_id, device_status in device_data:
66
66
  if device_status == "ONLINE":
@@ -88,7 +88,7 @@ def envs_create( # pylint: disable=too-many-statements
88
88
  slug_path = env_path / slug
89
89
  description = "None" if description == "" else description
90
90
 
91
- typer.echo("\n\n## qBraid Metadata ##\n")
91
+ typer.echo("## qBraid Metadata ##\n")
92
92
  typer.echo(f" name: {display_name}")
93
93
  typer.echo(f" description: {description}")
94
94
  typer.echo(f" tags: {tags}")
@@ -127,7 +127,7 @@ def envs_create( # pylint: disable=too-many-statements
127
127
 
128
128
  console = Console()
129
129
  console.print(
130
- f"\n[bold green]Successfully created qBraid environment: "
130
+ f"[bold green]Successfully created qBraid environment: "
131
131
  f"[/bold green][bold magenta]{name}[/bold magenta]\n"
132
132
  )
133
133
  typer.echo("# To activate this environment, use")
@@ -192,7 +192,7 @@ def envs_remove(
192
192
  description="Deleting local environment...",
193
193
  error_message="Failed to delete qBraid environment",
194
194
  )
195
- typer.echo(f"\nEnvironment '{name}' successfully removed.")
195
+ typer.echo(f"Environment '{name}' successfully removed.")
196
196
 
197
197
 
198
198
  @envs_app.command(name="list")
@@ -10,6 +10,7 @@ and executing operations with progress tracking within the qBraid CLI.
10
10
  import os
11
11
  import traceback
12
12
  from pathlib import Path
13
+ from time import sleep
13
14
  from typing import Any, Callable, Optional, Union
14
15
 
15
16
  import typer
@@ -129,11 +130,14 @@ def run_progress_task(
129
130
  try:
130
131
  result = operation(*args, **kwargs)
131
132
  progress.update(task, completed=100, status="Done")
133
+ sleep(0.15)
132
134
  return result
133
135
  except Exception as err: # pylint: disable=broad-exception-caught
134
136
  progress.update(task, completed=100, status="Failed")
135
137
  custom_message = error_message if error_message else str(err)
136
138
  return handle_error(message=custom_message)
139
+ finally:
140
+ progress.remove_task(task)
137
141
 
138
142
 
139
143
  def _format_list_items(items: list[str]) -> str:
@@ -120,7 +120,7 @@ def jobs_list(
120
120
  header_1 = "Job ID"
121
121
  header_2 = "Submitted"
122
122
  header_3 = "Status"
123
- console.print(f"\n[bold]{header_1.ljust(spacing)}{header_2.ljust(36)}{header_3}[/bold]")
123
+ console.print(f"[bold]{header_1.ljust(spacing)}{header_2.ljust(36)}{header_3}[/bold]")
124
124
  for job_id, submitted, status in job_data:
125
125
  if status == "COMPLETED":
126
126
  status_color = "green"
@@ -103,7 +103,7 @@ def confirm_updates(
103
103
  else:
104
104
  raise ValueError(f"Invalid mode: {mode}. Expected 'enable' or 'disable'.")
105
105
 
106
- typer.echo(f"\n==> WARNING: {provider}/{core_package} package required <==")
106
+ typer.echo(f"==> WARNING: {provider}/{core_package} package required <==")
107
107
  if (
108
108
  installed_version is not None
109
109
  and target_version is not None
@@ -6,27 +6,36 @@ Entrypoint for the qBraid CLI.
6
6
 
7
7
  """
8
8
 
9
+ import rich
9
10
  import typer
10
11
 
12
+ from qbraid_cli.account.app import account_app
11
13
  from qbraid_cli.admin.app import admin_app
12
14
  from qbraid_cli.configure.app import configure_app
13
- from qbraid_cli.credits.app import credits_app
14
15
  from qbraid_cli.devices.app import devices_app
15
- from qbraid_cli.envs.app import envs_app
16
16
  from qbraid_cli.jobs.app import jobs_app
17
- from qbraid_cli.kernels.app import kernels_app
18
- from qbraid_cli.pip.app import pip_app
17
+
18
+ try:
19
+ from qbraid_cli.envs.app import envs_app
20
+ from qbraid_cli.kernels.app import kernels_app
21
+ from qbraid_cli.pip.app import pip_app
22
+
23
+ ENVS_COMMANDS = True
24
+ except ImportError:
25
+ ENVS_COMMANDS = False
19
26
 
20
27
  app = typer.Typer(context_settings={"help_option_names": ["-h", "--help"]})
21
28
 
22
29
  app.add_typer(admin_app, name="admin")
23
30
  app.add_typer(configure_app, name="configure")
24
- app.add_typer(credits_app, name="credits")
31
+ app.add_typer(account_app, name="account")
25
32
  app.add_typer(devices_app, name="devices")
26
- app.add_typer(envs_app, name="envs")
27
33
  app.add_typer(jobs_app, name="jobs")
28
- app.add_typer(kernels_app, name="kernels")
29
- app.add_typer(pip_app, name="pip")
34
+
35
+ if ENVS_COMMANDS is True:
36
+ app.add_typer(envs_app, name="envs")
37
+ app.add_typer(kernels_app, name="kernels")
38
+ app.add_typer(pip_app, name="pip")
30
39
 
31
40
 
32
41
  def version_callback(value: bool):
@@ -59,7 +68,7 @@ def show_banner():
59
68
  typer.echo("")
60
69
  typer.echo("- Use 'qbraid --version' to see the current version.")
61
70
  typer.echo("")
62
- typer.echo("Reference Docs: https://docs.qbraid.com/cli/api-reference/qbraid")
71
+ rich.print("Reference Docs: https://docs.qbraid.com/cli/api-reference/qbraid")
63
72
 
64
73
 
65
74
  @app.callback(invoke_without_command=True)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: qbraid-cli
3
- Version: 0.8.7
3
+ Version: 0.9.0
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,11 +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: qbraid-core[environments]>=0.1.23
32
+ Requires-Dist: qbraid-core>=0.1.29
33
33
  Provides-Extra: jobs
34
34
  Requires-Dist: amazon-braket-sdk>=1.48.1; extra == "jobs"
35
+ Provides-Extra: envs
36
+ Requires-Dist: qbraid-core[environments]; extra == "envs"
35
37
  Provides-Extra: dev
36
- Requires-Dist: ruff; extra == "dev"
37
38
  Requires-Dist: isort; extra == "dev"
38
39
  Requires-Dist: black; extra == "dev"
39
40
  Requires-Dist: pytest; extra == "dev"
@@ -141,7 +142,7 @@ Options
141
142
 
142
143
  Commands
143
144
  configure Configure qBraid CLI options.
144
- credits Manage qBraid credits.
145
+ account Manage qBraid account.
145
146
  devices Manage qBraid quantum devices.
146
147
  envs Manage qBraid environments.
147
148
  jobs Manage qBraid quantum jobs.