iqm-station-control-client 3.2__tar.gz → 3.4__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.
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/CHANGELOG.rst +21 -0
- {iqm_station_control_client-3.2/src/iqm_station_control_client.egg-info → iqm_station_control_client-3.4}/PKG-INFO +1 -1
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/src/iqm/station_control/client/station_control.py +20 -9
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4/src/iqm_station_control_client.egg-info}/PKG-INFO +1 -1
- iqm_station_control_client-3.4/version.txt +1 -0
- iqm_station_control_client-3.2/version.txt +0 -1
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/LICENSE.txt +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/MANIFEST.in +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/README.rst +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/docs/API.rst +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/docs/Makefile +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/docs/_static/css/custom.css +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/docs/_static/images/favicon.ico +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/docs/_static/images/logo.png +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/docs/_templates/autosummary-class-template.rst +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/docs/_templates/autosummary-module-template.rst +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/docs/changelog.rst +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/docs/conf.py +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/docs/index.rst +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/docs/license.rst +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/pyproject.toml +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/requirements/base.in +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/requirements/base.txt +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/setup.cfg +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/setup.py +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/src/iqm/station_control/client/__init__.py +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/src/iqm/station_control/client/list_models.py +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/src/iqm/station_control/client/serializers/__init__.py +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/src/iqm/station_control/client/serializers/channel_property_serializer.py +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/src/iqm/station_control/client/serializers/datetime_serializers.py +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/src/iqm/station_control/client/serializers/playlist_serializers.py +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/src/iqm/station_control/client/serializers/run_serializers.py +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/src/iqm/station_control/client/serializers/setting_node_serializer.py +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/src/iqm/station_control/client/serializers/struct_serializer.py +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/src/iqm/station_control/client/serializers/sweep_serializers.py +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/src/iqm/station_control/client/serializers/task_serializers.py +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/src/iqm/station_control/client/utils.py +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/src/iqm/station_control/interface/__init__.py +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/src/iqm/station_control/interface/list_with_meta.py +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/src/iqm/station_control/interface/models/__init__.py +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/src/iqm/station_control/interface/models/dut.py +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/src/iqm/station_control/interface/models/observation.py +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/src/iqm/station_control/interface/models/observation_set.py +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/src/iqm/station_control/interface/models/run.py +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/src/iqm/station_control/interface/models/sequence.py +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/src/iqm/station_control/interface/models/sweep.py +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/src/iqm/station_control/interface/models/type_aliases.py +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/src/iqm/station_control/interface/pydantic_base.py +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/src/iqm_station_control_client.egg-info/SOURCES.txt +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/src/iqm_station_control_client.egg-info/dependency_links.txt +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/src/iqm_station_control_client.egg-info/requires.txt +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/src/iqm_station_control_client.egg-info/top_level.txt +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/tests/.pylintrc +0 -0
- {iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/tests/__init__.py +0 -0
|
@@ -2,6 +2,27 @@
|
|
|
2
2
|
Changelog
|
|
3
3
|
=========
|
|
4
4
|
|
|
5
|
+
Version 3.4 (2025-03-05)
|
|
6
|
+
========================
|
|
7
|
+
|
|
8
|
+
Features
|
|
9
|
+
--------
|
|
10
|
+
|
|
11
|
+
- Remove general RequestError and use new specific error classes instead, and improve error handling in general.
|
|
12
|
+
- Start using new "DELETE sweeps/{sweep_id}" endpoint instead of the deprecated one.
|
|
13
|
+
- Use HTTPStatus code names instead of numbers for better clarity. No functional changes.
|
|
14
|
+
- The ``/docs`` endpoint shows relevant metadata, e.g. the package version.
|
|
15
|
+
|
|
16
|
+
Version 3.3 (2025-02-28)
|
|
17
|
+
========================
|
|
18
|
+
|
|
19
|
+
Features
|
|
20
|
+
--------
|
|
21
|
+
|
|
22
|
+
- Add ``StationControlClient.get_exa_configuration`` that returns the recommended EXA configuration from the server.
|
|
23
|
+
:issue:`SW-1078`
|
|
24
|
+
|
|
25
|
+
|
|
5
26
|
Version 3.2 (2025-02-28)
|
|
6
27
|
========================
|
|
7
28
|
|
|
@@ -29,7 +29,12 @@ from packaging.version import Version, parse
|
|
|
29
29
|
import requests
|
|
30
30
|
|
|
31
31
|
from exa.common.data.setting_node import SettingNode
|
|
32
|
-
from exa.common.errors.
|
|
32
|
+
from exa.common.errors.server_errors import (
|
|
33
|
+
STATUS_CODE_TO_ERROR_MAPPING,
|
|
34
|
+
InternalServerError,
|
|
35
|
+
NotFoundError,
|
|
36
|
+
StationControlError,
|
|
37
|
+
)
|
|
33
38
|
from exa.common.qcm_data.qcm_data_client import QCMDataClient
|
|
34
39
|
from iqm.station_control.client.list_models import (
|
|
35
40
|
DutFieldDataList,
|
|
@@ -159,6 +164,12 @@ class StationControlClient:
|
|
|
159
164
|
response = self._send_request(requests.get, "configuration")
|
|
160
165
|
return response.json()
|
|
161
166
|
|
|
167
|
+
@cache
|
|
168
|
+
def get_exa_configuration(self) -> str:
|
|
169
|
+
"""Return the recommended EXA configuration from the server."""
|
|
170
|
+
response = self._send_request(requests.get, "exa/configuration")
|
|
171
|
+
return response.content.decode("utf-8")
|
|
172
|
+
|
|
162
173
|
def get_or_create_software_version_set(self, software_version_set: SoftwareVersionSet) -> int:
|
|
163
174
|
"""Get software version set ID from the database, or create if it doesn't exist."""
|
|
164
175
|
# FIXME: We don't have information if the object was created or fetched. Thus, server always responds 200 (OK).
|
|
@@ -180,8 +191,8 @@ class StationControlClient:
|
|
|
180
191
|
"""Get a raw chip design record matching the given chip label."""
|
|
181
192
|
try:
|
|
182
193
|
response = self._send_request(requests.get, f"chip-design-records/{dut_label}")
|
|
183
|
-
except
|
|
184
|
-
if
|
|
194
|
+
except StationControlError as err:
|
|
195
|
+
if isinstance(err, NotFoundError) and self._qcm_data_client:
|
|
185
196
|
return self._qcm_data_client.get_chip_design_record(dut_label)
|
|
186
197
|
raise err
|
|
187
198
|
return response.json()
|
|
@@ -224,7 +235,7 @@ class StationControlClient:
|
|
|
224
235
|
in monolithic mode or successful submission to the task queue in remote mode.
|
|
225
236
|
|
|
226
237
|
Raises:
|
|
227
|
-
|
|
238
|
+
ExaError if submitting a sweep failed.
|
|
228
239
|
|
|
229
240
|
"""
|
|
230
241
|
data = serialize_sweep_task_request(sweep_definition, queue_name="sweeps")
|
|
@@ -247,7 +258,7 @@ class StationControlClient:
|
|
|
247
258
|
|
|
248
259
|
def delete_sweep(self, sweep_id: uuid.UUID) -> None:
|
|
249
260
|
"""Delete sweep in the database."""
|
|
250
|
-
self._send_request(requests.delete, f"sweeps/{sweep_id}
|
|
261
|
+
self._send_request(requests.delete, f"sweeps/{sweep_id}")
|
|
251
262
|
|
|
252
263
|
def get_sweep_results(self, sweep_id: uuid.UUID) -> SweepResults:
|
|
253
264
|
"""Get N-dimensional sweep results from the database."""
|
|
@@ -644,7 +655,7 @@ class StationControlClient:
|
|
|
644
655
|
def _poll_task(self, task_id: str) -> dict:
|
|
645
656
|
task = self._send_request(requests.get, f"tasks/{task_id}").json()
|
|
646
657
|
if task["task_status"] == "FAILURE":
|
|
647
|
-
raise
|
|
658
|
+
raise InternalServerError(task)
|
|
648
659
|
return task
|
|
649
660
|
|
|
650
661
|
def _send_request(
|
|
@@ -675,9 +686,9 @@ class StationControlClient:
|
|
|
675
686
|
error_message = response_json["detail"]
|
|
676
687
|
except json.JSONDecodeError:
|
|
677
688
|
error_message = response.text
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
)
|
|
689
|
+
|
|
690
|
+
error_class = STATUS_CODE_TO_ERROR_MAPPING[response.status_code]
|
|
691
|
+
raise error_class(error_message)
|
|
681
692
|
return response
|
|
682
693
|
|
|
683
694
|
def _check_api_versions(self):
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.4
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
3.2
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/docs/_static/css/custom.css
RENAMED
|
File without changes
|
{iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/docs/_static/images/favicon.ico
RENAMED
|
File without changes
|
{iqm_station_control_client-3.2 → iqm_station_control_client-3.4}/docs/_static/images/logo.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|