dkist-processing-visp 5.7.10__tar.gz → 5.7.11__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 (118) hide show
  1. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/CHANGELOG.rst +9 -0
  2. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/PKG-INFO +8 -7
  3. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/parsers/raster_step.py +7 -0
  4. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/parsers/visp_l0_fits_access.py +4 -1
  5. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/header_models.py +4 -0
  6. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/test_parse.py +28 -0
  7. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp.egg-info/PKG-INFO +8 -7
  8. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp.egg-info/requires.txt +7 -6
  9. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/pyproject.toml +9 -8
  10. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/.gitignore +0 -0
  11. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/.pre-commit-config.yaml +0 -0
  12. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/.readthedocs.yml +0 -0
  13. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/.snyk +0 -0
  14. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/README.rst +0 -0
  15. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/SCIENCE_CHANGELOG.rst +0 -0
  16. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/bitbucket-pipelines.yml +0 -0
  17. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/changelog/.gitempty +0 -0
  18. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/__init__.py +0 -0
  19. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/config.py +0 -0
  20. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/fonts/Lato-Regular.ttf +0 -0
  21. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/models/__init__.py +0 -0
  22. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/models/constants.py +0 -0
  23. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/models/dataset_extras.py +0 -0
  24. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/models/fits_access.py +0 -0
  25. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/models/metric_code.py +0 -0
  26. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/models/parameters.py +0 -0
  27. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/models/tags.py +0 -0
  28. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/models/task_name.py +0 -0
  29. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/parsers/__init__.py +0 -0
  30. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/parsers/map_repeats.py +0 -0
  31. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/parsers/modulator_states.py +0 -0
  32. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/parsers/polarimeter_mode.py +0 -0
  33. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/parsers/spectrograph_configuration.py +0 -0
  34. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/parsers/time.py +0 -0
  35. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/parsers/visp_l1_fits_access.py +0 -0
  36. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tasks/__init__.py +0 -0
  37. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tasks/assemble_movie.py +0 -0
  38. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tasks/background_light.py +0 -0
  39. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tasks/dark.py +0 -0
  40. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tasks/geometric.py +0 -0
  41. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tasks/instrument_polarization.py +0 -0
  42. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tasks/l1_output_data.py +0 -0
  43. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tasks/lamp.py +0 -0
  44. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tasks/make_movie_frames.py +0 -0
  45. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tasks/mixin/__init__.py +0 -0
  46. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tasks/mixin/beam_access.py +0 -0
  47. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tasks/mixin/corrections.py +0 -0
  48. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tasks/mixin/downsample.py +0 -0
  49. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tasks/parse.py +0 -0
  50. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tasks/polcal_as_science.py +0 -0
  51. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tasks/quality_metrics.py +0 -0
  52. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tasks/science.py +0 -0
  53. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tasks/solar.py +0 -0
  54. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tasks/visp_base.py +0 -0
  55. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tasks/wavelength_calibration.py +0 -0
  56. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tasks/write_dataset_extras.py +0 -0
  57. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tasks/write_l1.py +0 -0
  58. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/README.rst +0 -0
  59. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/__init__.py +0 -0
  60. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/conftest.py +0 -0
  61. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/local_trial_workflows/__init__.py +0 -0
  62. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/local_trial_workflows/l0_cals_only.py +0 -0
  63. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/local_trial_workflows/l0_polcals_as_science.py +0 -0
  64. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/local_trial_workflows/l0_solar_gain_as_science.py +0 -0
  65. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/local_trial_workflows/l0_to_l1.py +0 -0
  66. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/local_trial_workflows/local_trial_helpers.py +0 -0
  67. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/test_assemble_movie.py +0 -0
  68. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/test_assemble_quality.py +0 -0
  69. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/test_background_light.py +0 -0
  70. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/test_dark.py +0 -0
  71. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/test_downsample.py +0 -0
  72. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/test_fits_access.py +0 -0
  73. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/test_geometric.py +0 -0
  74. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/test_instrument_polarization.py +0 -0
  75. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/test_lamp.py +0 -0
  76. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/test_make_movie_frames.py +0 -0
  77. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/test_map_repeats.py +0 -0
  78. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/test_parameters.py +0 -0
  79. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/test_polcal_as_science.py +0 -0
  80. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/test_quality.py +0 -0
  81. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/test_science.py +0 -0
  82. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/test_solar.py +0 -0
  83. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/test_trial_create_quality_report.py +0 -0
  84. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/test_visp_base.py +0 -0
  85. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/test_visp_constants.py +0 -0
  86. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/test_wavelength_calibration.py +0 -0
  87. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/test_workflows.py +0 -0
  88. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/test_write_dataset_extras.py +0 -0
  89. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/tests/test_write_l1.py +0 -0
  90. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/workflows/__init__.py +0 -0
  91. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/workflows/l0_processing.py +0 -0
  92. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/workflows/single_task_workflows.py +0 -0
  93. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp/workflows/trial_workflows.py +0 -0
  94. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp.egg-info/SOURCES.txt +0 -0
  95. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp.egg-info/dependency_links.txt +0 -0
  96. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/dkist_processing_visp.egg-info/top_level.txt +0 -0
  97. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/docs/Makefile +0 -0
  98. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/docs/background_light.rst +0 -0
  99. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/docs/changelog.rst +0 -0
  100. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/docs/conf.py +0 -0
  101. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/docs/dataset_extras.rst +0 -0
  102. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/docs/gain_correction.rst +0 -0
  103. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/docs/geometric.rst +0 -0
  104. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/docs/index.rst +0 -0
  105. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/docs/l0_to_l1_visp.rst +0 -0
  106. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/docs/l0_to_l1_visp_full-trial.rst +0 -0
  107. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/docs/landing_page.rst +0 -0
  108. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/docs/make.bat +0 -0
  109. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/docs/polarization_calibration.rst +0 -0
  110. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/docs/requirements.txt +0 -0
  111. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/docs/requirements_table.rst +0 -0
  112. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/docs/science_calibration.rst +0 -0
  113. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/docs/scientific_changelog.rst +0 -0
  114. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/docs/wavelength_calibration.rst +0 -0
  115. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/licenses/LICENSE.rst +0 -0
  116. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/science_towncrier.sh +0 -0
  117. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/setup.cfg +0 -0
  118. {dkist_processing_visp-5.7.10 → dkist_processing_visp-5.7.11}/towncrier_science.toml +0 -0
