dkist-processing-common 11.7.0rc2__tar.gz → 11.7.0rc4__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 (142) hide show
  1. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/PKG-INFO +1 -1
  2. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/models/constants.py +12 -12
  3. dkist_processing_common-11.7.0rc4/dkist_processing_common/parsers/observing_program_id_bud.py +24 -0
  4. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/parsers/time.py +9 -3
  5. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tasks/parse_l0_input_data.py +27 -25
  6. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_parse_l0_input_data.py +4 -3
  7. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_stems.py +35 -0
  8. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common.egg-info/PKG-INFO +1 -1
  9. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common.egg-info/SOURCES.txt +1 -0
  10. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/.gitignore +0 -0
  11. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/.pre-commit-config.yaml +0 -0
  12. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/.readthedocs.yml +0 -0
  13. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/.snyk +0 -0
  14. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/CHANGELOG.rst +0 -0
  15. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/README.rst +0 -0
  16. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/bitbucket-pipelines.yml +0 -0
  17. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/changelog/.gitempty +0 -0
  18. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/changelog/267.feature.1.rst +0 -0
  19. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/changelog/267.feature.2.rst +0 -0
  20. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/changelog/267.feature.rst +0 -0
  21. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/changelog/267.misc.rst +0 -0
  22. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/changelog/267.removal.1.rst +0 -0
  23. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/changelog/267.removal.rst +0 -0
  24. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/__init__.py +0 -0
  25. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/_util/__init__.py +0 -0
  26. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/_util/constants.py +0 -0
  27. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/_util/graphql.py +0 -0
  28. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/_util/scratch.py +0 -0
  29. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/_util/tags.py +0 -0
  30. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/codecs/__init__.py +0 -0
  31. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/codecs/array.py +0 -0
  32. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/codecs/asdf.py +0 -0
  33. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/codecs/basemodel.py +0 -0
  34. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/codecs/bytes.py +0 -0
  35. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/codecs/fits.py +0 -0
  36. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/codecs/iobase.py +0 -0
  37. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/codecs/json.py +0 -0
  38. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/codecs/path.py +0 -0
  39. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/codecs/quality.py +0 -0
  40. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/codecs/str.py +0 -0
  41. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/config.py +0 -0
  42. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/fonts/Lato-Regular.ttf +0 -0
  43. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/fonts/__init__.py +0 -0
  44. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/manual.py +0 -0
  45. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/models/__init__.py +0 -0
  46. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/models/dkist_location.py +0 -0
  47. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/models/fits_access.py +0 -0
  48. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/models/flower_pot.py +0 -0
  49. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/models/fried_parameter.py +0 -0
  50. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/models/graphql.py +0 -0
  51. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/models/input_dataset.py +0 -0
  52. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/models/message.py +0 -0
  53. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/models/message_queue_binding.py +0 -0
  54. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/models/metric_code.py +0 -0
  55. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/models/parameters.py +0 -0
  56. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/models/quality.py +0 -0
  57. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/models/tags.py +0 -0
  58. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/models/task_name.py +0 -0
  59. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/models/telemetry.py +0 -0
  60. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/models/wavelength.py +0 -0
  61. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/parsers/__init__.py +0 -0
  62. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/parsers/average_bud.py +0 -0
  63. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/parsers/cs_step.py +0 -0
  64. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/parsers/dsps_repeat.py +0 -0
  65. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/parsers/experiment_id_bud.py +0 -0
  66. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/parsers/id_bud.py +0 -0
  67. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/parsers/l0_fits_access.py +0 -0
  68. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/parsers/l1_fits_access.py +0 -0
  69. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/parsers/near_bud.py +0 -0
  70. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/parsers/proposal_id_bud.py +0 -0
  71. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/parsers/quality.py +0 -0
  72. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/parsers/retarder.py +0 -0
  73. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/parsers/single_value_single_key_flower.py +0 -0
  74. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/parsers/task.py +0 -0
  75. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/parsers/unique_bud.py +0 -0
  76. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/parsers/wavelength.py +0 -0
  77. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tasks/__init__.py +0 -0
  78. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tasks/assemble_movie.py +0 -0
  79. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tasks/base.py +0 -0
  80. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tasks/l1_output_data.py +0 -0
  81. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tasks/mixin/__init__.py +0 -0
  82. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tasks/mixin/globus.py +0 -0
  83. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tasks/mixin/interservice_bus.py +0 -0
  84. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tasks/mixin/metadata_store.py +0 -0
  85. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tasks/mixin/object_store.py +0 -0
  86. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tasks/mixin/quality/__init__.py +0 -0
  87. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tasks/mixin/quality/_base.py +0 -0
  88. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tasks/mixin/quality/_metrics.py +0 -0
  89. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tasks/output_data_base.py +0 -0
  90. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tasks/quality_metrics.py +0 -0
  91. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tasks/teardown.py +0 -0
  92. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tasks/transfer_input_data.py +0 -0
  93. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tasks/trial_catalog.py +0 -0
  94. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tasks/trial_output_data.py +0 -0
  95. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tasks/write_l1.py +0 -0
  96. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/__init__.py +0 -0
  97. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/conftest.py +0 -0
  98. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/mock_metadata_store.py +0 -0
  99. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_assemble_movie.py +0 -0
  100. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_assemble_quality.py +0 -0
  101. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_base.py +0 -0
  102. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_codecs.py +0 -0
  103. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_constants.py +0 -0
  104. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_cs_step.py +0 -0
  105. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_dkist_location.py +0 -0
  106. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_fits_access.py +0 -0
  107. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_flower_pot.py +0 -0
  108. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_fried_parameter.py +0 -0
  109. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_input_dataset.py +0 -0
  110. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_interservice_bus.py +0 -0
  111. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_interservice_bus_mixin.py +0 -0
  112. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_manual_processing.py +0 -0
  113. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_output_data_base.py +0 -0
  114. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_parameters.py +0 -0
  115. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_publish_catalog_messages.py +0 -0
  116. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_quality.py +0 -0
  117. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_quality_mixin.py +0 -0
  118. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_scratch.py +0 -0
  119. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_submit_dataset_metadata.py +0 -0
  120. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_tags.py +0 -0
  121. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_task_name.py +0 -0
  122. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_task_parsing.py +0 -0
  123. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_teardown.py +0 -0
  124. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_transfer_input_data.py +0 -0
  125. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_transfer_l1_output_data.py +0 -0
  126. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_trial_catalog.py +0 -0
  127. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_trial_output_data.py +0 -0
  128. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_workflow_task_base.py +0 -0
  129. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common/tests/test_write_l1.py +0 -0
  130. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common.egg-info/dependency_links.txt +0 -0
  131. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common.egg-info/requires.txt +0 -0
  132. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/dkist_processing_common.egg-info/top_level.txt +0 -0
  133. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/docs/Makefile +0 -0
  134. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/docs/changelog.rst +0 -0
  135. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/docs/conf.py +0 -0
  136. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/docs/index.rst +0 -0
  137. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/docs/landing_page.rst +0 -0
  138. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/docs/make.bat +0 -0
  139. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/docs/requirements.txt +0 -0
  140. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/licenses/LICENSE.rst +0 -0
  141. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/pyproject.toml +0 -0
  142. {dkist_processing_common-11.7.0rc2 → dkist_processing_common-11.7.0rc4}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dkist-processing-common
