gpp-client 26.5.0.dev2__tar.gz → 26.5.1.dev2__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.0.dev2 → gpp_client-26.5.1.dev2}/PKG-INFO +1 -1
  2. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/client.py +2 -0
  3. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/domains/scheduler.py +23 -1
  4. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/__init__.py +42 -0
  5. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/client.py +41 -0
  6. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/fragments.py +50 -0
  7. gpp_client-26.5.1.dev2/src/gpp_client/generated/scheduler_observations_updates.py +76 -0
  8. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/.gitignore +0 -0
  9. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/LICENSE +0 -0
  10. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/README.md +0 -0
  11. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/graphql/README.md +0 -0
  12. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/pyproject.toml +0 -0
  13. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/__init__.py +0 -0
  14. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/cli/__init__.py +0 -0
  15. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/cli/cli.py +0 -0
  16. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/cli/commands/__init__.py +0 -0
  17. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/cli/commands/attachment.py +0 -0
  18. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/cli/commands/goats.py +0 -0
  19. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/cli/commands/observation.py +0 -0
  20. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/cli/commands/program.py +0 -0
  21. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/cli/commands/scheduler.py +0 -0
  22. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/cli/commands/site_status.py +0 -0
  23. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/cli/commands/target.py +0 -0
  24. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/cli/commands/workflow_state.py +0 -0
  25. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/cli/console.py +0 -0
  26. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/cli/output.py +0 -0
  27. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/cli/utils.py +0 -0
  28. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/constants.py +0 -0
  29. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/domains/__init__.py +0 -0
  30. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/domains/atom.py +0 -0
  31. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/domains/attachment.py +0 -0
  32. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/domains/base.py +0 -0
  33. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/domains/goats.py +0 -0
  34. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/domains/observation.py +0 -0
  35. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/domains/program.py +0 -0
  36. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/domains/site_status.py +0 -0
  37. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/domains/target.py +0 -0
  38. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/domains/workflow_state.py +0 -0
  39. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/environment.py +0 -0
  40. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/exceptions.py +0 -0
  41. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/async_base_client.py +0 -0
  42. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/base_model.py +0 -0
  43. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/base_operation.py +0 -0
  44. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/clone_observation.py +0 -0
  45. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/clone_target.py +0 -0
  46. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/create_call_for_proposals.py +0 -0
  47. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/create_observation.py +0 -0
  48. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/create_program.py +0 -0
  49. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/create_target_by_program_id.py +0 -0
  50. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/create_target_by_program_reference.py +0 -0
  51. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/create_target_by_proposal_reference.py +0 -0
  52. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/custom_fields.py +0 -0
  53. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/custom_mutations.py +0 -0
  54. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/custom_queries.py +0 -0
  55. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/custom_typing_fields.py +0 -0
  56. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/delete_call_for_proposals_by_id.py +0 -0
  57. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/delete_observation_by_id.py +0 -0
  58. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/delete_observation_by_reference.py +0 -0
  59. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/delete_program_by_id.py +0 -0
  60. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/delete_target_by_id.py +0 -0
  61. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/enums.py +0 -0
  62. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/exceptions.py +0 -0
  63. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/get_call_for_proposals.py +0 -0
  64. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/get_calls_for_proposals.py +0 -0
  65. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/get_goats_observations.py +0 -0
  66. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/get_goats_programs.py +0 -0
  67. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/get_observation.py +0 -0
  68. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/get_observation_attachments_by_id.py +0 -0
  69. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/get_observation_attachments_by_reference.py +0 -0
  70. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/get_observation_workflow_state_by_id.py +0 -0
  71. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/get_observation_workflow_state_by_reference.py +0 -0
  72. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/get_observations.py +0 -0
  73. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/get_program_attachments_by_id.py +0 -0
  74. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/get_program_attachments_by_proposal_reference.py +0 -0
  75. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/get_program_attachments_by_reference.py +0 -0
  76. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/get_program_by_id.py +0 -0
  77. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/get_program_by_proposal_reference.py +0 -0
  78. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/get_program_by_reference.py +0 -0
  79. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/get_programs.py +0 -0
  80. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/get_scheduler_all_programs_id.py +0 -0
  81. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/get_scheduler_programs.py +0 -0
  82. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/get_target_by_id.py +0 -0
  83. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/get_targets.py +0 -0
  84. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/input_types.py +0 -0
  85. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/obs_calculation_update.py +0 -0
  86. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/observation_edit.py +0 -0
  87. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/package_environment.py +0 -0
  88. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/ping.py +0 -0
  89. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/program_edit.py +0 -0
  90. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/restore_call_for_proposals_by_id.py +0 -0
  91. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/restore_observation_by_id.py +0 -0
  92. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/restore_observation_by_reference.py +0 -0
  93. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/restore_program_by_id.py +0 -0
  94. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/restore_target_by_id.py +0 -0
  95. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/set_observation_workflow_state.py +0 -0
  96. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/target_edit.py +0 -0
  97. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/update_call_for_proposals_by_id.py +0 -0
  98. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/update_calls_for_proposals.py +0 -0
  99. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/update_observation_by_id.py +0 -0
  100. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/update_observation_by_reference.py +0 -0
  101. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/update_observations.py +0 -0
  102. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/update_program_by_id.py +0 -0
  103. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/update_programs.py +0 -0
  104. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/update_target_by_id.py +0 -0
  105. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/generated/update_targets.py +0 -0
  106. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/logging_utils.py +0 -0
  107. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/rest/__init__.py +0 -0
  108. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/rest/client.py +0 -0
  109. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/rest/utils.py +0 -0
  110. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/src/gpp_client/settings.py +0 -0
  111. {gpp_client-26.5.0.dev2 → gpp_client-26.5.1.dev2}/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.0.dev2