@@ -1,3 +1,12 @@
1
+ v5.7.11 (2026-05-13)
2
+ ====================
3
+
4
+ Bugfixes
5
+ --------
6
+
7
+ - Make the `VSPSTP` keyword not required by the VISP L0 FITS access class. (`#316 <https://bitbucket.org/dkistdc/dkist-processing-visp/pull-requests/316>`__)
8
+
9
+
1
10
  v5.7.10 (2026-05-12)
2
11
  ====================
3
12
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dkist-processing-visp
3
- Version: 5.7.10
3
+ Version: 5.7.11
4
4
  Summary: Science processing code for the ViSP instrument on DKIST
5
5
  Author-email: NSO / AURA <dkistdc@nso.edu>
6
6
  License: BSD-3-Clause
@@ -98,6 +98,7 @@ Requires-Dist: apache-airflow-providers-postgres==6.6.3; extra == "frozen"
98
98
  Requires-Dist: apache-airflow-providers-smtp==3.0.0; extra == "frozen"
99
99
  Requires-Dist: apache-airflow-providers-standard==1.13.0; extra == "frozen"
100
100
  Requires-Dist: apache-airflow-task-sdk==1.2.1; extra == "frozen"
101
+ Requires-Dist: appnope==0.1.4; extra == "frozen"
101
102
  Requires-Dist: argcomplete==3.6.3; extra == "frozen"
102
103
  Requires-Dist: argon2-cffi==25.1.0; extra == "frozen"