3
- Version: 11.7.0rc2
3
+ Version: 11.7.0rc4
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
@@ -44,9 +44,9 @@ class BudName(StrEnum):
44
44
  software_binning_y = "SOFTWARE_BINNING_Y"
45
45
  hls_version = "HLS_VERSION"
46
46
  # Multi-task buds start here:
47
- dark_observing_program_execution_id = "DARK_OBSERVING_PROGRAM_EXECUTION_ID"
48
- solar_gain_observing_program_execution_id = "SOLAR_GAIN_OBSERVING_PROGRAM_EXECUTION_ID"
49
- polcal_observing_program_execution_id = "POLCAL_OBSERVING_PROGRAM_EXECUTION_ID"
47
+ dark_observing_program_execution_ids = "DARK_OBSERVING_PROGRAM_EXECUTION_IDS"
48
+ solar_gain_observing_program_execution_ids = "SOLAR_GAIN_OBSERVING_PROGRAM_EXECUTION_IDS"
49
+ polcal_observing_program_execution_ids = "POLCAL_OBSERVING_PROGRAM_EXECUTION_IDS"
50
50
  dark_date_begin = "DARK_DATE_BEGIN"
51
51
  solar_gain_date_begin = "SOLAR_GAIN_DATE_BEGIN"
52
52
  polcal_date_begin = "POLCAL_DATE_BEGIN"
