gpp-client 26.5.1.dev2__tar.gz → 26.6.0.dev1__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.
Files changed (111) hide show
  1. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/PKG-INFO +1 -1
  2. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/domains/workflow_state.py +40 -27
  3. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/__init__.py +108 -14
  4. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/client.py +1136 -27
  5. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/custom_fields.py +1177 -282
  6. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/custom_mutations.py +34 -0
  7. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/custom_queries.py +0 -12
  8. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/custom_typing_fields.py +148 -16
  9. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/enums.py +55 -17
  10. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/fragments.py +158 -0
  11. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/get_goats_observations.py +3 -3
  12. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/input_types.py +253 -25
  13. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/scheduler_observations_updates.py +26 -1
  14. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/.gitignore +0 -0
  15. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/LICENSE +0 -0
  16. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/README.md +0 -0
  17. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/graphql/README.md +0 -0
  18. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/pyproject.toml +0 -0
  19. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/__init__.py +0 -0
  20. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/cli/__init__.py +0 -0
  21. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/cli/cli.py +0 -0
  22. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/cli/commands/__init__.py +0 -0
  23. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/cli/commands/attachment.py +0 -0
  24. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/cli/commands/goats.py +0 -0
  25. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/cli/commands/observation.py +0 -0
  26. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/cli/commands/program.py +0 -0
  27. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/cli/commands/scheduler.py +0 -0
  28. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/cli/commands/site_status.py +0 -0
  29. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/cli/commands/target.py +0 -0
  30. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/cli/commands/workflow_state.py +0 -0
  31. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/cli/console.py +0 -0
  32. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/cli/output.py +0 -0
  33. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/cli/utils.py +0 -0
  34. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/client.py +0 -0
  35. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/constants.py +0 -0
  36. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/domains/__init__.py +0 -0
  37. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/domains/atom.py +0 -0
  38. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/domains/attachment.py +0 -0
  39. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/domains/base.py +0 -0
  40. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/domains/goats.py +0 -0
  41. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/domains/observation.py +0 -0
  42. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/domains/program.py +0 -0
  43. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/domains/scheduler.py +0 -0
  44. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/domains/site_status.py +0 -0
  45. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/domains/target.py +0 -0
  46. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/environment.py +0 -0
  47. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/exceptions.py +0 -0
  48. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/async_base_client.py +0 -0
  49. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/base_model.py +0 -0
  50. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/base_operation.py +0 -0
  51. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/clone_observation.py +0 -0
  52. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/clone_target.py +0 -0
  53. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/create_call_for_proposals.py +0 -0
  54. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/create_observation.py +0 -0
  55. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/create_program.py +0 -0
  56. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/create_target_by_program_id.py +0 -0
  57. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/create_target_by_program_reference.py +0 -0
  58. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/create_target_by_proposal_reference.py +0 -0
  59. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/delete_call_for_proposals_by_id.py +0 -0
  60. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/delete_observation_by_id.py +0 -0
  61. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/delete_observation_by_reference.py +0 -0
  62. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/delete_program_by_id.py +0 -0
  63. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/delete_target_by_id.py +0 -0
  64. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/exceptions.py +0 -0
  65. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/get_call_for_proposals.py +0 -0
  66. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/get_calls_for_proposals.py +0 -0
  67. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/get_goats_programs.py +0 -0
  68. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/get_observation.py +0 -0
  69. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/get_observation_attachments_by_id.py +0 -0
  70. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/get_observation_attachments_by_reference.py +0 -0
  71. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/get_observation_workflow_state_by_id.py +0 -0
  72. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/get_observation_workflow_state_by_reference.py +0 -0
  73. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/get_observations.py +0 -0
  74. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/get_program_attachments_by_id.py +0 -0
  75. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/get_program_attachments_by_proposal_reference.py +0 -0
  76. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/get_program_attachments_by_reference.py +0 -0
  77. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/get_program_by_id.py +0 -0
  78. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/get_program_by_proposal_reference.py +0 -0
  79. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/get_program_by_reference.py +0 -0
  80. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/get_programs.py +0 -0
  81. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/get_scheduler_all_programs_id.py +0 -0
  82. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/get_scheduler_programs.py +0 -0
  83. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/get_target_by_id.py +0 -0
  84. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/get_targets.py +0 -0
  85. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/obs_calculation_update.py +0 -0
  86. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/observation_edit.py +0 -0
  87. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/package_environment.py +0 -0
  88. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/ping.py +0 -0
  89. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/program_edit.py +0 -0
  90. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/restore_call_for_proposals_by_id.py +0 -0
  91. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/restore_observation_by_id.py +0 -0
  92. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/restore_observation_by_reference.py +0 -0
  93. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/restore_program_by_id.py +0 -0
  94. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/restore_target_by_id.py +0 -0
  95. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/set_observation_workflow_state.py +0 -0
  96. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/target_edit.py +0 -0
  97. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/update_call_for_proposals_by_id.py +0 -0
  98. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/update_calls_for_proposals.py +0 -0
  99. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/update_observation_by_id.py +0 -0
  100. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/update_observation_by_reference.py +0 -0
  101. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/update_observations.py +0 -0
  102. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/update_program_by_id.py +0 -0
  103. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/update_programs.py +0 -0
  104. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/update_target_by_id.py +0 -0
  105. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/generated/update_targets.py +0 -0
  106. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/logging_utils.py +0 -0
  107. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/rest/__init__.py +0 -0
  108. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/rest/client.py +0 -0
  109. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/rest/utils.py +0 -0
  110. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/settings.py +0 -0
  111. {gpp_client-26.5.1.dev2 → gpp_client-26.6.0.dev1}/src/gpp_client/urls.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gpp-client
