dkist-processing-common 10.8.1__tar.gz → 10.8.2__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 (126) hide show
  1. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/CHANGELOG.rst +9 -0
  2. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/PKG-INFO +1 -1
  3. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tasks/write_l1.py +20 -1
  4. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/test_write_l1.py +108 -0
  5. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common.egg-info/PKG-INFO +1 -1
  6. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/.gitignore +0 -0
  7. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/.pre-commit-config.yaml +0 -0
  8. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/.readthedocs.yml +0 -0
  9. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/.snyk +0 -0
  10. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/README.rst +0 -0
  11. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/bitbucket-pipelines.yml +0 -0
  12. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/changelog/.gitempty +0 -0
  13. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/__init__.py +0 -0
  14. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/_util/__init__.py +0 -0
  15. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/_util/constants.py +0 -0
  16. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/_util/graphql.py +0 -0
  17. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/_util/scratch.py +0 -0
  18. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/_util/tags.py +0 -0
  19. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/codecs/__init__.py +0 -0
  20. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/codecs/asdf.py +0 -0
  21. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/codecs/bytes.py +0 -0
  22. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/codecs/fits.py +0 -0
  23. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/codecs/iobase.py +0 -0
  24. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/codecs/json.py +0 -0
  25. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/codecs/path.py +0 -0
  26. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/codecs/quality.py +0 -0
  27. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/codecs/str.py +0 -0
  28. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/config.py +0 -0
  29. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/fonts/Lato-Regular.ttf +0 -0
  30. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/fonts/__init__.py +0 -0
  31. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/manual.py +0 -0
  32. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/models/__init__.py +0 -0
  33. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/models/constants.py +0 -0
  34. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/models/fits_access.py +0 -0
  35. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/models/flower_pot.py +0 -0
  36. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/models/graphql.py +0 -0
  37. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/models/message.py +0 -0
  38. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/models/message_queue_binding.py +0 -0
  39. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/models/metric_code.py +0 -0
  40. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/models/parameters.py +0 -0
  41. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/models/quality.py +0 -0
  42. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/models/tags.py +0 -0
  43. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/models/task_name.py +0 -0
  44. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/models/wavelength.py +0 -0
  45. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/parsers/__init__.py +0 -0
  46. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/parsers/cs_step.py +0 -0
  47. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/parsers/dsps_repeat.py +0 -0
  48. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/parsers/experiment_id_bud.py +0 -0
  49. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/parsers/id_bud.py +0 -0
  50. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/parsers/l0_fits_access.py +0 -0
  51. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/parsers/l1_fits_access.py +0 -0
  52. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/parsers/near_bud.py +0 -0
  53. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/parsers/proposal_id_bud.py +0 -0
  54. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/parsers/quality.py +0 -0
  55. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/parsers/retarder.py +0 -0
  56. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/parsers/single_value_single_key_flower.py +0 -0
  57. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/parsers/task.py +0 -0
  58. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/parsers/time.py +0 -0
  59. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/parsers/unique_bud.py +0 -0
  60. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/parsers/wavelength.py +0 -0
  61. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tasks/__init__.py +0 -0
  62. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tasks/assemble_movie.py +0 -0
  63. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tasks/base.py +0 -0
  64. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tasks/l1_output_data.py +0 -0
  65. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tasks/mixin/__init__.py +0 -0
  66. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tasks/mixin/globus.py +0 -0
  67. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tasks/mixin/input_dataset.py +0 -0
  68. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tasks/mixin/interservice_bus.py +0 -0
  69. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tasks/mixin/metadata_store.py +0 -0
  70. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tasks/mixin/object_store.py +0 -0
  71. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tasks/mixin/quality/__init__.py +0 -0
  72. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tasks/mixin/quality/_base.py +0 -0
  73. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tasks/mixin/quality/_metrics.py +0 -0
  74. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tasks/output_data_base.py +0 -0
  75. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tasks/parse_l0_input_data.py +0 -0
  76. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tasks/quality_metrics.py +0 -0
  77. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tasks/teardown.py +0 -0
  78. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tasks/transfer_input_data.py +0 -0
  79. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tasks/trial_catalog.py +0 -0
  80. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tasks/trial_output_data.py +0 -0
  81. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/__init__.py +0 -0
  82. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/conftest.py +0 -0
  83. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/test_assemble_movie.py +0 -0
  84. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/test_assemble_quality.py +0 -0
  85. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/test_base.py +0 -0
  86. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/test_codecs.py +0 -0
  87. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/test_constants.py +0 -0
  88. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/test_cs_step.py +0 -0
  89. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/test_fits_access.py +0 -0
  90. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/test_flower_pot.py +0 -0
  91. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/test_input_dataset.py +0 -0
  92. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/test_interservice_bus.py +0 -0
  93. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/test_interservice_bus_mixin.py +0 -0
  94. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/test_manual_processing.py +0 -0
  95. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/test_output_data_base.py +0 -0
  96. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/test_parameters.py +0 -0
  97. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/test_parse_l0_input_data.py +0 -0
  98. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/test_publish_catalog_messages.py +0 -0
  99. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/test_quality.py +0 -0
  100. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/test_quality_mixin.py +0 -0
  101. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/test_scratch.py +0 -0
  102. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/test_stems.py +0 -0
  103. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/test_submit_dataset_metadata.py +0 -0
  104. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/test_tags.py +0 -0
  105. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/test_task_name.py +0 -0
  106. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/test_task_parsing.py +0 -0
  107. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/test_teardown.py +0 -0
  108. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/test_transfer_input_data.py +0 -0
  109. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/test_transfer_l1_output_data.py +0 -0
  110. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/test_trial_catalog.py +0 -0
  111. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/test_trial_output_data.py +0 -0
  112. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common/tests/test_workflow_task_base.py +0 -0
  113. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common.egg-info/SOURCES.txt +0 -0
  114. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common.egg-info/dependency_links.txt +0 -0
  115. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common.egg-info/requires.txt +0 -0
  116. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/dkist_processing_common.egg-info/top_level.txt +0 -0
  117. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/docs/Makefile +0 -0
  118. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/docs/changelog.rst +0 -0
  119. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/docs/conf.py +0 -0
  120. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/docs/index.rst +0 -0
  121. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/docs/landing_page.rst +0 -0
  122. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/docs/make.bat +0 -0
  123. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/docs/requirements.txt +0 -0
  124. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/licenses/LICENSE.rst +0 -0
  125. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/pyproject.toml +0 -0
  126. {dkist_processing_common-10.8.1 → dkist_processing_common-10.8.2}/setup.cfg +0 -0