@@ -285,21 +285,21 @@ class ConstantsBase:
285
285
  # Multi-task constants start here:
286
286
 
287
287
  @property
288
- def dark_observing_program_execution_id(self) -> list[str]:
289
- """Return the observing program execution id constant for the dark task."""
290
- observing_programs = self._db_dict[BudName.dark_observing_program_execution_id]
288
+ def dark_observing_program_execution_ids(self) -> list[str]:
289
+ """Return the observing program execution ids constant for the dark task."""
290
+ observing_programs = self._db_dict[BudName.dark_observing_program_execution_ids]
291
291
  return list(observing_programs)
292
292
 
293
293
  @property
294
- def solar_gain_observing_program_execution_id(self) -> list[str]:
295
- """Return the observing program execution id constant for the solar_gain task."""
296
- observing_programs = self._db_dict[BudName.solar_gain_observing_program_execution_id]
294
+ def solar_gain_observing_program_execution_ids(self) -> list[str]:
295
+ """Return the observing program execution ids constant for the solar_gain task."""
296
+ observing_programs = self._db_dict[BudName.solar_gain_observing_program_execution_ids]
297
297
  return list(observing_programs)
298
298
 
299
299
  @property
300
- def polcal_observing_program_execution_id(self) -> list[str]:
301
- """Return the observing program execution id constant."""
302
- observing_programs = self._db_dict[BudName.polcal_observing_program_execution_id]
300
+ def polcal_observing_program_execution_ids(self) -> list[str]:
301
+ """Return the observing program execution ids constant."""
302
+ observing_programs = self._db_dict[BudName.polcal_observing_program_execution_ids]
303
303
  return list(observing_programs)
304
304
 
305
305
  @property
@@ -0,0 +1,24 @@
1
+ """Observing Program Id parser."""
2
+
3
+ from typing import Callable
4
+
5
+ from dkist_processing_common.models.fits_access import MetadataKey
6
+ from dkist_processing_common.parsers.id_bud import TaskContributingIdsBud
7
+ from dkist_processing_common.parsers.task import passthrough_header_ip_task
8
+
9
+
10
+ class TaskContributingObservingProgramExecutionIdsBud(TaskContributingIdsBud):
11
+ """Class to create a Bud for the supporting observing_program_ids."""
12
+
13
+ def __init__(
14
+ self,
15
+ constant_name: str,
16
+ ip_task_types: str | list[str],
17
+ task_type_parsing_function: Callable = passthrough_header_ip_task,
18
+ ):
19
+ super().__init__(
20
+ constant_name=constant_name,
21
+ metadata_key=MetadataKey.observing_program_execution_id,
22
+ ip_task_types=ip_task_types,
23
+ task_type_parsing_function=task_type_parsing_function,
24
+ )
@@ -66,7 +66,7 @@ class TaskDatetimeBudBase(Stem):
66
66
  stem_name: str,
67
67
  metadata_key: str | StrEnum,
68
68
  ip_task_types: str | list[str],
69
- header_task_parsing_func: Callable = passthrough_header_ip_task,
69
+ task_type_parsing_function: Callable = passthrough_header_ip_task,
70
70
  ):
71
71
  super().__init__(stem_name=stem_name)
72
72
 
@@ -76,7 +76,7 @@ class TaskDatetimeBudBase(Stem):
76
76
  if isinstance(ip_task_types, str):
77
77
  ip_task_types = [ip_task_types]
78
78
  self.ip_task_types = [task.casefold() for task in ip_task_types]
79
- self.header_parsing_function = header_task_parsing_func
79
+ self.header_parsing_function = task_type_parsing_function
80
80
 