3
- Version: 26.5.1.dev2
3
+ Version: 26.6.0.dev1
4
4
  Summary: Gemini Program Platform client.
5
5
  Project-URL: Homepage, https://github.com/gemini-hlsw/gpp-client
6
6
  Project-URL: Source, https://github.com/gemini-hlsw/gpp-client
@@ -6,17 +6,20 @@ __all__ = ["WorkflowStateDomain"]
6
6
 
7
7
  import asyncio
8
8
  import logging
9
- from typing import Any
10
9
 
11
10
  from gpp_client.domains.base import BaseDomain
12
11
  from gpp_client.exceptions import GPPClientError, GPPRetryableError, GPPValidationError
13
12
  from gpp_client.generated.enums import CalculationState, ObservationWorkflowState
14
13
  from gpp_client.generated.get_observation_workflow_state_by_id import (
15
14
  GetObservationWorkflowStateById,
15
+ GetObservationWorkflowStateByIdObservationWorkflow,
16
16
  )
17
17
  from gpp_client.generated.get_observation_workflow_state_by_reference import (
18
18
  GetObservationWorkflowStateByReference,
19
19
  )
20
+ from gpp_client.generated.set_observation_workflow_state import (
21
+ SetObservationWorkflowStateSetObservationWorkflowState,
22
+ )
20
23
 
21
24
  logger = logging.getLogger(__name__)
22
25
 
@@ -73,7 +76,7 @@ class WorkflowStateDomain(BaseDomain):
73
76
  observation_id: str,
74
77
  *,
75
78
  workflow_state: ObservationWorkflowState,
76
- ) -> dict[str, Any]:
79
+ ) -> SetObservationWorkflowStateSetObservationWorkflowState:
77
80
  """
78
81
  Update the workflow state of an observation by its ID, or return the current
79
82
  workflow if already set.
@@ -95,8 +98,8 @@ class WorkflowStateDomain(BaseDomain):
95
98
 
96
99
  Returns
97
100
  -------
98
- dict[str, Any]
99
- The returned workflow state for the observation.
101
+ SetObservationWorkflowStateSetObservationWorkflowState
102
+ The workflow details for the observation after the operation.
100
103
 
101
104
  Raises
102
105
  ------
@@ -113,7 +116,7 @@ class WorkflowStateDomain(BaseDomain):
113
116
  workflow_state.value,
114
117
  )
115
118
  result = await self.get_by_id(observation_id=observation_id)
116
- workflow = result["workflow"]
119
+ workflow = result.observation.workflow
117
120
 
118
121
  # If calculation is not 'READY', raise an error to retry later.
119
122
  try:
@@ -121,25 +124,35 @@ class WorkflowStateDomain(BaseDomain):
121
124
  except RuntimeError as exc:
122
125
  self.raise_error(GPPRetryableError, exc)
123
126
 
124
- # If the desired state is already set, return as-is.
127
+ # If the desired state is already set, return the current workflow
128
+ # rebuilt as the mutation response model.
125
129
  if _check_already_set(workflow, workflow_state):
126
- # Return the same shape as other return paths.
127
130
  logger.debug(
128
131
  "Workflow state for observation ID %s is already %s; no update needed.",
129
132
  observation_id,
130
133
  workflow_state.value,
131
134
  )
132
- return workflow["value"]
135
+ return (
136
+ SetObservationWorkflowStateSetObservationWorkflowState.model_validate(
137
+ workflow.value.model_dump(by_alias=True)
138
+ )
139
+ )
133
140
  # Validate the requested workflow state against 'validTransitions'.
134
141
  try:
135
142
  _check_valid_transition(workflow, workflow_state)
136
143
  except ValueError as exc:
137
144
  self.raise_error(GPPValidationError, exc)
138
145
 
139
- return await self._graphql.set_observation_workflow_state(
146
+ mutation_result = await self._graphql.set_observation_workflow_state(
140
147
  observation_id=observation_id,
141
148
  state=workflow_state,
142
149
  )
150
+ payload = mutation_result.set_observation_workflow_state
151
+ if payload is None:
152
+ raise GPPClientError(
153
+ "GPP returned no payload for setObservationWorkflowState."
154
+ )
155
+ return payload
143
156
 
144
157
  async def update_by_id_with_retry(
145
158
  self,
@@ -149,7 +162,7 @@ class WorkflowStateDomain(BaseDomain):
149
162
  max_attempts: int = 10,
150
163
  initial_delay: float = 0.0,
151
164
  retry_delay: float = 1.0,
152
- ) -> dict[str, Any]:
165
+ ) -> SetObservationWorkflowStateSetObservationWorkflowState:
153
166
  """
