dkist-processing-common 10.6.2__py3-none-any.whl → 10.6.3__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.
@@ -26,3 +26,4 @@ class WavelengthRange(BaseModel):
26
26
  """Validate that the max wavelength is greater than the min wavelength."""
27
27
  if self.min > self.max:
28
28
  raise ValueError("min is greater than max. Values may be reversed.")
29
+ return self
@@ -20,12 +20,17 @@ class TransferL0Data(WorkflowTaskBase, GlobusMixin, InputDatasetMixin):
20
20
 
21
21
  def download_input_dataset(self):
22
22
  """Get the input dataset document parts and save it to scratch with the appropriate tags."""
23
- if doc := self.metadata_store_input_dataset_observe_frames.inputDatasetPartDocument:
24
- self.write(doc, tags=Tag.input_dataset_observe_frames(), encoder=json_encoder)
25
- if doc := self.metadata_store_input_dataset_calibration_frames.inputDatasetPartDocument:
26
- self.write(doc, tags=Tag.input_dataset_calibration_frames(), encoder=json_encoder)
27
- if doc := self.metadata_store_input_dataset_parameters.inputDatasetPartDocument:
28
- self.write(doc, tags=Tag.input_dataset_parameters(), encoder=json_encoder)
23
+ if observe_frames := self.metadata_store_input_dataset_observe_frames:
24
+ observe_doc = observe_frames.inputDatasetPartDocument
25
+ self.write(observe_doc, tags=Tag.input_dataset_observe_frames(), encoder=json_encoder)
26
+ if calibration_frames := self.metadata_store_input_dataset_calibration_frames:
27
+ calibration_doc = calibration_frames.inputDatasetPartDocument
28
+ self.write(
29
+ calibration_doc, tags=Tag.input_dataset_calibration_frames(), encoder=json_encoder
30
+ )
31
+ if parameters := self.metadata_store_input_dataset_parameters:
32
+ parameters_doc = parameters.inputDatasetPartDocument
33
+ self.write(parameters_doc, tags=Tag.input_dataset_parameters(), encoder=json_encoder)
29
34
 
