iqm-station-control-client 7.1.0__py3-none-any.whl → 8.0.0__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.
@@ -49,7 +49,7 @@ from iqm.station_control.client.station_control import StationControlClient
49
49
  from iqm.station_control.interface.models import (
50
50
  DutData,
51
51
  DutFieldData,
52
- JobStatus,
52
+ JobExecutorStatus,
53
53
  Statuses,
54
54
  SweepData,
55
55
  SweepDefinition,
@@ -292,20 +292,20 @@ def payload_to_sweep(job_payload: bytes) -> SweepDefinition:
292
292
  return sweep
293
293
 
294
294
 
295
- def to_job_status(job_status: proto.JobStatus) -> JobStatus:
295
+ def to_job_status(job_status: proto.JobStatus) -> JobExecutorStatus:
296
296
  match job_status:
297
297
  case proto.JobStatus.IN_QUEUE:
298
- return JobStatus.PENDING_EXECUTION
298
+ return JobExecutorStatus.PENDING_EXECUTION
299
299
  case proto.JobStatus.EXECUTING:
300
- return JobStatus.EXECUTION_START
300
+ return JobExecutorStatus.EXECUTION_STARTED
301
301
  case proto.JobStatus.FAILED:
302
- return JobStatus.FAILED
302
+ return JobExecutorStatus.FAILED
303
303
  case proto.JobStatus.COMPLETED:
304
- return JobStatus.READY
304
+ return JobExecutorStatus.READY
305
305
  case proto.JobStatus.INTERRUPTED:
306
- return JobStatus.ABORTED
306
+ return JobExecutorStatus.ABORTED
307
307
  case proto.JobStatus.CANCELLED:
308
- return JobStatus.ABORTED
308
+ return JobExecutorStatus.ABORTED
309
309
  raise ValueError(f"Unknown job status: '{job_status}'")
310
310
 
311
311
 
@@ -28,7 +28,7 @@ from exa.common.sweep.database_serialization import decode_and_validate_sweeps,
28
28
  from iqm.station_control.client.serializers.datetime_serializers import deserialize_datetime, serialize_datetime
29
29
  from iqm.station_control.client.serializers.playlist_serializers import pack_playlist, unpack_playlist
30
30
  from iqm.station_control.interface.models import SweepData, SweepDefinition, SweepResults
31
- from iqm.station_control.interface.models.jobs import JobStatus
31
+ from iqm.station_control.interface.models.jobs import JobExecutorStatus
32
32
 
33
33
 
34
34
  def serialize_sweep_definition(sweep_definition: SweepDefinition) -> SweepDefinitionProto:
@@ -91,7 +91,7 @@ def deserialize_sweep_data(data: dict) -> SweepData:
91
91
  modified_timestamp=deserialize_datetime(data["modified_timestamp"]),
92
92
  begin_timestamp=deserialize_datetime(data["begin_timestamp"]),
93
93
  end_timestamp=deserialize_datetime(data["end_timestamp"]),
94
- job_status=JobStatus(data["job_status"]),
94
+ job_status=JobExecutorStatus(data["job_status"]),
95
95
  )
96
96
 
97
97
 
@@ -88,7 +88,7 @@ from iqm.station_control.interface.models import (
88
88
  SweepDefinition,
89
89
  SweepResults,
90
90
  )
91
- from iqm.station_control.interface.models.jobs import JobData, JobStatus
91
+ from iqm.station_control.interface.models.jobs import JobData, JobExecutorStatus
92
92
  from iqm.station_control.interface.pydantic_base import PydanticBase
93
93
 
94
94
  logger = logging.getLogger(__name__)
@@ -684,7 +684,7 @@ class StationControlClient:
684
684
  update_progress_callback = update_progress_callback or (lambda status: None)
685
685
  try:
686
686
  job_status = self._poll_job_status_until_execution_start(job_id, update_progress_callback)
687
- if JobStatus(job_status) not in JobStatus.terminal_statuses():
687
+ if JobExecutorStatus(job_status) not in JobExecutorStatus.terminal_statuses():
688
688
  self._poll_job_status_until_terminal(job_id, update_progress_callback)
689
689
  except KeyboardInterrupt as exc:
690
690
  logger.info("Caught %s, revoking job %s", exc, job_id)
@@ -694,12 +694,12 @@ class StationControlClient:
694
694
 