154
167
  Update the workflow state of an observation by its ID, retrying if the
155
168
  observation is not ready.
@@ -172,8 +185,8 @@ class WorkflowStateDomain(BaseDomain):
172
185
 
173
186
  Returns
174
187
  -------
175
- dict[str, Any]
176
- The returned workflow state for the observation.
188
+ SetObservationWorkflowStateSetObservationWorkflowState
189
+ The workflow details for the observation after the operation.
177
190
 
178
191
  Raises
179
192
  ------
@@ -216,30 +229,30 @@ class WorkflowStateDomain(BaseDomain):
216
229
  self.raise_error(type(exc), exc)
217
230
 
218
231
 
219
- def _check_ready(workflow: dict[str, Any]) -> None:
232
+ def _check_ready(workflow: GetObservationWorkflowStateByIdObservationWorkflow) -> None:
220
233
  """
221
234
  Raise an error if the observation calculation is not in the ``READY`` state.
222
235
 
223
236
  Parameters
224
237
  ----------
225
- workflow : dict[str, Any]
226
- The workflow data structure returned by ``get_by_id()``.
238
+ workflow : GetObservationWorkflowStateByIdObservationWorkflow
239
+ The workflow Pydantic model returned by ``get_by_id().observation.workflow``.
227
240
 
228
241
  Raises
229
242
  ------
230
243
  RuntimeError
231
244
  If the calculation state is not ``READY``.
232
245
  """
233
- if workflow["state"] != CalculationState.READY.value:
246
+ if workflow.state != CalculationState.READY:
234
247
  raise RuntimeError(
235
248
  "Observation calculation is not READY (current state: "
236
- f"{workflow['state']}). Please retry after background processing "
249
+ f"{workflow.state.value}). Please retry after background processing "
237
250
  "is complete."
238
251
  )
239
252
 
240
253
 
241
254
  def _check_already_set(
242
- workflow: dict[str, Any],
255
+ workflow: GetObservationWorkflowStateByIdObservationWorkflow,
243
256
  workflow_state: ObservationWorkflowState,
244
257
  ) -> bool:
245
258
  """
@@ -247,8 +260,8 @@ def _check_already_set(
247
260
 
248
261
  Parameters
249
262
  ----------
250
- workflow : dict[str, Any]
251
- The workflow data structure returned by ``get_by_id()``.
263
+ workflow : GetObservationWorkflowStateByIdObservationWorkflow
264
+ The workflow Pydantic model returned by ``get_by_id().observation.workflow``.
252
265
  workflow_state : ObservationWorkflowState
253
266
  The desired workflow state.
254
267
 
@@ -258,11 +271,11 @@ def _check_already_set(
258
271
  ``True`` if the current workflow state matches the desired state,
259
272
  otherwise ``False``.
260
273
  """
261
- return workflow["value"]["state"] == workflow_state.value
274
+ return workflow.value.state == workflow_state
262
275
 
263
276
 
264
277
  def _check_valid_transition(
265
- workflow: dict[str, Any],
278
+ workflow: GetObservationWorkflowStateByIdObservationWorkflow,
266
279
  workflow_state: ObservationWorkflowState,
267
280
  ) -> None:
268
281
  """
@@ -270,8 +283,8 @@ def _check_valid_transition(
270
283
 
271
284
  Parameters
272
285
  ----------
273
- workflow : dict[str, Any]
274
- The workflow data structure returned by ``get_by_id()``.
286
+ workflow : GetObservationWorkflowStateByIdObservationWorkflow
287
+ The workflow Pydantic model returned by ``get_by_id().observation.workflow``.
275
288
  workflow_state : ObservationWorkflowState
276
289
  The desired workflow state to transition to.
277
290
 
@@ -281,9 +294,9 @@ def _check_valid_transition(
281
294
  If the requested transition is not allowed based on
282
295
  ``validTransitions``.
283
296
  """