3
+ Version: 26.5.1.dev2
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
@@ -142,6 +142,8 @@ class GPPClient:
142
142
  url=graphql_url,
143
143
  headers=headers,
144
144
  ws_url=ws_url,
145
+ ws_headers=headers,
146
+ ws_connection_init_payload=headers,
145
147
  )
146
148
 
147
149
  def _build_rest_client(self) -> RESTClient:
@@ -5,9 +5,10 @@ Module for retrieving scheduler information.
5
5
  __all__ = ["SchedulerDomain"]
6
6
 
7
7
  from datetime import datetime
8
- from typing import Any
8
+ from typing import Any, AsyncIterator
9
9
 
10
10
  from gpp_client.domains.base import BaseDomain
11
+ from gpp_client.generated import SchedulerObservationsUpdates
11
12
  from gpp_client.generated.get_scheduler_all_programs_id import (
12
13
  GetSchedulerAllProgramsId,
13
14
  )
@@ -91,6 +92,8 @@ class SchedulerDomain(BaseDomain):
91
92
  time_estimate,
92
93
  step_types,
93
94
  lamp_types,
95
+ step_index,
96
+ step_count,
94
97
  ) = atom_digest.split("\t")
95
98
  obs_atoms_mapping.setdefault(obs_id, [])
96
99
  obs_atoms_mapping[obs_id].append(
@@ -101,6 +104,8 @@ class SchedulerDomain(BaseDomain):
101
104
  "time_estimate": time_estimate,
102
105
  "step_types": step_types,
103
106
  "lamp_types": lamp_types,
107
+ "step_index": step_index,
108
+ "step_count": step_count,
104
109
  }
105
110
  )
106
111
 
@@ -278,3 +283,20 @@ class SchedulerDomain(BaseDomain):
278
283
  today = datetime.today().date().isoformat() if date is None else date
279
284
  response = await self.get_program_ids(today=today)
280
285
  return [(p.reference.label, p.id) for p in response.programs.matches]