103
104
  Requires-Dist: argon2-cffi-bindings==25.1.0; extra == "frozen"
@@ -117,8 +118,8 @@ Requires-Dist: babel==2.18.0; extra == "frozen"
117
118
  Requires-Dist: beautifulsoup4==4.14.3; extra == "frozen"
118
119
  Requires-Dist: billiard==4.2.4; extra == "frozen"
119
120
  Requires-Dist: bleach==6.3.0; extra == "frozen"
120
- Requires-Dist: boto3==1.43.6; extra == "frozen"
121
- Requires-Dist: botocore==1.43.6; extra == "frozen"
121
+ Requires-Dist: boto3==1.43.7; extra == "frozen"
122
+ Requires-Dist: botocore==1.43.7; extra == "frozen"
122
123
  Requires-Dist: cadwyn==6.2.2; extra == "frozen"
123
124
  Requires-Dist: celery==5.6.3; extra == "frozen"
124
125
  Requires-Dist: certifi==2026.4.22; extra == "frozen"
@@ -144,7 +145,7 @@ Requires-Dist: dkist-processing-common==14.2.0; extra == "frozen"
144
145
  Requires-Dist: dkist-processing-core==7.3.0; extra == "frozen"
145
146
  Requires-Dist: dkist-processing-math==2.2.2; extra == "frozen"
146
147
  Requires-Dist: dkist-processing-pac==3.1.2; extra == "frozen"
147
- Requires-Dist: dkist-processing-visp==5.7.10; extra == "frozen"
148
+ Requires-Dist: dkist-processing-visp==5.7.11; extra == "frozen"
148
149
  Requires-Dist: dkist-service-configuration==4.3.0; extra == "frozen"
149
150
  Requires-Dist: dkist-spectral-lines==3.0.1; extra == "frozen"
150
151
  Requires-Dist: dkist_fits_specifications==4.26.0; extra == "frozen"
@@ -170,7 +171,7 @@ Requires-Dist: httpcore==1.0.9; extra == "frozen"
170
171
  Requires-Dist: httptools==0.7.1; extra == "frozen"
171
172
  Requires-Dist: httpx==0.28.1; extra == "frozen"
172
173
  Requires-Dist: humanize==4.15.0; extra == "frozen"
173
- Requires-Dist: idna==3.14; extra == "frozen"
174
+ Requires-Dist: idna==3.15; extra == "frozen"
174
175
  Requires-Dist: imageio-ffmpeg==0.6.0; extra == "frozen"
175
176
  Requires-Dist: importlib_metadata==8.7.1; extra == "frozen"
176
177
  Requires-Dist: ipykernel==7.2.0; extra == "frozen"
@@ -291,13 +292,13 @@ Requires-Dist: pytz==2026.2; extra == "frozen"
291
292
  Requires-Dist: pyzmq==27.1.0; extra == "frozen"
292
293
  Requires-Dist: redis==6.4.0; extra == "frozen"
293
294
  Requires-Dist: referencing==0.37.0; extra == "frozen"
294
- Requires-Dist: requests==2.34.0; extra == "frozen"
295
+ Requires-Dist: requests==2.34.1; extra == "frozen"
295
296
  Requires-Dist: rfc3339-validator==0.1.4; extra == "frozen"
296
297
  Requires-Dist: rfc3986-validator==0.1.1; extra == "frozen"
297
298
  Requires-Dist: rfc3987-syntax==1.1.0; extra == "frozen"
298
299
  Requires-Dist: rich==15.0.0; extra == "frozen"
299
300
  Requires-Dist: rich-argparse==1.8.0; extra == "frozen"
300
- Requires-Dist: rich-toolkit==0.19.8; extra == "frozen"
301
+ Requires-Dist: rich-toolkit==0.19.9; extra == "frozen"
301
302
  Requires-Dist: rpds-py==0.30.0; extra == "frozen"
302
303
  Requires-Dist: s3transfer==0.17.0; extra == "frozen"
303
304
  Requires-Dist: scikit-image==0.25.2; extra == "frozen"