284
- valid_transitions = workflow["value"].get("validTransitions", [])
285
- if workflow_state.value not in valid_transitions:
286
- valid_str = ", ".join(valid_transitions) or "None"
297
+ valid_transitions = workflow.value.valid_transitions or []
298
+ if workflow_state not in valid_transitions:
299
+ valid_str = ", ".join(t.value for t in valid_transitions) or "None"
287
300
  raise ValueError(
288
301
  f"Cannot transition to '{workflow_state.value}'. "
289
302
  f"Valid transitions are: {valid_str}."
@@ -78,6 +78,7 @@ from .enums import (
78
78
  AtomStage,
79
79
  AttachmentType,
80
80
  Band,
81
+ BasePositionType,
81
82
  BlindOffsetType,
82
83
  Breakpoint,
83
84
  BrightnessIntegratedUnits,
@@ -103,7 +104,6 @@ from .enums import (
103
104
  ExecutionEventType,
104
105
  ExecutionState,
105
106
  Existence,
106
- FilterType,
107
107
  Flamingos2CustomSlitWidth,
108
108
  Flamingos2Decker,
109
109
  Flamingos2Disperser,
@@ -126,6 +126,7 @@ from .enums import (
126
126
  GhostBinning,
127
127
  GhostIfu1FiberAgitator,
128
128
  GhostIfu2FiberAgitator,
129
+ GhostIfuMappingType,
129
130
  GhostReadMode,
130
131
  GhostResolutionMode,
131
132
  GmosAmpCount,
@@ -136,7 +137,6 @@ from .enums import (
136
137
  GmosDtax,
137
138
  GmosEOffsetting,
138
139
  GmosGratingOrder,
139
- GmosImagingVariantType,
140
140
  GmosLongSlitAcquisitionRoi,
141
141
  GmosNorthBuiltinFpu,
142
142
  GmosNorthDetector,
@@ -149,8 +149,11 @@ from .enums import (
149
149
  GmosSouthFilter,
150
150
  GmosSouthGrating,
151
151
  GmosSouthStageMode,
152
+ GnirsAcquisitionType,
152
153
  GnirsCamera,
154
+ GnirsDecker,
153
155
  GnirsFilter,
156
+ GnirsFpuOther,
154
157
  GnirsFpuSlit,
155
158
  GnirsGrating,
156
159
  GnirsPrism,
@@ -160,9 +163,9 @@ from .enums import (
160
163
  GuideState,
161
164
  HiiRegionSpectrum,
162
165
  Ignore,
163
- Igrins2OffsetMode,
164
166
  ImageQualityPreset,
165
167
  ImagingCapability,
168
+ ImagingVariantType,
166
169
  Instrument,
167
170
  ItcType,
168
171
  LineFluxIntegratedUnits,
@@ -194,6 +197,7 @@ from .enums import (
194
197
  Site,
195
198
  SkyBackground,
196
199
  SlewStage,
200
+ SlitOffsetMode,
197
201
  SmartGcalType,
198
202
  SpectroscopyCapability,
199
203
  StellarLibrarySpectrum,
@@ -266,11 +270,32 @@ from .fragments import (
266
270
  GmosSouthLongSlitDetails,
267
271
  GmosSouthLongSlitDetailsCentralWavelength,
268
272
  GmosSouthLongSlitDetailsOffsets,
273
+ Igrins2LongSlitAndVisitorOnObservingMode,
274
+ Igrins2LongSlitAndVisitorOnObservingModeIgrins2LongSlit,
275
+ Igrins2LongSlitAndVisitorOnObservingModeVisitor,
276
+ Igrins2LongSlitDetails,
277
+ Igrins2LongSlitDetailsDefaultOffsets,
278
+ Igrins2LongSlitDetailsDefaultOffsetsP,
279
+ Igrins2LongSlitDetailsDefaultOffsetsQ,
280
+ Igrins2LongSlitDetailsExplicitOffsets,
281
+ Igrins2LongSlitDetailsExplicitOffsetsP,
282
+ Igrins2LongSlitDetailsExplicitOffsetsQ,
283
+ Igrins2LongSlitDetailsExposureTimeMode,
284
+ Igrins2LongSlitDetailsExposureTimeModeSignalToNoise,
285
+ Igrins2LongSlitDetailsExposureTimeModeSignalToNoiseAt,
286
+ Igrins2LongSlitDetailsExposureTimeModeTimeAndCount,
287
+ Igrins2LongSlitDetailsExposureTimeModeTimeAndCountAt,
288
+ Igrins2LongSlitDetailsExposureTimeModeTimeAndCountTime,
289
+ Igrins2LongSlitDetailsOffsets,
290
+ Igrins2LongSlitDetailsOffsetsP,
291
+ Igrins2LongSlitDetailsOffsetsQ,
292
+ Igrins2LongSlitDetailsTelluricType,
269
293
  NonsiderealTargetDetails,
270
294
  ObservationCore,
271
295
  ObservationCoreReference,
272
296
  ObservationDetails,
273
297
  ObservationDetailsConstraintSet,
298
+ ObservationDetailsExecution,
274
299
  ObservationDetailsObservingMode,
275
300
  ObservationDetailsProgram,
276
301
  ObservationDetailsScienceRequirements,
@@ -288,6 +313,8 @@ from .fragments import (
288
313
  ObservingModeDetailsGmosNorthLongSlit,
289
314
  ObservingModeDetailsGmosSouthImaging,
290
315
  ObservingModeDetailsGmosSouthLongSlit,
316
+ ObservingModeDetailsIgrins2LongSlit,
317
+ ObservingModeDetailsVisitor,
291
318
  OpportunityTargetDetails,
292
319
  OpportunityTargetDetailsRegion,
293
320
  OpportunityTargetDetailsRegionDeclinationArc,
@@ -333,6 +360,10 @@ from .fragments import (
333
360
  TimingWindowDetailsEndTimingWindowEndAfterRepeat,
334
361
  TimingWindowDetailsEndTimingWindowEndAfterRepeatPeriod,
335
362
  TimingWindowDetailsEndTimingWindowEndAt,
363
+ VisitorDetails,
364
+ VisitorDetailsAgsDiameter,
365
+ VisitorDetailsCentralWavelength,
366
+ VisitorDetailsTotalRequestTime,
336
367
  WorkflowCore,
337
368
  WorkflowDetails,
338
369
  WorkflowDetailsValue,
@@ -795,6 +826,7 @@ from .input_types import (
795
826
  DeclinationInput,
796
827
  DeleteProgramUserInput,
797
828
  DeleteProposalInput,
829
+ DeleteSequenceInput,
798
830
  DemoScienceInput,
799
831
  DirectorsTimeInput,
800
832
  EditAsterismsPatchInput,
@@ -811,6 +843,8 @@ from .input_types import (
811
843
  Flamingos2CustomMaskInput,
812
844
  Flamingos2DynamicInput,
813
845
  Flamingos2FpuMaskInput,
846
+ Flamingos2ImagingFilterInput,
847
+ Flamingos2ImagingInput,
814
848
  Flamingos2LongSlitAcquisitionInput,
815
849
  Flamingos2LongSlitInput,
816
850
  Flamingos2StaticInput,
@@ -823,9 +857,6 @@ from .input_types import (
823
857
  GhostIfuInput,
824
858
  GmosCcdModeInput,
825
859
  GmosCustomMaskInput,
826
- GmosGroupedImagingVariantInput,
827
- GmosImagingVariantInput,
828
- GmosInterleavedImagingVariantInput,
829
860
  GmosNodAndShuffleInput,
830
861
  GmosNorthAtomInput,
831
862
  GmosNorthDynamicInput,
@@ -837,7 +868,6 @@ from .input_types import (
837
868
  GmosNorthLongSlitInput,
838
869
  GmosNorthStaticInput,
839
870
  GmosNorthStepInput,
840
- GmosPreImagingVariantInput,
841
871
  GmosSouthAtomInput,
842
872
  GmosSouthDynamicInput,
843
873
  GmosSouthFpuInput,
@@ -848,7 +878,14 @@ from .input_types import (
848
878
  GmosSouthLongSlitInput,
849
879
  GmosSouthStaticInput,
850
880
  GmosSouthStepInput,
881
+ GnirsAcquisitionMirrorOutInput,
882
+ GnirsAtomInput,
883
+ GnirsDynamicInput,
884
+ GnirsLongSlitAcquisitionInput,
885
+ GnirsLongSlitInput,
886
+ GnirsStepInput,
851
887
  GoaPropertiesInput,
888
+ GroupedImagingVariantInput,
852
889
  GroupEditInput,
853
890
  GroupElementInput,
854
891
  GroupPropertiesInput,
@@ -859,6 +896,8 @@ from .input_types import (
859
896
  Igrins2StaticInput,
860
897
  Igrins2StepInput,
861
898
  ImagingScienceRequirementsInput,
899
+ ImagingVariantInput,
900
+ InterleavedImagingVariantInput,
862
901
  LargeProgramInput,
863
902
  LineFluxIntegratedInput,
864
903
  LineFluxSurfaceInput,
@@ -877,6 +916,7 @@ from .input_types import (
877
916
  PartnerSplitInput,
878
917
  PoorWeatherInput,
879
918
  PosAngleConstraintInput,
919
+ PreImagingVariantInput,
880
920
  ProgramEditInput,
881
921
  ProgramNotePropertiesInput,
882
922
  ProgramPropertiesInput,
@@ -908,11 +948,13 @@ from .input_types import (
908
948
  ReplaceFlamingos2SequenceInput,
909
949
  ReplaceGmosNorthSequenceInput,
910
950
  ReplaceGmosSouthSequenceInput,
951
+ ReplaceGnirsSequenceInput,
911
952
  ReplaceIgrins2SequenceInput,
912
953
  ResetAcquisitionInput,
913
954
  RevokeUserInvitationInput,
914
955
  RightAscensionArcInput,
915
956
  RightAscensionInput,
957
+ SchedulingConstraintsInput,
916
958
  ScienceRequirementsInput,
917
959
  SetAllocationsInput,
918
960
  SetGuideTargetNameInput,
@@ -922,6 +964,7 @@ from .input_types import (
922
964
  SiderealInput,
923
965
  SignalToNoiseExposureTimeModeInput,
924
966
  SiteCoordinateLimitsInput,
967
+ SlitTelescopeConfigsInput,
925
968
  SourceProfileInput,
926
969
  SpectralDefinitionIntegratedInput,
927
970
  SpectralDefinitionSurfaceInput,
@@ -934,6 +977,7 @@ from .input_types import (
934
977
  TargetEditInput,
935
978
  TargetEnvironmentInput,
936
979
  TargetPropertiesInput,
980
+ TelescopeConfigAlongSlitInput,
937
981
  TelescopeConfigGeneratorInput,
938
982
  TelescopeConfigInput,
939
983
  TelluricTypeInput,
@@ -1142,12 +1186,15 @@ from .scheduler_observations_updates import (
1142
1186
  SchedulerObservationsUpdates,
1143
1187
  SchedulerObservationsUpdatesObscalcUpdate,
1144
1188
  SchedulerObservationsUpdatesObscalcUpdateValue,
1189
+ SchedulerObservationsUpdatesObscalcUpdateValueConstraintSet,
1145
1190
  SchedulerObservationsUpdatesObscalcUpdateValueExecution,
1146
1191
  SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisits,
1147
1192
  SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisitsMatches,
1148
1193
  SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisitsMatchesAtomRecords,
1149
1194
  SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisitsMatchesAtomRecordsMatches,
1150
1195
  SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisitsMatchesObservation,
1196
+ SchedulerObservationsUpdatesObscalcUpdateValueWorkflow,
1197
+ SchedulerObservationsUpdatesObscalcUpdateValueWorkflowValue,
1151
1198
  )
1152
1199
  from .set_observation_workflow_state import (
1153
1200
  SetObservationWorkflowState,
@@ -1231,6 +1278,7 @@ __all__ = [
1231
1278
  "BandNormalizedIntegratedInput",
1232
1279
  "BandNormalizedSurfaceInput",
1233
1280
  "BaseModel",
1281
+ "BasePositionType",
1234
1282
  "BlindOffsetType",
1235
1283
  "Breakpoint",
1236
1284
  "BrightnessIntegratedUnits",
@@ -1329,6 +1377,7 @@ __all__ = [
1329
1377
  "DeleteProgramByIdUpdateProgramsProgramsAllGroupElementsObservation",
1330
1378
  "DeleteProgramUserInput",
1331
1379
  "DeleteProposalInput",
1380
+ "DeleteSequenceInput",
1332
1381
  "DeleteTargetById",
1333
1382
  "DeleteTargetByIdUpdateTargets",
1334
1383
  "DeleteTargetByIdUpdateTargetsTargets",
@@ -1367,7 +1416,6 @@ __all__ = [
1367
1416
  "ExposureTimeModeDetailsTimeAndCountTime",
1368
1417
  "ExposureTimeModeInput",
1369
1418
  "FastTurnaroundInput",
1370
- "FilterType",
1371
1419
  "Flamingos2AtomInput",
1372
1420
  "Flamingos2CustomMaskInput",
1373
1421
  "Flamingos2CustomSlitWidth",
@@ -1377,6 +1425,8 @@ __all__ = [
1377
1425
  "Flamingos2Filter",
1378
1426
  "Flamingos2Fpu",
1379
1427
  "Flamingos2FpuMaskInput",
1428
+ "Flamingos2ImagingFilterInput",
1429
+ "Flamingos2ImagingInput",
1380
1430
  "Flamingos2LongSlitAcquisitionInput",
1381
1431
  "Flamingos2LongSlitDetails",
1382
1432
  "Flamingos2LongSlitDetailsAcquisition",
@@ -1800,6 +1850,7 @@ __all__ = [
1800
1850
  "GhostIfu1FiberAgitator",
1801
1851
  "GhostIfu2FiberAgitator",
1802
1852
  "GhostIfuInput",
1853
+ "GhostIfuMappingType",
1803
1854
  "GhostReadMode",
1804
1855
  "GhostResolutionMode",
1805
1856
  "GmosAmpCount",
@@ -1812,10 +1863,6 @@ __all__ = [
1812
1863
  "GmosDtax",
1813
1864
  "GmosEOffsetting",
1814
1865
  "GmosGratingOrder",
1815
- "GmosGroupedImagingVariantInput",
1816
- "GmosImagingVariantInput",
1817
- "GmosImagingVariantType",
1818
- "GmosInterleavedImagingVariantInput",
1819
1866
  "GmosLongSlitAcquisitionRoi",
1820
1867
  "GmosNodAndShuffleInput",
1821
1868
  "GmosNorthAtomInput",
@@ -1838,7 +1885,6 @@ __all__ = [
1838
1885
  "GmosNorthStageMode",
1839
1886
  "GmosNorthStaticInput",
1840
1887
  "GmosNorthStepInput",
1841
- "GmosPreImagingVariantInput",
1842
1888
  "GmosRoi",
1843
1889
  "GmosSouthAtomInput",
1844
1890
  "GmosSouthBuiltinFpu",
@@ -1860,12 +1906,21 @@ __all__ = [
1860
1906
  "GmosSouthStageMode",
1861
1907
  "GmosSouthStaticInput",
1862
1908
  "GmosSouthStepInput",
1909
+ "GnirsAcquisitionMirrorOutInput",
1910
+ "GnirsAcquisitionType",
1911
+ "GnirsAtomInput",
1863
1912
  "GnirsCamera",
1913
+ "GnirsDecker",
1914
+ "GnirsDynamicInput",
1864
1915
  "GnirsFilter",
1916
+ "GnirsFpuOther",
1865
1917
  "GnirsFpuSlit",
1866
1918
  "GnirsGrating",
1919
+ "GnirsLongSlitAcquisitionInput",
1920
+ "GnirsLongSlitInput",
1867
1921
  "GnirsPrism",
1868
1922
  "GnirsReadMode",
1923
+ "GnirsStepInput",
1869
1924
  "GnirsWellDepth",
1870
1925
  "GoaPropertiesInput",
1871
1926
  "GraphQLClient",
@@ -1877,6 +1932,7 @@ __all__ = [
1877
1932
  "GroupEditInput",
1878
1933
  "GroupElementInput",
1879
1934
  "GroupPropertiesInput",
1935
+ "GroupedImagingVariantInput",
1880
1936
  "GuideProbe",
1881
1937
  "GuideState",
1882
1938
  "HiiRegionSpectrum",
@@ -1884,14 +1940,36 @@ __all__ = [
1884
1940
  "Ignore",
1885
1941
  "Igrins2AtomInput",
1886
1942
  "Igrins2DynamicInput",
1943
+ "Igrins2LongSlitAndVisitorOnObservingMode",
1944
+ "Igrins2LongSlitAndVisitorOnObservingModeIgrins2LongSlit",
1945
+ "Igrins2LongSlitAndVisitorOnObservingModeVisitor",
1946
+ "Igrins2LongSlitDetails",
1947
+ "Igrins2LongSlitDetailsDefaultOffsets",
1948
+ "Igrins2LongSlitDetailsDefaultOffsetsP",
1949
+ "Igrins2LongSlitDetailsDefaultOffsetsQ",
1950
+ "Igrins2LongSlitDetailsExplicitOffsets",
1951
+ "Igrins2LongSlitDetailsExplicitOffsetsP",
1952
+ "Igrins2LongSlitDetailsExplicitOffsetsQ",
1953
+ "Igrins2LongSlitDetailsExposureTimeMode",
1954
+ "Igrins2LongSlitDetailsExposureTimeModeSignalToNoise",
1955
+ "Igrins2LongSlitDetailsExposureTimeModeSignalToNoiseAt",
1956
+ "Igrins2LongSlitDetailsExposureTimeModeTimeAndCount",
1957
+ "Igrins2LongSlitDetailsExposureTimeModeTimeAndCountAt",
1958
+ "Igrins2LongSlitDetailsExposureTimeModeTimeAndCountTime",
1959
+ "Igrins2LongSlitDetailsOffsets",
1960
+ "Igrins2LongSlitDetailsOffsetsP",
1961
+ "Igrins2LongSlitDetailsOffsetsQ",
1962
+ "Igrins2LongSlitDetailsTelluricType",
1887
1963
  "Igrins2LongSlitInput",
1888
- "Igrins2OffsetMode",
1889
1964
  "Igrins2StaticInput",
1890
1965
  "Igrins2StepInput",
1891
1966
  "ImageQualityPreset",
1892
1967
  "ImagingCapability",
1893
1968
  "ImagingScienceRequirementsInput",
1969
+ "ImagingVariantInput",
1970
+ "ImagingVariantType",
1894
1971
  "Instrument",
1972
+ "InterleavedImagingVariantInput",
1895
1973
  "ItcType",
1896
1974
  "LargeProgramInput",
1897
1975
  "LineFluxIntegratedInput",
@@ -1918,6 +1996,7 @@ __all__ = [
1918
1996
  "ObservationCoreReference",
1919
1997
  "ObservationDetails",
1920
1998
  "ObservationDetailsConstraintSet",
1999
+ "ObservationDetailsExecution",
1921
2000
  "ObservationDetailsObservingMode",
1922
2001
  "ObservationDetailsProgram",
1923
2002
  "ObservationDetailsScienceRequirements",
@@ -1970,6 +2049,8 @@ __all__ = [
1970
2049
  "ObservingModeDetailsGmosNorthLongSlit",
1971
2050
  "ObservingModeDetailsGmosSouthImaging",
1972
2051
  "ObservingModeDetailsGmosSouthLongSlit",
2052
+ "ObservingModeDetailsIgrins2LongSlit",
2053
+ "ObservingModeDetailsVisitor",
1973
2054
  "ObservingModeInput",
1974
2055
  "ObservingModeType",
1975
2056
  "OffsetComponentInput",
@@ -1997,6 +2078,7 @@ __all__ = [
1997
2078
  "PortDisposition",
1998
2079
  "PosAngleConstraintInput",
1999
2080
  "PosAngleConstraintMode",
2081
+ "PreImagingVariantInput",
2000
2082
  "ProgramCore",
2001
2083
  "ProgramDetail",
2002
2084
  "ProgramDetailActive",
@@ -2052,6 +2134,7 @@ __all__ = [
2052
2134
  "ReplaceFlamingos2SequenceInput",
2053
2135
  "ReplaceGmosNorthSequenceInput",
2054
2136
  "ReplaceGmosSouthSequenceInput",
2137
+ "ReplaceGnirsSequenceInput",
2055
2138
  "ReplaceIgrins2SequenceInput",
2056
2139
  "ResetAcquisitionInput",
2057
2140
  "RestoreCallForProposalsById",
@@ -2081,12 +2164,16 @@ __all__ = [
2081
2164
  "SchedulerObservationsUpdates",
2082
2165
  "SchedulerObservationsUpdatesObscalcUpdate",
2083
2166
  "SchedulerObservationsUpdatesObscalcUpdateValue",
2167
+ "SchedulerObservationsUpdatesObscalcUpdateValueConstraintSet",
2084
2168
  "SchedulerObservationsUpdatesObscalcUpdateValueExecution",
2085
2169
  "SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisits",
2086
2170
  "SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisitsMatches",
2087
2171
  "SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisitsMatchesAtomRecords",
2088
2172
  "SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisitsMatchesAtomRecordsMatches",
2089
2173
  "SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisitsMatchesObservation",
2174
+ "SchedulerObservationsUpdatesObscalcUpdateValueWorkflow",
2175
+ "SchedulerObservationsUpdatesObscalcUpdateValueWorkflowValue",
2176
+ "SchedulingConstraintsInput",
2090
2177
  "ScienceBand",
2091
2178
  "ScienceMode",
2092
2179
  "ScienceRequirementsDetails",
@@ -2111,6 +2198,8 @@ __all__ = [
2111
2198
  "SiteCoordinateLimitsInput",
2112
2199
  "SkyBackground",
2113
2200
  "SlewStage",
2201
+ "SlitOffsetMode",
2202
+ "SlitTelescopeConfigsInput",
2114
2203
  "SmartGcalType",
2115
2204
  "SourceProfileInput",
2116
2205
  "SpectralDefinitionIntegratedInput",
@@ -2152,6 +2241,7 @@ __all__ = [
2152
2241
  "TargetProgramSummary",
2153
2242
  "TargetProgramSummaryProgram",
2154
2243
  "TargetPropertiesInput",
2244
+ "TelescopeConfigAlongSlitInput",
2155
2245
  "TelescopeConfigGeneratorInput",
2156
2246
  "TelescopeConfigGeneratorType",
2157
2247
  "TelescopeConfigInput",
@@ -2222,6 +2312,10 @@ __all__ = [
2222
2312
  "UserSuppliedEphemeris",
2223
2313
  "UserSuppliedEphemerisElement",
2224
2314
  "UserType",
2315
+ "VisitorDetails",
2316
+ "VisitorDetailsAgsDiameter",
2317
+ "VisitorDetailsCentralWavelength",
2318
+ "VisitorDetailsTotalRequestTime",
2225
2319
  "VisitorInput",
2226
2320
  "VisitorObservingModeType",
2227
2321
  "WaterVapor",