@@ -1,3 +1,12 @@
1
+ v10.8.2 (2025-05-27)
2
+ ====================
3
+
4
+ Bugfixes
5
+ --------
6
+
7
+ - Prevent the `WAVEBAND` key from being populated with a spectral line that falls outside the wavelength bounds of the data. (`#251 <https://bitbucket.org/dkistdc/dkist-processing-common/pull-requests/251>`__)
8
+
9
+
1
10
  v10.8.1 (2025-05-22)
2
11
  ====================
3
12
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dkist-processing-common
3
- Version: 10.8.1
3
+ Version: 10.8.2
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
@@ -295,10 +295,14 @@ class WriteL1Frame(WorkflowTaskBase, MetadataStoreMixin, ABC):
295
295
  header["SOLARRAD"] = self.calculate_solar_angular_radius(obstime=obstime)
296
296
  header["SPECSYS"] = "TOPOCENT" # no wavelength correction made due to doppler velocity
297
297
  header["VELOSYS"] = 0.0 # no wavelength correction made due to doppler velocity
298
- header["WAVEBAND"] = get_closest_spectral_line(wavelength=header["LINEWAV"] * u.nm).name
299
298
  wavelength_range = self.get_wavelength_range(header=header)
300
299
  header["WAVEMIN"] = wavelength_range.min.to_value(u.nm)
301
300
  header["WAVEMAX"] = wavelength_range.max.to_value(u.nm)
301
+ waveband: str | None = self.get_waveband(
302
+ wavelength=header["LINEWAV"] * u.nm, wavelength_range=wavelength_range
303
+ )
304
+ if waveband:
305
+ header["WAVEBAND"] = waveband
302
306
  return header
303
307
 
304
308
  def l1_filename(self, header: fits.Header, stokes: Literal["I", "Q", "U", "V"]):
@@ -515,3 +519,18 @@ class WriteL1Frame(WorkflowTaskBase, MetadataStoreMixin, ABC):
515
519
  if header.get("AO_LOCK") is not True:
516
520
  header.pop("ATMOS_R0", None)
517
521
  return header
522
+
523
+ @staticmethod
524
+ def get_waveband(wavelength: u.Quantity, wavelength_range: WavelengthRange) -> str | None:
525
+ """
526
+ Get the spectral line information of the closest spectral line to the wavelength argument.
527
+
528
+ If the spectral line rest wavelength in air does not fall in the wavelength range of the data,
529
+ do not populate the keyword.
530
+ """
531
+ print(wavelength_range)
532
+ closest_line = get_closest_spectral_line(wavelength=wavelength)
533
+ rest_wavelength = closest_line.rest_wavelength_in_air
534
+ if rest_wavelength < wavelength_range.min or rest_wavelength > wavelength_range.max:
535
+ return None
536
+ return closest_line.name
@@ -101,6 +101,12 @@ class CompleteWriteL1Frame(WriteL1Frame):
101
101
  return WavelengthRange(min=1075.0 * u.nm, max=1085.0 * u.nm)
102
102
 
103
103
 
104
+ class CompleteWriteL1FrameWithEmptyWaveband(CompleteWriteL1Frame):
105
+ def get_wavelength_range(self, header: fits.Header) -> WavelengthRange:
106
+ # Return an empty range to test the empty waveband case
107
+ return WavelengthRange(min=10000.0 * u.nm, max=10050.0 * u.nm)
108
+
109
+
104
110
  @dataclass