81
81
  def setter(self, fits_obj: L0FitsAccess) -> float | Type[SpilledDirt]:
82
82
  """
@@ -218,11 +218,17 @@ class VarianceCadenceBud(CadenceBudBase):
218
218
  class TaskDateBeginBud(TaskDatetimeBudBase):
219
219
  """Class for the date begin task Bud."""
220
220
 
221
- def __init__(self, constant_name: str, ip_task_types: str | list[str]):
221
+ def __init__(
222
+ self,
223
+ constant_name: str,
224
+ ip_task_types: str | list[str],
225
+ task_type_parsing_function: Callable = passthrough_header_ip_task,
226
+ ):
222
227
  super().__init__(
223
228
  stem_name=constant_name,
224
229
  metadata_key=MetadataKey.time_obs,
225
230
  ip_task_types=ip_task_types,
231
+ task_type_parsing_function=task_type_parsing_function,
226
232
  )
227
233
 
228
234
  def getter(self, key) -> str:
@@ -37,9 +37,12 @@ from dkist_processing_common.models.task_name import TaskName
37
37
  from dkist_processing_common.parsers.average_bud import TaskAverageBud
38
38
  from dkist_processing_common.parsers.experiment_id_bud import ContributingExperimentIdsBud
39
39
  from dkist_processing_common.parsers.experiment_id_bud import ExperimentIdBud
40
- from dkist_processing_common.parsers.id_bud import TaskContributingIdsBud
40
+ from dkist_processing_common.parsers.observing_program_id_bud import (
41
+ TaskContributingObservingProgramExecutionIdsBud,
42
+ )
41
43
  from dkist_processing_common.parsers.proposal_id_bud import ContributingProposalIdsBud
42
44
  from dkist_processing_common.parsers.proposal_id_bud import ProposalIdBud
45
+ from dkist_processing_common.parsers.task import parse_header_ip_task_with_gains
43
46
  from dkist_processing_common.parsers.time import AverageCadenceBud
44
47
  from dkist_processing_common.parsers.time import MaximumCadenceBud
45
48
  from dkist_processing_common.parsers.time import MinimumCadenceBud
@@ -87,19 +90,17 @@ def dataset_extra_bud_factory() -> list[S]:
87
90
  constant_name=BudName.hls_version,
88
91
  metadata_key=MetadataKey.hls_version,
89
92
  ),
90
- TaskContributingIdsBud(
91
- constant_name=BudName.dark_observing_program_execution_id,
92
- metadata_key=MetadataKey.observing_program_execution_id,
93
+ TaskContributingObservingProgramExecutionIdsBud(
94
+ constant_name=BudName.dark_observing_program_execution_ids,
93
95
  ip_task_types=TaskName.dark,
94
96
  ),
95
- TaskContributingIdsBud(
96
- constant_name=BudName.solar_gain_observing_program_execution_id,
97
- metadata_key=MetadataKey.observing_program_execution_id,
97
+ TaskContributingObservingProgramExecutionIdsBud(
98
+ constant_name=BudName.solar_gain_observing_program_execution_ids,
98
99
  ip_task_types=TaskName.solar_gain,
100
+ task_type_parsing_function=parse_header_ip_task_with_gains,
99
101
  ),
100
- TaskContributingIdsBud(
101
- constant_name=BudName.polcal_observing_program_execution_id,
102
- metadata_key=MetadataKey.observing_program_execution_id,
102
+ TaskContributingObservingProgramExecutionIdsBud(
103
+ constant_name=BudName.polcal_observing_program_execution_ids,
103
104
  ip_task_types=TaskName.polcal,
104
105
  ),
105
106
  TaskUniqueBud(
@@ -111,51 +112,40 @@ def dataset_extra_bud_factory() -> list[S]:
111
112
  constant_name=BudName.solar_gain_num_raw_frames_per_fpa,
112
113
  metadata_key=MetadataKey.num_raw_frames_per_fpa,
113
114
  ip_task_types=TaskName.solar_gain,
115
+ task_type_parsing_function=parse_header_ip_task_with_gains,
114
116
  ),
115
117
  TaskUniqueBud(
116
118
  constant_name=BudName.polcal_num_raw_frames_per_fpa,
117
119
  metadata_key=MetadataKey.num_raw_frames_per_fpa,
118
120
  ip_task_types=TaskName.polcal,
119
121
  ),
120
- TaskUniqueBud(
121
- constant_name=BudName.dark_telescope_tracking_mode,
122
- metadata_key=MetadataKey.telescope_tracking_mode,
123
- ip_task_types=TaskName.dark,
124
- ),
125
122
  TaskUniqueBud(
126
123
  constant_name=BudName.solar_gain_telescope_tracking_mode,
127
124
  metadata_key=MetadataKey.telescope_tracking_mode,
128
125
  ip_task_types=TaskName.solar_gain,
126
+ task_type_parsing_function=parse_header_ip_task_with_gains,
129
127
  ),
130
128
  TaskUniqueBud(
131
129
  constant_name=BudName.polcal_telescope_tracking_mode,
132
130
  metadata_key=MetadataKey.telescope_tracking_mode,
133
131
  ip_task_types=TaskName.polcal,
134
132
  ),
135
- TaskUniqueBud(
136
- constant_name=BudName.dark_coude_table_tracking_mode,
137
- metadata_key=MetadataKey.coude_table_tracking_mode,
138
- ip_task_types=TaskName.dark,
139
- ),
140
133
  TaskUniqueBud(
141
134
  constant_name=BudName.solar_gain_coude_table_tracking_mode,
142
135
  metadata_key=MetadataKey.coude_table_tracking_mode,
143
136
  ip_task_types=TaskName.solar_gain,
137
+ task_type_parsing_function=parse_header_ip_task_with_gains,
144
138
  ),
145
139
  TaskUniqueBud(
146
140
  constant_name=BudName.polcal_coude_table_tracking_mode,
147
141
  metadata_key=MetadataKey.coude_table_tracking_mode,
148
142
  ip_task_types=TaskName.polcal,
149
143
  ),
150
- TaskUniqueBud(
151
- constant_name=BudName.dark_telescope_scanning_mode,
152
- metadata_key=MetadataKey.telescope_scanning_mode,
153
- ip_task_types=TaskName.dark,
154
- ),
155
144
  TaskUniqueBud(
156
145
  constant_name=BudName.solar_gain_telescope_scanning_mode,
157
146
  metadata_key=MetadataKey.telescope_scanning_mode,
158
147
  ip_task_types=TaskName.solar_gain,
148
+ task_type_parsing_function=parse_header_ip_task_with_gains,
159
149
  ),
160
150
  TaskUniqueBud(
161
151
  constant_name=BudName.polcal_telescope_scanning_mode,
@@ -171,6 +161,7 @@ def dataset_extra_bud_factory() -> list[S]:
171
161
  constant_name=BudName.solar_gain_gos_level3_status,
172
162
  metadata_key=MetadataKey.gos_level3_status,
173
163
  ip_task_types=TaskName.solar_gain,
164
+ task_type_parsing_function=parse_header_ip_task_with_gains,
174
165
  ),
175
166
  TaskUniqueBud(
176
167
  constant_name=BudName.dark_gos_level3_lamp_status,
@@ -181,6 +172,7 @@ def dataset_extra_bud_factory() -> list[S]:
181
172
  constant_name=BudName.solar_gain_gos_level3_lamp_status,
182
173
  metadata_key=MetadataKey.gos_level3_lamp_status,
183
174
  ip_task_types=TaskName.solar_gain,
175
+ task_type_parsing_function=parse_header_ip_task_with_gains,
184
176
  ),
185
177
  TaskUniqueBud(
186
178
  constant_name=BudName.dark_gos_polarizer_status,
@@ -191,6 +183,7 @@ def dataset_extra_bud_factory() -> list[S]:
191
183
  constant_name=BudName.solar_gain_gos_polarizer_status,
192
184
  metadata_key=MetadataKey.gos_polarizer_status,
193
185
  ip_task_types=TaskName.solar_gain,
186
+ task_type_parsing_function=parse_header_ip_task_with_gains,
194
187
  ),
195
188
  TaskUniqueBud(
196
189
  constant_name=BudName.dark_gos_polarizer_angle,
@@ -201,6 +194,7 @@ def dataset_extra_bud_factory() -> list[S]:
201
194
  constant_name=BudName.solar_gain_gos_polarizer_angle,
202
195
  metadata_key=MetadataKey.gos_polarizer_angle,
203
196
  ip_task_types=TaskName.solar_gain,
197
+ task_type_parsing_function=parse_header_ip_task_with_gains,
204
198
  ),
205
199
  TaskUniqueBud(
206
200
  constant_name=BudName.dark_gos_retarder_status,
@@ -211,6 +205,7 @@ def dataset_extra_bud_factory() -> list[S]:
211
205
  constant_name=BudName.solar_gain_gos_retarder_status,
212
206
  metadata_key=MetadataKey.gos_retarder_status,
213
207
  ip_task_types=TaskName.solar_gain,
208
+ task_type_parsing_function=parse_header_ip_task_with_gains,
214
209
  ),
215
210
  TaskUniqueBud(
216
211
  constant_name=BudName.dark_gos_retarder_angle,
@@ -221,6 +216,7 @@ def dataset_extra_bud_factory() -> list[S]:
221
216
  constant_name=BudName.solar_gain_gos_retarder_angle,
222
217
  metadata_key=MetadataKey.gos_retarder_angle,
223
218
  ip_task_types=TaskName.solar_gain,
219
+ task_type_parsing_function=parse_header_ip_task_with_gains,
224
220
  ),
225
221
  TaskUniqueBud(
226
222
  constant_name=BudName.dark_gos_level0_status,
@@ -231,6 +227,7 @@ def dataset_extra_bud_factory() -> list[S]:
231
227
  constant_name=BudName.solar_gain_gos_level0_status,
232
228
  metadata_key=MetadataKey.gos_level0_status,
233
229
  ip_task_types=TaskName.solar_gain,
230
+ task_type_parsing_function=parse_header_ip_task_with_gains,
234
231
  ),
235
232
  TaskAverageBud(
236
233
  constant_name=BudName.dark_average_light_level,
@@ -241,6 +238,7 @@ def dataset_extra_bud_factory() -> list[S]:
241
238
  constant_name=BudName.solar_gain_average_light_level,
242
239
  metadata_key=MetadataKey.light_level,
243
240
  ip_task_types=TaskName.solar_gain,
241
+ task_type_parsing_function=parse_header_ip_task_with_gains,
244
242
  ),
245
243
  TaskAverageBud(
246
244
  constant_name=BudName.polcal_average_light_level,
@@ -256,6 +254,7 @@ def dataset_extra_bud_factory() -> list[S]:
256
254
  constant_name=BudName.solar_gain_average_telescope_elevation,
257
255
  metadata_key=MetadataKey.elevation,
258
256
  ip_task_types=TaskName.solar_gain,
257
+ task_type_parsing_function=parse_header_ip_task_with_gains,
259
258
  ),
260
259
  TaskAverageBud(
261
260
  constant_name=BudName.polcal_average_telescope_elevation,
@@ -271,6 +270,7 @@ def dataset_extra_bud_factory() -> list[S]:
271
270
  constant_name=BudName.solar_gain_average_coude_table_angle,
272
271
  metadata_key=MetadataKey.table_angle,
273
272
  ip_task_types=TaskName.solar_gain,
273
+ task_type_parsing_function=parse_header_ip_task_with_gains,
274
274
  ),
275
275
  TaskAverageBud(
276
276
  constant_name=BudName.polcal_average_coude_table_angle,
@@ -286,6 +286,7 @@ def dataset_extra_bud_factory() -> list[S]:
286
286
  constant_name=BudName.solar_gain_average_telescope_azimuth,
287
287
  metadata_key=MetadataKey.azimuth,
288
288
  ip_task_types=TaskName.solar_gain,
289
+ task_type_parsing_function=parse_header_ip_task_with_gains,
289
290
  ),
290
291
  TaskAverageBud(
291
292
  constant_name=BudName.polcal_average_telescope_azimuth,
@@ -299,6 +300,7 @@ def dataset_extra_bud_factory() -> list[S]:
299
300
  TaskDateBeginBud(
300
301
  constant_name=BudName.solar_gain_date_begin,
301
302
  ip_task_types=TaskName.solar_gain,
303
+ task_type_parsing_function=parse_header_ip_task_with_gains,
302
304
  ),
303
305
  TaskDateBeginBud(
304
306
  constant_name=BudName.polcal_date_begin,
@@ -260,7 +260,7 @@ def test_subclass_flowers(visp_parse_inputs_task, max_cs_step_time_sec):
260
260
  tag_pot, constant_pot = visp_parse_inputs_task.make_flower_pots()
261
261
 
262
262
  assert len(tag_pot.stems) == 1
263
- assert len(constant_pot.stems) == 64
263
+ assert len(constant_pot.stems) == 61
264
264
  all_flower_names = [StemName.modstate]
265
265
  assert sorted([f.stem_name for f in tag_pot.stems]) == sorted(all_flower_names)
266
266
  all_bud_names = [b.stem_name for b in default_constant_bud_factory()] + [BudName.num_modstates]
@@ -277,7 +277,7 @@ def test_dataset_extra_bud_factory(visp_parse_inputs_task, max_cs_step_time_sec)
277
277
  stem_names = [f.stem_name.value for f in constant_pot.stems]
278
278
  bud_name_base = [
279
279
  "DATE_BEGIN",
280
- "OBSERVING_PROGRAM_EXECUTION_ID",
280
+ "OBSERVING_PROGRAM_EXECUTION_IDS",
281
281
  "NUM_RAW_FRAMES_PER_FPA",
282
282
  "TELESCOPE_TRACKING_MODE",
283
283
  "COUDE_TABLE_TRACKING_MODE",
@@ -295,8 +295,9 @@ def test_dataset_extra_bud_factory(visp_parse_inputs_task, max_cs_step_time_sec)
295
295
  "GOS_LEVEL0_STATUS",
296
296
  ]
297
297
  for base in bud_name_base:
298
- assert "DARK_" + base in stem_names
299
298
  assert "SOLAR_GAIN_" + base in stem_names
299
+ if "MODE" not in base:
300
+ assert "DARK_" + base in stem_names
300
301
  if "GOS" not in base:
301
302
  assert "POLCAL_" + base in stem_names
302
303
 
@@ -19,6 +19,9 @@ from dkist_processing_common.parsers.experiment_id_bud import ExperimentIdBud
19
19
  from dkist_processing_common.parsers.id_bud import TaskContributingIdsBud
20
20
  from dkist_processing_common.parsers.near_bud import NearFloatBud
21
21
  from dkist_processing_common.parsers.near_bud import TaskNearFloatBud
22
+ from dkist_processing_common.parsers.observing_program_id_bud import (
23
+ TaskContributingObservingProgramExecutionIdsBud,
24
+ )
22
25
  from dkist_processing_common.parsers.proposal_id_bud import ContributingProposalIdsBud
23
26
  from dkist_processing_common.parsers.proposal_id_bud import ProposalIdBud
24
27
  from dkist_processing_common.parsers.retarder import RetarderNameBud
@@ -51,6 +54,7 @@ class FitsReaderMetadataKey(StrEnum):
51
54
  near_thing = "near"
52
55
  proposal_id = "ID___013"
53
56
  experiment_id = "ID___012"
57
+ observing_program_execution_id = "ID___008"
54
58
  ip_task_type = "DKIST004"
55
59
  ip_start_time = "DKIST011"
56
60
  fpa_exposure_time_ms = "XPOSURE"
@@ -77,6 +81,9 @@ class FitsReader(FitsAccessBase):
77
81
  self.name = name
78
82
  self.proposal_id: str = self.header.get(FitsReaderMetadataKey.proposal_id)
79
83
  self.experiment_id: str = self.header.get(FitsReaderMetadataKey.experiment_id)
84
+ self.observing_program_execution_id: str = self.header.get(
85
+ FitsReaderMetadataKey.observing_program_execution_id
86
+ )
80
87
  self.ip_task_type: str = self.header.get(FitsReaderMetadataKey.ip_task_type)
81
88
  self.ip_start_time: str = self.header.get(FitsReaderMetadataKey.ip_start_time)
82
89
  self.fpa_exposure_time_ms: float = self.header.get(
@@ -113,6 +120,7 @@ def basic_header_objs():
113
120
  "DKIST004": "observe",
114
121
  "ID___012": "experiment_id_1",
115
122
  "ID___013": "proposal_id_1",
123
+ "ID___008": "observing_program_execution_id_1",
116
124
  "XPOSURE": 0.0013000123,
117
125
  "TEXPOSUR": 10.0,
118
126
  "NSUMEXP": 3,
@@ -131,6 +139,7 @@ def basic_header_objs():
131
139
  "DKIST004": "observe",
132
140
  "ID___012": "experiment_id_1",
133
141
  "ID___013": "proposal_id_1",
142
+ "ID___008": "observing_program_execution_id_2",
134
143
  "XPOSURE": 0.0013000987,
135
144
  "TEXPOSUR": 10.0,
136
145
  "NSUMEXP": 3,
@@ -150,6 +159,7 @@ def basic_header_objs():
150
159
  "DKIST004": "dark",
151
160
  "ID___012": "experiment_id_2",
152
161
  "ID___013": "proposal_id_2",
162
+ "ID___008": "observing_program_execution_id_2",
153
163
  "XPOSURE": 12.345,
154
164
  "TEXPOSUR": 1.123456789,
155
165
  "NSUMEXP": 1,
@@ -170,6 +180,7 @@ def basic_header_objs():
170
180
  "DKIST004": "observe",
171
181
  "ID___012": "experiment_id_1",
172
182
  "ID___013": "proposal_id_1",
183
+ "ID___008": "observing_program_execution_id_1",
173
184
  "XPOSURE": 100.0,
174
185
  "TEXPOSUR": 11.0,
175
186
  "NSUMEXP": 4,
@@ -185,6 +196,7 @@ def basic_header_objs():
185
196
  {
186
197
  "DKIST004": "gain",
187
198
  "ID___013": "proposal_id_1",
199
+ "ID___008": "observing_program_execution_id_1",
188
200
  "id_key": 0,
189
201
  "constant": 6.28,
190
202
  "near": 1.23,
@@ -603,6 +615,29 @@ def test_task_contributing_ids_bud(basic_header_objs):
603
615
  assert sorted(list(petal[0].value)) == ["experiment_id_2"]
604
616
 
605
617
 
618
+ def test_task_contributing_observing_program_ids_bud(basic_header_objs):
619
+ """
620
+ Given: A set of headers with observing program ID values for different tasks
621
+ When: Ingesting the headers with a TaskContributingIdsBud for a task type
622
+ Then: The Bud's petal is just the experiment ID for the that task type
623
+ """
624
+ bud = TaskContributingObservingProgramExecutionIdsBud(
625
+ constant_name="NOT_A_REAL_BUD",
626
+ ip_task_types=TaskName.observe,
627
+ )
628
+ assert bud.stem_name == "NOT_A_REAL_BUD"
629
+ for fo in basic_header_objs:
630
+ key = fo.name
631
+ bud.update(key, fo)
632
+
633
+ petal = list(bud.petals)
634
+ assert len(petal) == 1
635
+ assert sorted(list(petal[0].value)) == [
636
+ "observing_program_execution_id_1",
637
+ "observing_program_execution_id_2",
638
+ ]
639
+
640
+
606
641
  def test_exp_time_flower(basic_header_objs):
607
642
  """
608
643
  Given: A set of filepaths and associated headers with XPOSURE keywords
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dkist-processing-common
3
- Version: 11.7.0rc2
3
+ Version: 11.7.0rc4
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
@@ -65,6 +65,7 @@ dkist_processing_common/parsers/id_bud.py
65
65
  dkist_processing_common/parsers/l0_fits_access.py
66
66
  dkist_processing_common/parsers/l1_fits_access.py
67
67
  dkist_processing_common/parsers/near_bud.py
68
+ dkist_processing_common/parsers/observing_program_id_bud.py
68
69
  dkist_processing_common/parsers/proposal_id_bud.py
69
70
  dkist_processing_common/parsers/quality.py
70
71
  dkist_processing_common/parsers/retarder.py