286
+
287
+ async def subscribe_to_calculation_updates(
288
+ self,
289
+ ) -> AsyncIterator[SchedulerObservationsUpdates]:
290
+ """
291
+ Subscribe to observation calculation update events with the
292
+ execution flag set to true so only executed events are sent.
293
+
294
+ Yields
295
+ ------
296
+ SchedulerObservationsUpdates
297
+ Observation calculation update events.
298
+ """
299
+ async for event in self._graphql.scheduler_observations_updates(
300
+ executable_only=True
301
+ ):
302
+ yield event
@@ -230,6 +230,15 @@ from .fragments import (
230
230
  ConstraintSetDetailsElevationRange,
231
231
  ConstraintSetDetailsElevationRangeAirMass,
232
232
  ConstraintSetDetailsElevationRangeHourAngle,
233
+ ExecutionDetails,
234
+ ExecutionDetailsDigest,
235
+ ExecutionDetailsDigestValue,
236
+ ExecutionDetailsDigestValueAcquisition,
237
+ ExecutionDetailsDigestValueAcquisitionTimeEstimate,
238
+ ExecutionDetailsDigestValueAcquisitionTimeEstimateTotal,
239
+ ExecutionDetailsDigestValueSetup,
240
+ ExecutionDetailsDigestValueSetupFull,
241
+ ExecutionDetailsDigestValueSetupReacquisition,
233
242
  ExposureTimeModeDetails,
234
243
  ExposureTimeModeDetailsSignalToNoise,
235
244
  ExposureTimeModeDetailsSignalToNoiseAt,
@@ -268,6 +277,8 @@ from .fragments import (
268
277
  ObservationDetailsTargetEnvironment,
269
278
  ObservationDetailsTimingWindows,
270
279
  ObservationDetailsWorkflow,
280
+ ObservationExecution,
281
+ ObservationExecutionExecution,
271
282
  ObservationWorkflowCore,
272
283
  ObservationWorkflowDetails,
273
284
  ObservationWorkflowDetailsValidationErrors,
@@ -1127,6 +1138,17 @@ from .restore_target_by_id import (
1127
1138
  RestoreTargetByIdUpdateTargetsTargets,
1128
1139
  RestoreTargetByIdUpdateTargetsTargetsProgram,
1129
1140
  )
1141
+ from .scheduler_observations_updates import (
1142
+ SchedulerObservationsUpdates,
1143
+ SchedulerObservationsUpdatesObscalcUpdate,
1144
+ SchedulerObservationsUpdatesObscalcUpdateValue,
1145
+ SchedulerObservationsUpdatesObscalcUpdateValueExecution,
1146
+ SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisits,
1147
+ SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisitsMatches,
1148
+ SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisitsMatchesAtomRecords,
1149
+ SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisitsMatchesAtomRecordsMatches,
1150
+ SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisitsMatchesObservation,
1151
+ )
1130
1152
  from .set_observation_workflow_state import (
1131
1153
  SetObservationWorkflowState,
1132
1154
  SetObservationWorkflowStateSetObservationWorkflowState,
@@ -1324,6 +1346,15 @@ __all__ = [
1324
1346
  "EmissionLinesSurfaceInput",
1325
1347
  "EnumeratedTelescopeConfigGeneratorInput",
1326
1348
  "EphemerisKeyType",
1349
+ "ExecutionDetails",
1350
+ "ExecutionDetailsDigest",
1351
+ "ExecutionDetailsDigestValue",
1352
+ "ExecutionDetailsDigestValueAcquisition",
1353
+ "ExecutionDetailsDigestValueAcquisitionTimeEstimate",
1354
+ "ExecutionDetailsDigestValueAcquisitionTimeEstimateTotal",
1355
+ "ExecutionDetailsDigestValueSetup",
1356
+ "ExecutionDetailsDigestValueSetupFull",
1357
+ "ExecutionDetailsDigestValueSetupReacquisition",
1327
1358
  "ExecutionEventAddedInput",
1328
1359
  "ExecutionEventType",
1329
1360
  "ExecutionState",
@@ -1923,6 +1954,8 @@ __all__ = [
1923
1954
  "ObservationEditObservationEditValueTimingWindowsEndTimingWindowEndAfterRepeat",
1924
1955
  "ObservationEditObservationEditValueTimingWindowsEndTimingWindowEndAfterRepeatPeriod",
1925
1956
  "ObservationEditObservationEditValueTimingWindowsEndTimingWindowEndAt",
1957
+ "ObservationExecution",
1958
+ "ObservationExecutionExecution",
1926
1959
  "ObservationPropertiesInput",
1927
1960
  "ObservationTimesInput",
1928
1961
  "ObservationValidationCode",
@@ -2045,6 +2078,15 @@ __all__ = [
2045
2078
  "RevokeUserInvitationInput",
2046
2079
  "RightAscensionArcInput",
2047
2080
  "RightAscensionInput",
2081
+ "SchedulerObservationsUpdates",
2082
+ "SchedulerObservationsUpdatesObscalcUpdate",
2083
+ "SchedulerObservationsUpdatesObscalcUpdateValue",
2084
+ "SchedulerObservationsUpdatesObscalcUpdateValueExecution",
2085
+ "SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisits",
2086
+ "SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisitsMatches",
2087
+ "SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisitsMatchesAtomRecords",
2088
+ "SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisitsMatchesAtomRecordsMatches",
2089
+ "SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisitsMatchesObservation",
2048
2090
  "ScienceBand",
2049
2091
  "ScienceMode",
2050
2092
  "ScienceRequirementsDetails",
@@ -80,6 +80,7 @@ from .restore_observation_by_id import RestoreObservationById
80
80
  from .restore_observation_by_reference import RestoreObservationByReference
81
81
  from .restore_program_by_id import RestoreProgramById
82
82
  from .restore_target_by_id import RestoreTargetById
83
+ from .scheduler_observations_updates import SchedulerObservationsUpdates
83
84
  from .set_observation_workflow_state import SetObservationWorkflowState
84
85
  from .target_edit import TargetEdit
85
86
  from .update_call_for_proposals_by_id import UpdateCallForProposalsById
@@ -98,6 +99,46 @@ def gql(q: str) -> str:
98
99
 
99
100
 
100
101
  class GraphQLClient(AsyncBaseClient):
102
+ async def scheduler_observations_updates(
103
+ self, executable_only: Union[Optional[bool], UnsetType] = UNSET, **kwargs: Any
104
+ ) -> AsyncIterator[SchedulerObservationsUpdates]:
105
+ query = gql("""
106
+ subscription SchedulerObservationsUpdates($executableOnly: Boolean) {
107
+ obscalcUpdate(input: {executableOnly: $executableOnly}) {
108
+ oldCalculationState
109
+ newCalculationState
110
+ editType
111
+ value {
112
+ id
113
+ observationTime
114
+ execution {
115
+ visits {
116
+ matches {
117
+ observation {
118
+ id
119
+ }
120
+ atomRecords {
121
+ matches {
122
+ executionState
123
+ id
124
+ }
125
+ }
126
+ }
127
+ }
128
+ }
129
+ }
130
+ }
131
+ }
132
+ """)
133
+ variables: dict[str, object] = {"executableOnly": executable_only}
134
+ async for data in self.execute_ws(
135
+ query=query,
136
+ operation_name="SchedulerObservationsUpdates",
137
+ variables=variables,
138
+ **kwargs,
139
+ ):
140
+ yield SchedulerObservationsUpdates.model_validate(data)
141
+
101
142
  async def get_observation_attachments_by_id(
102
143
  self, observation_id: Any, **kwargs: Any
103
144
  ) -> GetObservationAttachmentsById:
@@ -101,6 +101,46 @@ class ConstraintSetDetailsElevationRangeHourAngle(BaseModel):
101
101
  max_hours: Any = Field(alias="maxHours")
102
102
 
103
103
 
104
+ class ExecutionDetails(BaseModel):
105
+ digest: Optional["ExecutionDetailsDigest"]
106
+
107
+
108
+ class ExecutionDetailsDigest(BaseModel):
109
+ value: Optional["ExecutionDetailsDigestValue"]
110
+
111
+
112
+ class ExecutionDetailsDigestValue(BaseModel):
113
+ acquisition: Optional["ExecutionDetailsDigestValueAcquisition"]
114
+ setup: "ExecutionDetailsDigestValueSetup"
115
+
116
+
117
+ class ExecutionDetailsDigestValueAcquisition(BaseModel):
118
+ time_estimate: "ExecutionDetailsDigestValueAcquisitionTimeEstimate" = Field(
119
+ alias="timeEstimate"
120
+ )
121
+
122
+
123
+ class ExecutionDetailsDigestValueAcquisitionTimeEstimate(BaseModel):
124
+ total: "ExecutionDetailsDigestValueAcquisitionTimeEstimateTotal"
125
+
126
+
127
+ class ExecutionDetailsDigestValueAcquisitionTimeEstimateTotal(BaseModel):
128
+ seconds: Any
129
+
130
+
131
+ class ExecutionDetailsDigestValueSetup(BaseModel):
132
+ full: "ExecutionDetailsDigestValueSetupFull"
133
+ reacquisition: "ExecutionDetailsDigestValueSetupReacquisition"
134
+
135
+
136
+ class ExecutionDetailsDigestValueSetupFull(BaseModel):
137
+ seconds: Any
138
+
139
+
140
+ class ExecutionDetailsDigestValueSetupReacquisition(BaseModel):
141
+ seconds: Any
142
+
143
+
104
144
  class ExposureTimeModeDetails(BaseModel):
105
145
  signal_to_noise: Optional["ExposureTimeModeDetailsSignalToNoise"] = Field(
106
146
  alias="signalToNoise"
@@ -490,6 +530,14 @@ class ObservationDetailsTargetEnvironment(TargetEnvironmentDetails):
490
530
  pass
491
531
 
492
532
 
533
+ class ObservationExecution(BaseModel):
534
+ execution: "ObservationExecutionExecution"
535
+
536
+
537
+ class ObservationExecutionExecution(ExecutionDetails):
538
+ pass
539
+
540
+
493
541
  class ObservationWorkflowCore(BaseModel):
494
542
  state: ObservationWorkflowState
495
543
 
@@ -654,6 +702,7 @@ AttachmentDetails.model_rebuild()
654
702
  CallForProposalsCore.model_rebuild()
655
703
  CallForProposalsDetails.model_rebuild()
656
704
  ConstraintSetDetails.model_rebuild()
705
+ ExecutionDetails.model_rebuild()
657
706
  ExposureTimeModeDetails.model_rebuild()
658
707
  Flamingos2LongSlitDetails.model_rebuild()
659
708
  GmosNorthImagingDetails.model_rebuild()
@@ -671,6 +720,7 @@ TimingWindowDetails.model_rebuild()
671
720
  WorkflowCore.model_rebuild()
672
721
  WorkflowDetails.model_rebuild()
673
722
  ObservationDetails.model_rebuild()
723
+ ObservationExecution.model_rebuild()
674
724
  ObservationWorkflowCore.model_rebuild()
675
725
  ObservationWorkflowDetails.model_rebuild()
676
726
  OpportunityTargetDetails.model_rebuild()
@@ -0,0 +1,76 @@
1
+ from typing import Any, Optional
2
+
3
+ from pydantic import Field
4
+
5
+ from .base_model import BaseModel
6
+ from .enums import AtomExecutionState, CalculationState, EditType
7
+
8
+
9
+ class SchedulerObservationsUpdates(BaseModel):
10
+ obscalc_update: "SchedulerObservationsUpdatesObscalcUpdate" = Field(
11
+ alias="obscalcUpdate"
12
+ )
13
+
14
+
15
+ class SchedulerObservationsUpdatesObscalcUpdate(BaseModel):
16
+ old_calculation_state: Optional[CalculationState] = Field(
17
+ alias="oldCalculationState"
18
+ )
19
+ new_calculation_state: Optional[CalculationState] = Field(
20
+ alias="newCalculationState"
21
+ )
22
+ edit_type: EditType = Field(alias="editType")
23
+ value: Optional["SchedulerObservationsUpdatesObscalcUpdateValue"]
24
+
25
+
26
+ class SchedulerObservationsUpdatesObscalcUpdateValue(BaseModel):
27
+ id: Any
28
+ observation_time: Optional[Any] = Field(alias="observationTime")
29
+ execution: "SchedulerObservationsUpdatesObscalcUpdateValueExecution"
30
+
31
+
32
+ class SchedulerObservationsUpdatesObscalcUpdateValueExecution(BaseModel):
33
+ visits: "SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisits"
34
+
35
+
36
+ class SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisits(BaseModel):
37
+ matches: list[
38
+ "SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisitsMatches"
39
+ ]
40
+
41
+
42
+ class SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisitsMatches(BaseModel):
43
+ observation: "SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisitsMatchesObservation"
44
+ atom_records: "SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisitsMatchesAtomRecords" = Field(
45
+ alias="atomRecords"
46
+ )
47
+
48
+
49
+ class SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisitsMatchesObservation(
50
+ BaseModel
51
+ ):
52
+ id: Any
53
+
54
+
55
+ class SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisitsMatchesAtomRecords(
56
+ BaseModel
57
+ ):
58
+ matches: list[
59
+ "SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisitsMatchesAtomRecordsMatches"
60
+ ]
61
+
62
+
63
+ class SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisitsMatchesAtomRecordsMatches(
64
+ BaseModel
65
+ ):
66
+ execution_state: AtomExecutionState = Field(alias="executionState")
67
+ id: Any
68
+
69
+
70
+ SchedulerObservationsUpdates.model_rebuild()
71
+ SchedulerObservationsUpdatesObscalcUpdate.model_rebuild()
72
+ SchedulerObservationsUpdatesObscalcUpdateValue.model_rebuild()
73
+ SchedulerObservationsUpdatesObscalcUpdateValueExecution.model_rebuild()
74
+ SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisits.model_rebuild()
75
+ SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisitsMatches.model_rebuild()
76
+ SchedulerObservationsUpdatesObscalcUpdateValueExecutionVisitsMatchesAtomRecords.model_rebuild()