@@ -2,6 +2,7 @@
2
2
 
3
3
  from typing import Type
4
4
 
5
+ from dkist_processing_common.models.fits_access import HEADER_KEY_NOT_FOUND
5
6
  from dkist_processing_common.models.flower_pot import SetStem
6
7
  from dkist_processing_common.models.flower_pot import SpilledDirt
7
8
  from dkist_processing_common.models.task_name import TaskName
@@ -34,6 +35,9 @@ class TotalRasterStepsBud(SetStem):
34
35
  if fits_obj.ip_task_type.casefold() != TaskName.observe.value.casefold():
35
36
  return SpilledDirt
36
37
 
38
+ if fits_obj.raster_scan_step == HEADER_KEY_NOT_FOUND:
39
+ raise KeyError("observe frame did not contain the VSPSTP header key")
40
+
37
41
  num_raster = getattr(fits_obj, VispMetadataKey.total_raster_steps.name)
38
42
  self.num_steps_set.add(num_raster)
39
43
  single_step = getattr(fits_obj, VispMetadataKey.raster_scan_step.name)
@@ -80,4 +84,7 @@ class RasterScanStepFlower(SingleValueSingleKeyFlower):
80
84
  """
81
85
  if fits_obj.ip_task_type.casefold() != TaskName.observe.value.casefold():
82
86
  return SpilledDirt
87
+ # observe frames missing the VSPSTP key should error
88
+ if getattr(fits_obj, self.metadata_key) == HEADER_KEY_NOT_FOUND:
89
+ raise KeyError("observe frame did not contain the VSPSTP header key")
83
90
  return super().setter(fits_obj)
@@ -2,6 +2,7 @@
2
2
 
3
3
  import numpy as np
4
4
  from astropy.io import fits
5
+ from dkist_processing_common.models.fits_access import HEADER_KEY_NOT_FOUND
5
6
  from dkist_processing_common.parsers.l0_fits_access import L0FitsAccess
6
7
 
7
8
  from dkist_processing_visp.models.fits_access import VispMetadataKey
@@ -42,7 +43,9 @@ class VispL0FitsAccess(L0FitsAccess):
42
43
  self.number_of_modulator_states: int = self.header[
43
44
  VispMetadataKey.number_of_modulator_states
44
45
  ]
45
- self.raster_scan_step: int = self.header[VispMetadataKey.raster_scan_step]
46
+ self.raster_scan_step: int = self.header.get(
47
+ VispMetadataKey.raster_scan_step, HEADER_KEY_NOT_FOUND
48
+ )
46
49
  self.total_raster_steps: int = self.header[VispMetadataKey.total_raster_steps]
47
50
  self.modulator_state: int = self.header[VispMetadataKey.modulator_state]
48
51
  self.polarimeter_mode: str = self.header[VispMetadataKey.polarimeter_mode]
@@ -342,6 +342,7 @@ class VispHeadersValidObserveFrames(VispHeaders):
342
342
  ip_start_time="2022-11-28T13:55:00",
343
343
  ip_end_time="2022-11-28T13:56:00",
344
344
  grating_constant=316,
345
+ remove_visp_020: bool = False,
345
346
  **kwargs,
346
347
  ):
347
348
  ################################################
@@ -391,6 +392,9 @@ class VispHeadersValidObserveFrames(VispHeaders):
391
392
  self.add_constant_key("CAM__005", readout_exp_time)
392
393
  self.add_constant_key("CAM__014", 10) # Num frames in FPA
393
394
 
395
+ if remove_visp_020:
396
+ self.add_remove_key("VISP_020")
397
+
394
398
  @property
395
399
  def current_map(self) -> int:
396
400
  # There is no header value for map num; this property is used to help data generator fixtures with tagging
@@ -706,3 +706,31 @@ def test_dark_date_end_bud(parse_task_with_no_data, mocker, fake_gql_client):
706
706
  dark_date_begin_dt + (num_frames - 1) * frame_cadence + fpa_exp_time_s
707
707
  )
708
708
  np.testing.assert_allclose(dark_date_end_dt, expected_dark_end_date_dt, atol=1e-6)
709
+
710
+
711
+ def test_missing_vspstp_from_observe(
712
+ parse_task_with_no_data, num_modstates, mocker, fake_gql_client
713
+ ):
714
+ """
715
+ :Given: A parse task with an observe frame missing the VSPSTP key
716
+ :When: Calling the parse task
717
+ :Then: The correct error is raised
718
+ """
719
+ mocker.patch(
720
+ "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient", new=fake_gql_client
721
+ )
722
+ task = parse_task_with_no_data
723
+ write_input_dark_frames_to_task(task, readout_exp_time=0.1, exp_time=0.2)
724
+ write_input_observe_frames_to_task(
725
+ task,
726
+ num_maps=1,
727
+ num_steps=2,
728
+ num_modstates=num_modstates,
729
+ readout_exp_time=0.1,
730
+ exp_time=0.2,
731
+ obs_dataset_class=VispHeadersValidObserveFrames,
732
+ remove_visp_020=True,
733
+ )
734
+
735
+ with pytest.raises(KeyError, match="observe frame did not contain the VSPSTP header key"):
736
+ task()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dkist-processing-visp
3
- Version: 5.7.10
3
+ Version: 5.7.11
4
4
  Summary: Science processing code for the ViSP instrument on DKIST
5
5
  Author-email: NSO / AURA <dkistdc@nso.edu>
6
6
  License: BSD-3-Clause
@@ -98,6 +98,7 @@ Requires-Dist: apache-airflow-providers-postgres==6.6.3; extra == "frozen"
98
98
  Requires-Dist: apache-airflow-providers-smtp==3.0.0; extra == "frozen"
99
99
  Requires-Dist: apache-airflow-providers-standard==1.13.0; extra == "frozen"
100
100
  Requires-Dist: apache-airflow-task-sdk==1.2.1; extra == "frozen"
101
+ Requires-Dist: appnope==0.1.4; extra == "frozen"
101
102
  Requires-Dist: argcomplete==3.6.3; extra == "frozen"
102
103
  Requires-Dist: argon2-cffi==25.1.0; extra == "frozen"
103
104
  Requires-Dist: argon2-cffi-bindings==25.1.0; extra == "frozen"
@@ -117,8 +118,8 @@ Requires-Dist: babel==2.18.0; extra == "frozen"
117
118
  Requires-Dist: beautifulsoup4==4.14.3; extra == "frozen"
118
119
  Requires-Dist: billiard==4.2.4; extra == "frozen"
119
120
  Requires-Dist: bleach==6.3.0; extra == "frozen"
120
- Requires-Dist: boto3==1.43.6; extra == "frozen"
121
- Requires-Dist: botocore==1.43.6; extra == "frozen"
121
+ Requires-Dist: boto3==1.43.7; extra == "frozen"
122
+ Requires-Dist: botocore==1.43.7; extra == "frozen"
122
123
  Requires-Dist: cadwyn==6.2.2; extra == "frozen"
123
124
  Requires-Dist: celery==5.6.3; extra == "frozen"
124
125
  Requires-Dist: certifi==2026.4.22; extra == "frozen"
@@ -144,7 +145,7 @@ Requires-Dist: dkist-processing-common==14.2.0; extra == "frozen"
144
145
  Requires-Dist: dkist-processing-core==7.3.0; extra == "frozen"
145
146
  Requires-Dist: dkist-processing-math==2.2.2; extra == "frozen"
146
147
  Requires-Dist: dkist-processing-pac==3.1.2; extra == "frozen"
147
- Requires-Dist: dkist-processing-visp==5.7.10; extra == "frozen"
148
+ Requires-Dist: dkist-processing-visp==5.7.11; extra == "frozen"
148
149
  Requires-Dist: dkist-service-configuration==4.3.0; extra == "frozen"
149
150
  Requires-Dist: dkist-spectral-lines==3.0.1; extra == "frozen"
150
151
  Requires-Dist: dkist_fits_specifications==4.26.0; extra == "frozen"
@@ -170,7 +171,7 @@ Requires-Dist: httpcore==1.0.9; extra == "frozen"
170
171
  Requires-Dist: httptools==0.7.1; extra == "frozen"
171
172
  Requires-Dist: httpx==0.28.1; extra == "frozen"
172
173
  Requires-Dist: humanize==4.15.0; extra == "frozen"
173
- Requires-Dist: idna==3.14; extra == "frozen"
174
+ Requires-Dist: idna==3.15; extra == "frozen"
174
175
  Requires-Dist: imageio-ffmpeg==0.6.0; extra == "frozen"
175
176
  Requires-Dist: importlib_metadata==8.7.1; extra == "frozen"
176
177
  Requires-Dist: ipykernel==7.2.0; extra == "frozen"
@@ -291,13 +292,13 @@ Requires-Dist: pytz==2026.2; extra == "frozen"
291
292
  Requires-Dist: pyzmq==27.1.0; extra == "frozen"
292
293
  Requires-Dist: redis==6.4.0; extra == "frozen"
293
294
  Requires-Dist: referencing==0.37.0; extra == "frozen"
294
- Requires-Dist: requests==2.34.0; extra == "frozen"
295
+ Requires-Dist: requests==2.34.1; extra == "frozen"
295
296
  Requires-Dist: rfc3339-validator==0.1.4; extra == "frozen"
296
297
  Requires-Dist: rfc3986-validator==0.1.1; extra == "frozen"
297
298
  Requires-Dist: rfc3987-syntax==1.1.0; extra == "frozen"
298
299
  Requires-Dist: rich==15.0.0; extra == "frozen"
299
300
  Requires-Dist: rich-argparse==1.8.0; extra == "frozen"
300
- Requires-Dist: rich-toolkit==0.19.8; extra == "frozen"
301
+ Requires-Dist: rich-toolkit==0.19.9; extra == "frozen"
301
302
  Requires-Dist: rpds-py==0.30.0; extra == "frozen"
302
303
  Requires-Dist: s3transfer==0.17.0; extra == "frozen"
303
304
  Requires-Dist: scikit-image==0.25.2; extra == "frozen"
@@ -64,6 +64,7 @@ apache-airflow-providers-postgres==6.6.3
64
64
  apache-airflow-providers-smtp==3.0.0
65
65
  apache-airflow-providers-standard==1.13.0
66
66
  apache-airflow-task-sdk==1.2.1
67
+ appnope==0.1.4
67
68
  argcomplete==3.6.3
68
69
  argon2-cffi==25.1.0
69
70
  argon2-cffi-bindings==25.1.0
@@ -83,8 +84,8 @@ babel==2.18.0
83
84
  beautifulsoup4==4.14.3
84
85
  billiard==4.2.4
85
86
  bleach==6.3.0
86
- boto3==1.43.6
87
- botocore==1.43.6
87
+ boto3==1.43.7
88
+ botocore==1.43.7
88
89
  cadwyn==6.2.2
89
90
  celery==5.6.3
90
91
  certifi==2026.4.22
@@ -110,7 +111,7 @@ dkist-processing-common==14.2.0
110
111
  dkist-processing-core==7.3.0
111
112
  dkist-processing-math==2.2.2
112
113
  dkist-processing-pac==3.1.2
113
- dkist-processing-visp==5.7.10
114
+ dkist-processing-visp==5.7.11
114
115
  dkist-service-configuration==4.3.0
115
116
  dkist-spectral-lines==3.0.1
116
117
  dkist_fits_specifications==4.26.0
@@ -136,7 +137,7 @@ httpcore==1.0.9
136
137
  httptools==0.7.1
137
138
  httpx==0.28.1
138
139
  humanize==4.15.0
139
- idna==3.14
140
+ idna==3.15
140
141
  imageio-ffmpeg==0.6.0
141
142
  importlib_metadata==8.7.1
142
143
  ipykernel==7.2.0
@@ -257,13 +258,13 @@ pytz==2026.2
257
258
  pyzmq==27.1.0
258
259
  redis==6.4.0
259
260
  referencing==0.37.0
260
- requests==2.34.0
261
+ requests==2.34.1
261
262
  rfc3339-validator==0.1.4
262
263
  rfc3986-validator==0.1.1
263
264
  rfc3987-syntax==1.1.0
264
265
  rich==15.0.0
265
266
  rich-argparse==1.8.0
266
- rich-toolkit==0.19.8
267
+ rich-toolkit==0.19.9
267
268
  rpds-py==0.30.0
268
269
  s3transfer==0.17.0
269
270
  scikit-image==0.25.2
@@ -9,8 +9,8 @@ exclude = ["build*"]
9
9
 
10
10
  [tool.dkist-dev-tools]
11
11
  # Most recently frozen version by dkist-dev-tools
12
- version = "5.7.10"
13
- date = 2026-05-12T14:33:54.694739
12
+ version = "5.7.11"
13
+ date = 2026-05-13T14:23:26.174095
14
14
 
15
15
  [project]
16
16
  dynamic = ["version"]
@@ -126,6 +126,7 @@ frozen = [
126
126
  "apache-airflow-providers-smtp == 3.0.0",
127
127
  "apache-airflow-providers-standard == 1.13.0",
128
128
  "apache-airflow-task-sdk == 1.2.1",
129
+ "appnope == 0.1.4",
129
130
  "argcomplete == 3.6.3",
130
131
  "argon2-cffi == 25.1.0",
131
132
  "argon2-cffi-bindings == 25.1.0",
@@ -145,8 +146,8 @@ frozen = [
145
146
  "beautifulsoup4 == 4.14.3",
146
147
  "billiard == 4.2.4",
147
148
  "bleach == 6.3.0",
148
- "boto3 == 1.43.6",
149
- "botocore == 1.43.6",
149
+ "boto3 == 1.43.7",
150
+ "botocore == 1.43.7",
150
151
  "cadwyn == 6.2.2",
151
152
  "celery == 5.6.3",
152
153
  "certifi == 2026.4.22",
@@ -172,7 +173,7 @@ frozen = [
172
173
  "dkist-processing-core == 7.3.0",
173
174
  "dkist-processing-math == 2.2.2",
174
175
  "dkist-processing-pac == 3.1.2",
175
- "dkist-processing-visp == 5.7.10",
176
+ "dkist-processing-visp == 5.7.11",
176
177
  "dkist-service-configuration == 4.3.0",
177
178
  "dkist-spectral-lines == 3.0.1",
178
179
  "dkist_fits_specifications == 4.26.0",
@@ -198,7 +199,7 @@ frozen = [
198
199
  "httptools == 0.7.1",
199
200
  "httpx == 0.28.1",
200
201
  "humanize == 4.15.0",
201
- "idna == 3.14",
202
+ "idna == 3.15",
202
203
  "imageio-ffmpeg == 0.6.0",
203
204
  "importlib_metadata == 8.7.1",
204
205
  "ipykernel == 7.2.0",
@@ -319,13 +320,13 @@ frozen = [
319
320
  "pyzmq == 27.1.0",
320
321
  "redis == 6.4.0",
321
322
  "referencing == 0.37.0",
322
- "requests == 2.34.0",
323
+ "requests == 2.34.1",
323
324
  "rfc3339-validator == 0.1.4",
324
325
  "rfc3986-validator == 0.1.1",
325
326
  "rfc3987-syntax == 1.1.0",
326
327
  "rich == 15.0.0",
327
328
  "rich-argparse == 1.8.0",
328
- "rich-toolkit == 0.19.8",
329
+ "rich-toolkit == 0.19.9",
329
330
  "rpds-py == 0.30.0",
330
331
  "s3transfer == 0.17.0",
331
332
  "scikit-image == 0.25.2",