30
35
  def format_transfer_items(
31
36
  self, input_dataset_objects: list[InputDatasetObject]
@@ -17,10 +17,20 @@ class TransferL0DataTask(TransferL0Data):
17
17
  ...
18
18
 
19
19
 
20
- @pytest.fixture
21
- def transfer_l0_data_task(recipe_run_id, tmp_path, mocker):
20
+ class FakeGQLClientMissingPart(FakeGQLClient):
21
+ """Same metadata mocker with calibration input dataset part missing."""
22
+
23
+ def execute_gql_query(self, **kwargs):
24
+ original_response = super().execute_gql_query(**kwargs)
25
+ # Remove calibration frames part
26
+ del original_response[0].recipeInstance.inputDataset.inputDatasetInputDatasetParts[2]
27
+ return original_response
28
+
29
+
30
+ def _transfer_l0_data_task_with_client(recipe_run_id, tmp_path, mocker, client_cls):
22
31
  mocker.patch(
23
- "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=FakeGQLClient
32
+ "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient",
33
+ new=client_cls,
24
34
  )
25
35
  with TransferL0DataTask(
26
36
  recipe_run_id=recipe_run_id,
@@ -35,6 +45,18 @@ def transfer_l0_data_task(recipe_run_id, tmp_path, mocker):
35
45
  task._purge()
36
46
 
37
47
 
48
+ @pytest.fixture
49
+ def transfer_l0_data_task(recipe_run_id, tmp_path, mocker):
50
+ yield from _transfer_l0_data_task_with_client(recipe_run_id, tmp_path, mocker, FakeGQLClient)
51
+
52
+
53
+ @pytest.fixture
54
+ def transfer_l0_data_task_missing_part(recipe_run_id, tmp_path, mocker):
55
+ yield from _transfer_l0_data_task_with_client(
56
+ recipe_run_id, tmp_path, mocker, FakeGQLClientMissingPart
57
+ )
58
+
59
+
38
60
  def test_download_dataset(transfer_l0_data_task):
39
61
  """
40
62
  :Given: a TransferL0Data task with a valid input dataset
@@ -63,6 +85,29 @@ def test_download_dataset(transfer_l0_data_task):
63
85
  assert parameters_doc_from_file == expected_parameters_doc
64
86
 
65
87
 
88
+ def test_download_dataset_missing_part(transfer_l0_data_task_missing_part):
89
+ """
90
+ :Given: a TransferL0Data task with a valid input dataset without calibration frames
91
+ :When: downloading the dataset documents from the metadata store
92
+ :Then: the correct number of documents are written to disk
93
+ """
94
+ # Given
95
+ task = transfer_l0_data_task_missing_part
96
+ # When
97
+ task.download_input_dataset()
98
+ # Then
99
+ observe_doc_from_file = next(
100
+ task.read(tags=Tag.input_dataset_observe_frames(), decoder=json_decoder)
101
+ )
102
+ parameters_doc_from_file = next(
103
+ task.read(tags=Tag.input_dataset_parameters(), decoder=json_decoder)
104
+ )
105
+ with pytest.raises(StopIteration):
106
+ calibration_doc_from_file = next(
107
+ task.read(tags=Tag.input_dataset_calibration_frames(), decoder=json_decoder)
108
+ )
109
+
110
+
66
111
  def test_format_frame_transfer_items(transfer_l0_data_task):
67
112
  """
68
113
  :Given: a TransferL0Data task with a downloaded input dataset
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: dkist-processing-common
3
- Version: 10.6.2
3
+ Version: 10.6.3
4
4
  Summary: Common task classes used by the DKIST science data processing pipelines
5
5
  Author-email: NSO / AURA <dkistdc@nso.edu>
6
6
  License: BSD-3-Clause
@@ -30,7 +30,7 @@ dkist_processing_common/models/parameters.py,sha256=Ymx-wvPVMkXg5emhOivv7NG0QsAt
30
30
  dkist_processing_common/models/quality.py,sha256=ONz1A6_qyEoZhQkVp9LChAgm93aGt1O5WSRneE3XCCA,2319
31
31
  dkist_processing_common/models/tags.py,sha256=ykOYqWMU7_ffvRCv84-avjXyty9pHBo7EXwsjIjStjs,12058
32
32
  dkist_processing_common/models/task_name.py,sha256=NL0n92A9vVYBV-yvh8d-qFOCxVy0X2GECDmLgIzrmOY,565
33
- dkist_processing_common/models/wavelength.py,sha256=mH4xkNdPU7kedJfQStI6A0WdkMLi61wfe47pJI9kHBI,946
33
+ dkist_processing_common/models/wavelength.py,sha256=Wtmu5QhjPpsqIGfUQ0Wh-3PQlGeRdGV9BfFAy23HLGg,966
34
34
  dkist_processing_common/parsers/__init__.py,sha256=XJQzHtPb78F6-qXXKXjyztc0x-aHVlgv1C_l4dR88tI,67
35
35
  dkist_processing_common/parsers/cs_step.py,sha256=en1ovwy8H2jeUxZd0XDSV8Qv3ZawRm03q6wpJj4a3C8,6461
36
36
  dkist_processing_common/parsers/dsps_repeat.py,sha256=NiUMnfMYSn0qserHM735V1Z6BCfw4CAanlqtjfyRkos,1571
@@ -55,7 +55,7 @@ dkist_processing_common/tasks/output_data_base.py,sha256=CC1TnCrChi8_iuMymr425CJ
55
55
  dkist_processing_common/tasks/parse_l0_input_data.py,sha256=iRMGdvhxBobNsTDQ0IEl0myDfB4P_xpxA00guuBWDj8,7986
56
56
  dkist_processing_common/tasks/quality_metrics.py,sha256=g6MUq8s8jELDinkn6o45rfONyODw92JyVMrzb7Dd7OI,12458
57
57
  dkist_processing_common/tasks/teardown.py,sha256=e4LKnphJDYDVDAez2tH7MxpZgCmxYsKrq9Zk0qAkzzM,2355
58
- dkist_processing_common/tasks/transfer_input_data.py,sha256=bv2t0DN7nQ9opfl3VPdXG9m69zdzNIjordlCyZVNyBQ,5324
58
+ dkist_processing_common/tasks/transfer_input_data.py,sha256=afEW0glpCFMZRj90nFtQo_4XOQ4CuoOh86jahP6a-a0,5548
59
59
  dkist_processing_common/tasks/trial_catalog.py,sha256=Y3DKstRfMS8nWWtJFMB0MUVPlZ1jWS_2jhJGMWwxy50,8748
60
60
  dkist_processing_common/tasks/trial_output_data.py,sha256=aI_aRuu0qVO8zFGrr_9baxx9i3jUEHZSmsmbO6ytlkE,6960
61
61
  dkist_processing_common/tasks/write_l1.py,sha256=C5IRUX1JO_Wa7suv_tgE4tH1E2eAUkro0rtj9EHduqw,22429
@@ -95,7 +95,7 @@ dkist_processing_common/tests/test_tags.py,sha256=UwlOJ45rkvbfbd5L5m5YltvOxQc8kG
95
95
  dkist_processing_common/tests/test_task_name.py,sha256=kqFr59XX2K87xzfTlClzDV4-Je1dx72LvdaJ22UE8UU,1233
96
96
  dkist_processing_common/tests/test_task_parsing.py,sha256=QXt1X6DTO3_liBD2c-t84DToLeEn7B3J-eteIyN4HEM,4027
97
97
  dkist_processing_common/tests/test_teardown.py,sha256=w2sATQHkg2lMLvm6VFZF1mNGFYHwWj_SxvF9RQu-tuY,5362
98
- dkist_processing_common/tests/test_transfer_input_data.py,sha256=MYPsZldzQ_j0AoGFqP6_ahn8Nr5mX8WAyG0wpcQReeI,4735
98
+ dkist_processing_common/tests/test_transfer_input_data.py,sha256=pys5JI-alVEsN4nFE6KDLrAfvLOAH5lSHHpkruLR6lE,6390
99
99
  dkist_processing_common/tests/test_transfer_l1_output_data.py,sha256=27PifkyH3RZg0nsM-AjmrFJ-hbYuCk5Tt_0Zx8PJBfM,2109
100
100
  dkist_processing_common/tests/test_trial_catalog.py,sha256=SZ-nyn0MXU9Lkg_94FbKER_cwiGoi06GYlzF_3AmvKg,6802
101
101
  dkist_processing_common/tests/test_trial_output_data.py,sha256=cBCj0kXyF5NEMzKh6zPVksdoXyE8ju1opJgWgjdcJWA,12790
@@ -109,7 +109,7 @@ docs/landing_page.rst,sha256=aPAuXFhBx73lEZ59B6E6JXxkK0LlxzD0n-HXqHrfumQ,746
109
109
  docs/make.bat,sha256=mBAhtURwhQ7yc95pqwJzlhqBSvRknr1aqZ5s8NKvdKs,4513
110
110
  docs/requirements.txt,sha256=Kbl_X4c7RQZw035YTeNB63We6I7pvXFU4T0Uflp2yDY,29
111
111
  licenses/LICENSE.rst,sha256=piZaQplkzOMmH1NXg6QIdo9wwo9pPCoHkvm2-DmH76E,1462
112
- dkist_processing_common-10.6.2.dist-info/METADATA,sha256=xBQvt5JjVSsGXLINVfL3RZKU4Cx8oyxiXh5uKxc9MHY,7154
113
- dkist_processing_common-10.6.2.dist-info/WHEEL,sha256=beeZ86-EfXScwlR_HKu4SllMC9wUEj_8Z_4FJ3egI2w,91
114
- dkist_processing_common-10.6.2.dist-info/top_level.txt,sha256=LJhd1W-Vn90K8HnQDIE4r52YDpUjjMWDnllAWHBByW0,48
115
- dkist_processing_common-10.6.2.dist-info/RECORD,,
112
+ dkist_processing_common-10.6.3.dist-info/METADATA,sha256=e_NApWqP_nEbasza1gENhO_v3h2w8yBNjcjbuk4HBWY,7154
113
+ dkist_processing_common-10.6.3.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
114
+ dkist_processing_common-10.6.3.dist-info/top_level.txt,sha256=LJhd1W-Vn90K8HnQDIE4r52YDpUjjMWDnllAWHBByW0,48
115
+ dkist_processing_common-10.6.3.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (76.1.0)
2
+ Generator: setuptools (78.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5