695
695
  def _poll_job_status_until_execution_start(
696
696
  self, job_id: str, update_progress_callback: Callable[[Statuses], None]
697
- ) -> JobStatus:
697
+ ) -> JobExecutorStatus:
698
698
  # Keep polling job status as long as it's PENDING, and update progress with `update_progress_callback`.
699
699
  max_seen_position = 0
700
700
  while True:
701
701
  job = self._poll_job(job_id)
702
- if job.job_status >= JobStatus.EXECUTION_START:
702
+ if job.job_status >= JobExecutorStatus.EXECUTION_STARTED:
703
703
  if max_seen_position:
704
704
  update_progress_callback([("Progress in queue", max_seen_position, max_seen_position)])
705
705
  return job.job_status
@@ -721,14 +721,14 @@ class StationControlClient:
721
721
  while True:
722
722
  job = self._poll_job(job_id)
723
723
  update_progress_callback(job.job_result.parallel_sweep_progress)
724
- if job.job_status in JobStatus.terminal_statuses():
724
+ if job.job_status in JobExecutorStatus.terminal_statuses():
725
725
  return
726
726
  sleep(1)
727
727
 
728
728
  def _poll_job(self, job_id: str) -> JobData:
729
729
  response = self._send_request(requests.get, f"jobs/{job_id}")
730
730
  job = JobData.model_validate(response.json())
731
- if job.job_status == JobStatus.FAILED:
731
+ if job.job_status == JobExecutorStatus.FAILED:
732
732
  raise InternalServerError(f"Job: {job.job_id}\n{job.job_error}")
733
733
  return job
734
734
 
@@ -15,7 +15,7 @@
15
15
 
16
16
  from iqm.station_control.interface.models.dut import DutData, DutFieldData
17
17
  from iqm.station_control.interface.models.jobs import (
18
- JobStatus,
18
+ JobExecutorStatus,
19
19
  )
