qctrl-workflow-client 7.1.0__tar.gz → 7.2.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.
- {qctrl_workflow_client-7.1.0 → qctrl_workflow_client-7.2.0}/PKG-INFO +7 -6
- {qctrl_workflow_client-7.1.0 → qctrl_workflow_client-7.2.0}/pyproject.toml +45 -34
- {qctrl_workflow_client-7.1.0 → qctrl_workflow_client-7.2.0}/qctrlworkflowclient/__init__.py +1 -1
- {qctrl_workflow_client-7.1.0 → qctrl_workflow_client-7.2.0}/qctrlworkflowclient/router/api.py +64 -0
- {qctrl_workflow_client-7.1.0 → qctrl_workflow_client-7.2.0}/qctrlworkflowclient/utils.py +1 -1
- {qctrl_workflow_client-7.1.0 → qctrl_workflow_client-7.2.0}/LICENSE +0 -0
- {qctrl_workflow_client-7.1.0 → qctrl_workflow_client-7.2.0}/README.md +0 -0
- {qctrl_workflow_client-7.1.0 → qctrl_workflow_client-7.2.0}/qctrlworkflowclient/defaults.py +0 -0
- {qctrl_workflow_client-7.1.0 → qctrl_workflow_client-7.2.0}/qctrlworkflowclient/functions.py +0 -0
- {qctrl_workflow_client-7.1.0 → qctrl_workflow_client-7.2.0}/qctrlworkflowclient/products.py +0 -0
- {qctrl_workflow_client-7.1.0 → qctrl_workflow_client-7.2.0}/qctrlworkflowclient/router/__init__.py +0 -0
- {qctrl_workflow_client-7.1.0 → qctrl_workflow_client-7.2.0}/qctrlworkflowclient/router/base.py +0 -0
- {qctrl_workflow_client-7.1.0 → qctrl_workflow_client-7.2.0}/qctrlworkflowclient/router/local.py +0 -0
- {qctrl_workflow_client-7.1.0 → qctrl_workflow_client-7.2.0}/qctrlworkflowclient/settings.py +0 -0
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: qctrl-workflow-client
|
|
3
|
-
Version: 7.
|
|
3
|
+
Version: 7.2.0
|
|
4
4
|
Summary: Q-CTRL Workflow Client
|
|
5
5
|
License: https://q-ctrl.com/terms
|
|
6
|
-
Keywords: black opal,boulder opal,fire opal,nisq,open controls,q control,q ctrl,q-control,q-ctrl,qcontrol,qctrl,quantum,quantum algorithms,quantum circuits,quantum coding,quantum coding software,quantum computing,quantum control,quantum control software,quantum control theory,quantum engineering,quantum error correction,quantum firmware,quantum fundamentals,quantum sensing,qubit,qudit
|
|
6
|
+
Keywords: black opal,boulder opal,fire opal,ironstone opal,nisq,open controls,q control,q ctrl,q-control,q-ctrl,qcontrol,qctrl,quantum,quantum algorithms,quantum circuits,quantum coding,quantum coding software,quantum computing,quantum control,quantum control software,quantum control theory,quantum engineering,quantum error correction,quantum firmware,quantum fundamentals,quantum navigation,quantum sensing,qubit,qudit
|
|
7
7
|
Author: Q-CTRL
|
|
8
8
|
Author-email: support@q-ctrl.com
|
|
9
9
|
Maintainer: Q-CTRL
|
|
10
10
|
Maintainer-email: support@q-ctrl.com
|
|
11
|
-
Requires-Python: >=3.9
|
|
11
|
+
Requires-Python: >=3.9, <3.14
|
|
12
12
|
Classifier: Development Status :: 5 - Production/Stable
|
|
13
13
|
Classifier: Environment :: Console
|
|
14
14
|
Classifier: Intended Audience :: Developers
|
|
@@ -28,11 +28,11 @@ Classifier: Topic :: Scientific/Engineering :: Physics
|
|
|
28
28
|
Classifier: Topic :: Scientific/Engineering :: Visualization
|
|
29
29
|
Classifier: Topic :: Software Development :: Embedded Systems
|
|
30
30
|
Classifier: Topic :: System :: Distributed Computing
|
|
31
|
-
Requires-Dist: gql (>=3.
|
|
31
|
+
Requires-Dist: gql (>=3.5.3,<4.0.0)
|
|
32
32
|
Requires-Dist: importlib-metadata (>=8.7.0,<9.0.0)
|
|
33
33
|
Requires-Dist: packaging (>=25.0,<26.0)
|
|
34
|
-
Requires-Dist: qctrl-client (>=
|
|
35
|
-
Requires-Dist: qctrl-commons (>=25.1.
|
|
34
|
+
Requires-Dist: qctrl-client (>=14.0.0,<15.0.0)
|
|
35
|
+
Requires-Dist: qctrl-commons (>=25.1.2,<26.0.0)
|
|
36
36
|
Requires-Dist: requests (>=2.32.4,<3.0.0)
|
|
37
37
|
Requires-Dist: tenacity (>=9.1.2,<10.0.0)
|
|
38
38
|
Requires-Dist: tomli (>=2.2.1,<3.0.0)
|
|
@@ -41,6 +41,7 @@ Project-URL: Facebook, https://www.facebook.com/qctrl
|
|
|
41
41
|
Project-URL: GitHub, https://github.com/qctrl
|
|
42
42
|
Project-URL: Homepage, https://q-ctrl.com
|
|
43
43
|
Project-URL: LinkedIn, https://www.linkedin.com/company/q-ctrl/
|
|
44
|
+
Project-URL: Source, https://github.com/qctrl/python-workflow-client
|
|
44
45
|
Project-URL: X, https://x.com/qctrlHQ
|
|
45
46
|
Project-URL: YouTube, https://www.youtube.com/qctrl
|
|
46
47
|
Description-Content-Type: text/markdown
|
|
@@ -1,10 +1,15 @@
|
|
|
1
|
-
[
|
|
1
|
+
[project]
|
|
2
2
|
name = "qctrl-workflow-client"
|
|
3
|
-
version = "7.1.0"
|
|
4
3
|
description = "Q-CTRL Workflow Client"
|
|
4
|
+
requires-python = ">=3.9, <3.14"
|
|
5
|
+
version = "7.2.0"
|
|
5
6
|
license = "https://q-ctrl.com/terms"
|
|
6
|
-
authors = [
|
|
7
|
-
|
|
7
|
+
authors = [
|
|
8
|
+
{ name = "Q-CTRL", email = "support@q-ctrl.com" },
|
|
9
|
+
]
|
|
10
|
+
maintainers = [
|
|
11
|
+
{ name = "Q-CTRL", email = "support@q-ctrl.com" },
|
|
12
|
+
]
|
|
8
13
|
readme = "README.md"
|
|
9
14
|
homepage = "https://q-ctrl.com"
|
|
10
15
|
documentation = "https://docs.q-ctrl.com"
|
|
@@ -12,6 +17,7 @@ keywords = [
|
|
|
12
17
|
"black opal",
|
|
13
18
|
"boulder opal",
|
|
14
19
|
"fire opal",
|
|
20
|
+
"ironstone opal",
|
|
15
21
|
"nisq",
|
|
16
22
|
"open controls",
|
|
17
23
|
"q control",
|
|
@@ -33,37 +39,47 @@ keywords = [
|
|
|
33
39
|
"quantum error correction",
|
|
34
40
|
"quantum firmware",
|
|
35
41
|
"quantum fundamentals",
|
|
42
|
+
"quantum navigation",
|
|
36
43
|
"quantum sensing",
|
|
37
44
|
"qubit",
|
|
38
45
|
"qudit",
|
|
39
46
|
]
|
|
40
|
-
classifiers = [
|
|
41
|
-
"Development Status :: 5 - Production/Stable",
|
|
42
|
-
"Environment :: Console",
|
|
43
|
-
"Intended Audience :: Developers",
|
|
44
|
-
"Intended Audience :: Education",
|
|
45
|
-
"Intended Audience :: Science/Research",
|
|
46
|
-
"Natural Language :: English",
|
|
47
|
-
"Operating System :: OS Independent",
|
|
48
|
-
"Programming Language :: Python :: 3.9",
|
|
49
|
-
"Programming Language :: Python :: 3.10",
|
|
50
|
-
"Programming Language :: Python :: 3.11",
|
|
51
|
-
"Programming Language :: Python :: 3.12",
|
|
52
|
-
"Topic :: Internet :: WWW/HTTP",
|
|
53
|
-
"Topic :: Scientific/Engineering :: Physics",
|
|
54
|
-
"Topic :: Scientific/Engineering :: Visualization",
|
|
55
|
-
"Topic :: Software Development :: Embedded Systems",
|
|
56
|
-
"Topic :: System :: Distributed Computing",
|
|
57
|
-
]
|
|
58
|
-
packages = [{ include = "qctrlworkflowclient" }]
|
|
59
47
|
|
|
60
|
-
[
|
|
48
|
+
dynamic = ["classifiers", "dependencies"]
|
|
49
|
+
|
|
50
|
+
[project.urls]
|
|
51
|
+
Source = "https://github.com/qctrl/python-workflow-client"
|
|
52
|
+
Homepage = "https://q-ctrl.com"
|
|
53
|
+
Documentation = "https://docs.q-ctrl.com"
|
|
61
54
|
LinkedIn = "https://www.linkedin.com/company/q-ctrl/"
|
|
62
55
|
Facebook = "https://www.facebook.com/qctrl"
|
|
63
56
|
X = "https://x.com/qctrlHQ"
|
|
64
57
|
YouTube = "https://www.youtube.com/qctrl"
|
|
65
58
|
GitHub = "https://github.com/qctrl"
|
|
66
59
|
|
|
60
|
+
[build-system]
|
|
61
|
+
requires = ["poetry-core"]
|
|
62
|
+
build-backend = "poetry.core.masonry.api"
|
|
63
|
+
|
|
64
|
+
[tool.poetry]
|
|
65
|
+
classifiers = [
|
|
66
|
+
"Development Status :: 5 - Production/Stable",
|
|
67
|
+
"Environment :: Console",
|
|
68
|
+
"Intended Audience :: Developers",
|
|
69
|
+
"Intended Audience :: Education",
|
|
70
|
+
"Intended Audience :: Science/Research",
|
|
71
|
+
"Natural Language :: English",
|
|
72
|
+
"Operating System :: OS Independent",
|
|
73
|
+
"Topic :: Internet :: WWW/HTTP",
|
|
74
|
+
"Topic :: Scientific/Engineering :: Physics",
|
|
75
|
+
"Topic :: Scientific/Engineering :: Visualization",
|
|
76
|
+
"Topic :: Software Development :: Embedded Systems",
|
|
77
|
+
"Topic :: System :: Distributed Computing"
|
|
78
|
+
]
|
|
79
|
+
|
|
80
|
+
packages = [{ include = "qctrlworkflowclient" }]
|
|
81
|
+
|
|
82
|
+
|
|
67
83
|
[[tool.poetry.source]]
|
|
68
84
|
name = "PyPI"
|
|
69
85
|
priority = "primary"
|
|
@@ -74,15 +90,14 @@ url = 'https://qctrl.jfrog.io/artifactory/api/pypi/qctrl/simple/'
|
|
|
74
90
|
priority = "supplemental"
|
|
75
91
|
|
|
76
92
|
[tool.poetry.dependencies]
|
|
77
|
-
python = ">=3.9, <3.14"
|
|
78
93
|
tomli = "^2.2.1"
|
|
79
94
|
importlib-metadata = "^8.7.0"
|
|
80
|
-
gql = "^3.
|
|
95
|
+
gql = "^3.5.3"
|
|
81
96
|
tenacity = "^9.1.2"
|
|
82
97
|
requests = "^2.32.4"
|
|
83
98
|
packaging = "^25.0"
|
|
84
|
-
qctrl-commons = { version = "^25.1.
|
|
85
|
-
qctrl-client = { version = "^
|
|
99
|
+
qctrl-commons = { version = "^25.1.2", source = "PyPI" }
|
|
100
|
+
qctrl-client = { version = "^14.0.0", source = "PyPI" }
|
|
86
101
|
|
|
87
102
|
[tool.poetry.group.dev.dependencies]
|
|
88
103
|
black = "^25.1.0"
|
|
@@ -90,10 +105,10 @@ isort = "^6.0.0"
|
|
|
90
105
|
pre-commit = "^4.1.0"
|
|
91
106
|
pylint = "^3.3.4"
|
|
92
107
|
pytest = "^8.3.4"
|
|
93
|
-
pytest-cov = "^
|
|
108
|
+
pytest-cov = "^7.0.0"
|
|
94
109
|
pytest-mock = "^3.10.0"
|
|
95
110
|
pytest-xdist = "^3.2.1"
|
|
96
|
-
qctrl-core-workflow-manager = "^5.1.
|
|
111
|
+
qctrl-core-workflow-manager = "^5.1.1"
|
|
97
112
|
|
|
98
113
|
[tool.isort]
|
|
99
114
|
profile = "black"
|
|
@@ -101,7 +116,3 @@ force_grid_wrap = "2"
|
|
|
101
116
|
|
|
102
117
|
[tool.pytest.ini_options]
|
|
103
118
|
addopts = "--cov=qctrlworkflowclient --cov-fail-under=80 --cov-report=term-missing:skip-covered"
|
|
104
|
-
|
|
105
|
-
[build-system]
|
|
106
|
-
requires = ["poetry-core"]
|
|
107
|
-
build-backend = "poetry.core.masonry.api"
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
# distributed under the License is distributed on an "AS IS" BASIS. See the
|
|
12
12
|
# License for the specific language.
|
|
13
13
|
|
|
14
|
-
__version__ = "7.
|
|
14
|
+
__version__ = "7.2.0"
|
|
15
15
|
|
|
16
16
|
from .defaults import get_authenticated_client_for_product
|
|
17
17
|
from .functions import (
|
{qctrl_workflow_client-7.1.0 → qctrl_workflow_client-7.2.0}/qctrlworkflowclient/router/api.py
RENAMED
|
@@ -39,6 +39,7 @@ from tenacity import (
|
|
|
39
39
|
wait_chain,
|
|
40
40
|
wait_fixed,
|
|
41
41
|
)
|
|
42
|
+
from typing_extensions import TypedDict
|
|
42
43
|
|
|
43
44
|
from qctrlworkflowclient.products import Product
|
|
44
45
|
from qctrlworkflowclient.settings import CoreClientSettings
|
|
@@ -173,6 +174,22 @@ class Action:
|
|
|
173
174
|
return self.status == ActionStatus.REVOKED.value
|
|
174
175
|
|
|
175
176
|
|
|
177
|
+
class PresignedUrlData(TypedDict):
|
|
178
|
+
"""
|
|
179
|
+
The data returned by a presigned URL mutation.
|
|
180
|
+
|
|
181
|
+
Attributes
|
|
182
|
+
----------
|
|
183
|
+
id : str
|
|
184
|
+
The storage ID associated with the presigned URL.
|
|
185
|
+
url : str
|
|
186
|
+
The presigned URL for uploading data.
|
|
187
|
+
"""
|
|
188
|
+
|
|
189
|
+
id: str
|
|
190
|
+
url: str
|
|
191
|
+
|
|
192
|
+
|
|
176
193
|
class ApiRouter(BaseRouter):
|
|
177
194
|
"""
|
|
178
195
|
Remotely execute the workflow using the `startCoreWorkflow`
|
|
@@ -838,6 +855,53 @@ class ApiRouter(BaseRouter):
|
|
|
838
855
|
)
|
|
839
856
|
return response["actions"]["actions"]
|
|
840
857
|
|
|
858
|
+
def create_presigned_url_upload(self, checksum: str) -> PresignedUrlData:
|
|
859
|
+
"""
|
|
860
|
+
Create a presigned URL for uploading data using the provided checksum.
|
|
861
|
+
|
|
862
|
+
Parameters
|
|
863
|
+
----------
|
|
864
|
+
checksum : str
|
|
865
|
+
The Base64-encoded SHA-256 checksum of the data to be uploaded.
|
|
866
|
+
|
|
867
|
+
Returns
|
|
868
|
+
-------
|
|
869
|
+
PresignedUrlData
|
|
870
|
+
The presigned URL data containing the storage ID and upload URL.
|
|
871
|
+
|
|
872
|
+
Raises
|
|
873
|
+
------
|
|
874
|
+
qctrlclient.exceptions.GraphQLClientError
|
|
875
|
+
If the GraphQL query execution fails.
|
|
876
|
+
"""
|
|
877
|
+
query = gql.gql(
|
|
878
|
+
"""
|
|
879
|
+
mutation ($input: CreatePresignedUrlUploadInput!) {
|
|
880
|
+
createPresignedUrlUpload(input: $input) {
|
|
881
|
+
presignedUrlData {
|
|
882
|
+
id: storageId
|
|
883
|
+
url
|
|
884
|
+
}
|
|
885
|
+
errors {
|
|
886
|
+
fields
|
|
887
|
+
message
|
|
888
|
+
}
|
|
889
|
+
}
|
|
890
|
+
}
|
|
891
|
+
"""
|
|
892
|
+
)
|
|
893
|
+
|
|
894
|
+
response = self._client.execute(
|
|
895
|
+
query,
|
|
896
|
+
variable_values={
|
|
897
|
+
"input": {
|
|
898
|
+
"clientApp": self._settings.product.value.registry,
|
|
899
|
+
"checksum": checksum,
|
|
900
|
+
}
|
|
901
|
+
},
|
|
902
|
+
)
|
|
903
|
+
return response["createPresignedUrlUpload"]["presignedUrlData"]
|
|
904
|
+
|
|
841
905
|
|
|
842
906
|
class ParallelCollector:
|
|
843
907
|
"""
|
|
@@ -148,7 +148,7 @@ def _get_package_name(module: ModuleType) -> str:
|
|
|
148
148
|
Path.joinpath(Path(module.__path__[0]).parent, "pyproject.toml"), "rb"
|
|
149
149
|
) as file:
|
|
150
150
|
config = tomli.load(file)
|
|
151
|
-
return config["
|
|
151
|
+
return config["project"]["name"]
|
|
152
152
|
|
|
153
153
|
|
|
154
154
|
def get_package_versions(package_names: list[str]) -> list[tuple[str, str]]:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{qctrl_workflow_client-7.1.0 → qctrl_workflow_client-7.2.0}/qctrlworkflowclient/functions.py
RENAMED
|
File without changes
|
|
File without changes
|
{qctrl_workflow_client-7.1.0 → qctrl_workflow_client-7.2.0}/qctrlworkflowclient/router/__init__.py
RENAMED
|
File without changes
|
{qctrl_workflow_client-7.1.0 → qctrl_workflow_client-7.2.0}/qctrlworkflowclient/router/base.py
RENAMED
|
File without changes
|
{qctrl_workflow_client-7.1.0 → qctrl_workflow_client-7.2.0}/qctrlworkflowclient/router/local.py
RENAMED
|
File without changes
|
|
File without changes
|