105
111
  class FakeConstantDb:
106
112
  INSTRUMENT: str = "TEST"
@@ -154,6 +160,44 @@ def write_l1_task(request, recipe_run_id, tmp_path):
154
160
  task._purge()
155
161
 
156
162
 
163
+ @pytest.fixture(
164
+ scope="function",
165
+ params=[
166
+ pytest.param((1, "complete_common_header"), id="Intensity"),
167
+ pytest.param((4, "complete_polarimetric_header"), id="Polarimetric"),
168
+ ],
169
+ )
170
+ def write_l1_task_with_empty_waveband(recipe_run_id, tmp_path, request):
171
+ with CompleteWriteL1FrameWithEmptyWaveband(
172
+ recipe_run_id=recipe_run_id,
173
+ workflow_name="workflow_name",
174
+ workflow_version="workflow_version",
175
+ ) as task:
176
+ task.scratch = WorkflowFileSystem(recipe_run_id=recipe_run_id, scratch_base_path=tmp_path)
177
+ num_of_stokes_params, header_fixture_name = request.param
178
+ header = request.getfixturevalue(header_fixture_name)
179
+ stokes_params = ["I", "Q", "U", "V"]
180
+ used_stokes_params = []
181
+ hdu = fits.PrimaryHDU(data=np.random.random(size=(1, 128, 128)) * 10, header=header)
182
+ hdu.header["IPTASK"] = "level0_only key to be removed"
183
+ hdul = fits.HDUList([hdu])
184
+ for i in range(num_of_stokes_params):
185
+ task.write(
186
+ data=hdul,
187
+ tags=[
188
+ Tag.calibrated(),
189
+ Tag.frame(),
190
+ Tag.stokes(stokes_params[i]),
191
+ Tag.dsps_repeat(i),
192
+ ],
193
+ encoder=fits_hdulist_encoder,
194
+ )
195
+ used_stokes_params.append(stokes_params[i])
196
+ task.constants._update(asdict(FakeConstantDb()))
197
+ yield task, used_stokes_params, header
198
+ task._purge()
199
+
200
+
157
201
  @pytest.fixture(
158
202
  scope="function",
159
203
  params=[
@@ -616,3 +660,67 @@ def test_check_r0_ao_lock(write_l1_task_no_data):
616
660
  with pytest.raises(KeyError, match="Keyword 'ATMOS_R0' not found"):
617
661
  invalid_r0 = header_after_check["ATMOS_R0"]
618
662
  assert header.get("AO_LOCK") != True
663
+
664
+
665
+ @pytest.mark.parametrize(
666
+ "wavelength, wavemin, wavemax, expected",
667
+ [
668
+ pytest.param(
669
+ 617,
670
+ 615,
671
+ 619,
672
+ "Fe I (617.33 nm)",
673
+ id="line_is_between_wavemin_and_wavemax_and_exists",
674
+ ),
675
+ pytest.param(
676
+ 700,
677
+ 698,
678
+ 702,
679
+ None,
680
+ id="line_is_between_wavemin_and_wavemax_and_does_not_exist",
681
+ ),
682
+ pytest.param(
683
+ 617,
684
+ 698,
685
+ 702,
686
+ None,
687
+ id="line_is_not_between_wavemin_and_wavemax_and_exists",
688
+ ),
689
+ ],
690
+ )
691
+ def test_get_waveband(write_l1_task, wavelength, wavemin, wavemax, expected):
692
+ """
693
+ :Given: an input wavelength contribution
694
+ :When: determining the waveband
695
+ :Then: the correct waveband is returned
696
+ """
697
+ wavelength_range = WavelengthRange(min=wavemin * u.nm, max=wavemax * u.nm)
698
+ task, _, _ = write_l1_task
699
+ waveband = task.get_waveband(wavelength=wavelength * u.nm, wavelength_range=wavelength_range)
700
+ assert waveband == expected
701
+
702
+
703
+ def test_empty_waveband(write_l1_task_with_empty_waveband, mocker):
704
+ """
705
+ :Given: a header converted to SPEC 214 L1 and a wavelength range that has no listed spectral lines
706
+ :When: checking the waveband key
707
+ :Then: it does not exist
708
+ """
709
+ mocker.patch(
710
+ "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=FakeGQLClient
711
+ )
712
+ mocker.patch(
713
+ "dkist_processing_common.tasks.write_l1.WriteL1Frame.version_from_module_name",
714
+ new_callable=Mock,
715
+ return_value="fake_version_number",
716
+ )
717
+
718
+ task, _, _ = write_l1_task_with_empty_waveband
719
+ task()
720
+ files = list(task.read(tags=[Tag.frame(), Tag.output()]))
721
+ for file in files:
722
+ header = fits.open(file)[1].header
723
+ assert header["WAVEMIN"] == 10000
724
+ assert header["WAVEMAX"] == 10050
725
+ with pytest.raises(KeyError):
726
+ header["WAVEBAND"]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dkist-processing-common
3
- Version: 10.8.1
3
+ Version: 10.8.2
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