20
20
  from iqm.station_control.interface.models.observation import (
21
21
  ObservationData,
@@ -26,7 +26,7 @@ from iqm.station_control.interface.pydantic_base import PydanticBase
26
26
  class TimelineEntry(PydanticBase):
27
27
  """Status and timestamp pair as described in a job timeline."""
28
28
 
29
- status: JobStatus
29
+ status: JobExecutorStatus
30
30
  timestamp: datetime
31
31
 
32
32
 
@@ -49,16 +49,16 @@ class JobData(PydanticBase):
49
49
  """Job response data model"""
50
50
 
51
51
  job_id: UUID
52
- job_status: JobStatus
52
+ job_status: JobExecutorStatus
53
53
  job_result: JobResult
54
54
  job_error: JobError | None
55
55
  position: int | None
56
56
 
57
57
 
58
58
  @functools.total_ordering
59
- class JobStatus(Enum):
59
+ class JobExecutorStatus(Enum):
60
60
  """Enumeration of different states a job can be in. The ordering of these statuses is important,
61
- and execution logic relies on it. Thus if a new status is added, ensure that it is slotted
61
+ and execution logic relies on it. Thus, if a new status is added, ensure that it is slotted
62
62
  in at the appropriate place. See the __lt__ implementation for further details.
63
63
  """
64
64
 
@@ -66,24 +66,24 @@ class JobStatus(Enum):
66
66
  RECEIVED = "received"
67
67
 
68
68
  # Validating the job
69
- VALIDATING = "validating"
70
- ACCEPTED = "accepted"
71
-
72
- PREPARING_CALIBRATION = "preparing_calibration"
69
+ VALIDATION_STARTED = "validation_started"
70
+ VALIDATION_ENDED = "validation_ended"
73
71
 
74
72
  # Running PulLA
75
- PENDING_COMPILATION = "pending_compilation"
76
- COMPILING = "compiling"
77
- COMPILED = "compiled"
73
+ FETCH_CALIBRATION_STARTED = "fetch_calibration_started"
74
+ FETCH_CALIBRATION_ENDED = "fetch_calibration_ended"
75
+ COMPILATION_STARTED = "compilation_started"
76
+ COMPILATION_ENDED = "compilation_ended"
78
77
 
79
78
  # Executing sweep
80
- STORING_SWEEP_METADATA = "storing_sweep_metadata"
81
- METADATA_STORED = "metadata_stored"
79
+ SAVE_SWEEP_METADATA_STARTED = "save_sweep_metadata_started"
80
+ SAVE_SWEEP_METADATA_ENDED = "save_sweep_metadata_ended"
82
81
  PENDING_EXECUTION = "pending_execution"
83
- EXECUTION_START = "execution_start"
84
- EXECUTION_END = "execution_end"
85
- PENDING_POST_PROCESSING = "pending_post_processing"
86
- POST_PROCESSING = "post_processing"
82
+ EXECUTION_STARTED = "execution_started"
83
+ EXECUTION_ENDED = "execution_ended"
84
+ POST_PROCESSING_PENDING = "post_processing_pending"
85
+ POST_PROCESSING_STARTED = "post_processing_started"
86
+ POST_PROCESSING_ENDED = "post_processing_ended"
87
87
  READY = "ready"
88
88
 
89
89
  # Job failed, can happen at any stage
@@ -101,10 +101,10 @@ class JobStatus(Enum):
101
101
  def __eq__(self, other):
102
102
  if isinstance(other, str):
103
103
  try:
104
- other = JobStatus(other.lower())
104
+ other = JobExecutorStatus(other.lower())
105
105
  except ValueError:
106
106
  return False
107
- elif not isinstance(other, JobStatus):
107
+ elif not isinstance(other, JobExecutorStatus):
108
108
  return NotImplemented
109
109
  return self.name == other.name
110
110
 
@@ -112,21 +112,21 @@ class JobStatus(Enum):
112
112
  """Enable comparison according to definition order.
113
113
 
114
114
  Examples:
115
- >>> JobStatus.ACCEPTED < JobStatus.COMPILED
115
+ >>> JobExecutorStatus.VALIDATION_ENDED < JobExecutorStatus.COMPILATION_ENDED
116
116
  True
117
117
 
118
118
  """
119
119
  if isinstance(other, str):
120
120
  try:
121
- other = JobStatus(other.lower())
121
+ other = JobExecutorStatus(other.lower())
122
122
  except ValueError:
123
123
  return NotImplemented
124
- elif not isinstance(other, JobStatus):
124
+ elif not isinstance(other, JobExecutorStatus):
125
125
  return NotImplemented
126
- members = list(JobStatus.__members__.values())
126
+ members = list(JobExecutorStatus.__members__.values())
127
127
  return members.index(self) < members.index(other)
128
128
 
129
129
  @classmethod
130
- def terminal_statuses(cls) -> set[JobStatus]:
130
+ def terminal_statuses(cls) -> set[JobExecutorStatus]:
131
131
  """Statuses from which the execution can't continue."""
132
132
  return {cls.ABORTED, cls.FAILED, cls.READY}
@@ -18,7 +18,7 @@ from __future__ import annotations
18
18
  from datetime import datetime
19
19
  from uuid import UUID
20
20
 
21
- from iqm.station_control.interface.models import JobStatus
21
+ from iqm.station_control.interface.models import JobExecutorStatus
22
22
  from iqm.station_control.interface.pydantic_base import PydanticBase
23
23
 
24
24
 
@@ -26,7 +26,7 @@ class JobStateTimestamp(PydanticBase):
26
26
  """Represents a single timestamped state for a job."""
27
27
 
28
28
  job_id: UUID
29
- status: JobStatus
29
+ status: JobExecutorStatus
30
30
  timestamp: datetime
31
31
 
32
32
 
@@ -40,6 +40,6 @@ class JobsInQueue(PydanticBase):
40
40
  class QueueState(PydanticBase):
41
41
  """Describes the state of a single job queue."""
42
42
 
43
- queue: JobStatus
43
+ queue: JobExecutorStatus
44
44
  jobs_in_queue: int
45
45
  completed_jobs: int
@@ -21,7 +21,7 @@ from iqm.models.playlist import Playlist
21
21
 
22
22
  from exa.common.data.setting_node import SettingNode
23
23
  from exa.common.sweep.util import NdSweep
24
- from iqm.station_control.interface.models.jobs import JobStatus
24
+ from iqm.station_control.interface.models.jobs import JobExecutorStatus
25
25
 
26
26
 
27
27
  @dataclass(kw_only=True)
@@ -62,5 +62,5 @@ class SweepData(SweepBase):
62
62
  """Time when the sweep began in the station control."""
63
63
  end_timestamp: datetime | None
64
64
  """Time when the sweep ended in the station control."""
65
- job_status: JobStatus
65
+ job_status: JobExecutorStatus
66
66
  """Status of sweep execution."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: iqm-station-control-client
3
- Version: 7.1.0
3
+ Version: 8.0.0
4
4
  Summary: Python client for communicating with Station Control Service
5
5
  Author-email: IQM Finland Oy <info@meetiqm.com>
6
6
  License: Apache License
@@ -1,11 +1,11 @@
1
1
  iqm/station_control/client/__init__.py,sha256=BmBIBdZa10r-IWCFzZ1-0DG6GQKPIXqGXltfXop4ZeQ,942
2
2
  iqm/station_control/client/list_models.py,sha256=SjD0DbCrM9z1SSuGoQS83lyJmDLuMOatpJUoW8itW9s,2335
3
- iqm/station_control/client/station_control.py,sha256=Aep9RaCYj_DFggUC0l7ncJUaYG-FJbumbb2PHqWvJ5c,39603
3
+ iqm/station_control/client/station_control.py,sha256=ShSgH1lgaKE6UtcDcfwOg7vAINs_WKf2jynnL9ax50E,39661
4
4
  iqm/station_control/client/utils.py,sha256=cpS3hXEeeIXeqd_vBnnwo3JHS83FrNpG07SiTUwUx-I,1650
5
5
  iqm/station_control/client/iqm_server/__init__.py,sha256=nLsRHN1rnOKXwuzaq_liUpAYV3sis5jkyHccSdacV7U,624
6
6
  iqm/station_control/client/iqm_server/error.py,sha256=ZLV2-gxFLHZjZVkI3L5sWcBMiay7NT-ijIEvrXgVJT8,1166
7
7
  iqm/station_control/client/iqm_server/grpc_utils.py,sha256=ee42C31_JIXlP6ikZQbohgUQjqCvcSSxIW_9lm9MMV8,5727
8
- iqm/station_control/client/iqm_server/iqm_server_client.py,sha256=zDPfHFixd_PresI57wSs9PbiWQ9akxUkvpkOesxatas,14711
8
+ iqm/station_control/client/iqm_server/iqm_server_client.py,sha256=6TuzBCv0yygy5B7re_nvK3NjEw_zSnP2ExBAHP0HyoY,14777
9
9
  iqm/station_control/client/iqm_server/meta_class.py,sha256=pePJ0Xy0aiJg-bZWK8D87gblq6imfXLsZHjpZkf5D9s,1399
10
10
  iqm/station_control/client/iqm_server/proto/__init__.py,sha256=mOJQ_H-NEyJMffRaDSSZeXrScHaHaHEXULv-O_OJA3A,1345
11
11
  iqm/station_control/client/iqm_server/proto/calibration_pb2.py,sha256=gum0DGmqxhbfaar8SqahmSif1pB6hgo0pVcnoi3VMUo,3017
@@ -32,23 +32,23 @@ iqm/station_control/client/serializers/playlist_serializers.py,sha256=S8RuKdqeJx
32
32
  iqm/station_control/client/serializers/run_serializers.py,sha256=4zH0I5EvvaP7wgLMprXXWa36nAPO4Lv0fPkCrDC_v-g,6698
33
33
  iqm/station_control/client/serializers/setting_node_serializer.py,sha256=m4Sbm8Qr3GiSNiE-Jh8gFEgfscfN1xxELb0vCa9cK70,1197
34
34
  iqm/station_control/client/serializers/struct_serializer.py,sha256=QztBsbRlRG_UrtpQLE3bi0WKEVn48kVB91H1g26PvqQ,3270
35
- iqm/station_control/client/serializers/sweep_serializers.py,sha256=pfdr36L6whk6M5koUsQsL61R1WUWiLOgQUHvwIVBUyY,5766
35
+ iqm/station_control/client/serializers/sweep_serializers.py,sha256=MbmAei4o8jl4a8vxmkLmj5hc3fCTMbHrtejk2aLafB4,5782
36
36
  iqm/station_control/client/serializers/task_serializers.py,sha256=KTd3zdfqr9kSIiEbwsoSNiSu_hxzFfDOlLuttoyBfps,3700
37
37
  iqm/station_control/interface/__init__.py,sha256=MIQla-cBKPbZqBkp-LNyPfjiV0gzf-IFEwrMMhsnKlg,785
38
38
  iqm/station_control/interface/list_with_meta.py,sha256=GAXIDEXKeua6-2FoQ_O1tkhx-d8pBMGHaIkdvgg-cag,1185
39
39
  iqm/station_control/interface/pydantic_base.py,sha256=MVzcsH7wG1DON-qTw6KLpUDay7_b_9CDQgymVzg9HwI,1303
40
- iqm/station_control/interface/models/__init__.py,sha256=JeXFg-ltPOoSY6qVclUKCVyt-7okNgCptLb3h3t3JD4,1587
40
+ iqm/station_control/interface/models/__init__.py,sha256=NpUt2IcWVVAiYZTdl6uOMk0IVWmLgJrC9D9irIZvF4c,1595
41
41
  iqm/station_control/interface/models/dut.py,sha256=dd1SpcsBe4P057jvcPqv39SjzekewwP07hThFe5ulNA,1216
42
- iqm/station_control/interface/models/jobs.py,sha256=HK95f3cWCawyqTaiMoGeLQEWl4hiHZDzSd63q_TXuuY,3732
43
- iqm/station_control/interface/models/monitor.py,sha256=9p-hg5DWrlbCIrJ0GyQ90DrHr1Yc9DCQyfpsQCm0cDE,1328
42
+ iqm/station_control/interface/models/jobs.py,sha256=xPf7VnYMRKk5NqFXd7E8dIBAb0HwoW8AdAEQABDaTFI,4029
43
+ iqm/station_control/interface/models/monitor.py,sha256=ItlgxtBup1hHg64uKeMKiFE7MaRRqSYdVRttsFD_XeU,1352
44
44
  iqm/station_control/interface/models/observation.py,sha256=Jce4lIsUtHRIFT3nr-cbKvh3dbR2Y_yM5x0yyvUdjF8,3261
45
45
  iqm/station_control/interface/models/observation_set.py,sha256=Ko2o3-9I38NfjNF2IQPcwfbwpkTQ3PIU7fUiSaDleX8,3031
46
46
  iqm/station_control/interface/models/run.py,sha256=m-iE3QMPQUOF7bsw8JCAM1Bd6bDVhAgxrtc_AC7rCkc,4097
47
47
  iqm/station_control/interface/models/sequence.py,sha256=uOqMwF1x-vW6UHs2WnPD3PsuSgV3a8OTAsgn_4UENLw,2723
48
- iqm/station_control/interface/models/sweep.py,sha256=ZV_1zcEF5_NY0nPgC75tU7s14TE1o0croBSClIVSmCE,2493
48
+ iqm/station_control/interface/models/sweep.py,sha256=uzpbQ_nky7UxNE4c15U4oDN96f_-SgPDNVK9Sjdan3Q,2509
49
49
  iqm/station_control/interface/models/type_aliases.py,sha256=3LB9viZVi8osavY5kKF8TH1crayG7-MLjgBqXDCqL2s,1018
50
- iqm_station_control_client-7.1.0.dist-info/LICENSE.txt,sha256=R6Q7eUrLyoCQgWYorQ8WJmVmWKYU3dxA3jYUp0wwQAw,11332
51
- iqm_station_control_client-7.1.0.dist-info/METADATA,sha256=JBIbAx2UUghLhkLA2cCbIxiPUogflXtLJrEdueLAzuU,14009
52
- iqm_station_control_client-7.1.0.dist-info/WHEEL,sha256=y4mX-SOX4fYIkonsAGA5N0Oy-8_gI4FXw5HNI1xqvWg,91
53
- iqm_station_control_client-7.1.0.dist-info/top_level.txt,sha256=NB4XRfyDS6_wG9gMsyX-9LTU7kWnTQxNvkbzIxGv3-c,4
54
- iqm_station_control_client-7.1.0.dist-info/RECORD,,
50
+ iqm_station_control_client-8.0.0.dist-info/LICENSE.txt,sha256=R6Q7eUrLyoCQgWYorQ8WJmVmWKYU3dxA3jYUp0wwQAw,11332
51
+ iqm_station_control_client-8.0.0.dist-info/METADATA,sha256=q1e_eFVPPGjaV3ewVOvj72rJo4GeUKQY1me-zmLgUug,14009
52
+ iqm_station_control_client-8.0.0.dist-info/WHEEL,sha256=y4mX-SOX4fYIkonsAGA5N0Oy-8_gI4FXw5HNI1xqvWg,91
53
+ iqm_station_control_client-8.0.0.dist-info/top_level.txt,sha256=NB4XRfyDS6_wG9gMsyX-9LTU7kWnTQxNvkbzIxGv3-c,4
54
+ iqm_station_control_client-8.0.0.dist-info/RECORD,,