dkist-processing-common 14.0.2rc1__tar.gz → 14.0.3__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-14.0.2rc1 → dkist_processing_common-14.0.3}/CHANGELOG.rst +19 -0
  2. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/PKG-INFO +3 -3
  3. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tasks/base.py +0 -22
  4. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tasks/trial_catalog.py +7 -0
  5. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/mock_metadata_store.py +5 -1
  6. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_trial_catalog.py +99 -9
  7. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_workflow_task_base.py +0 -42
  8. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common.egg-info/PKG-INFO +3 -3
  9. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common.egg-info/SOURCES.txt +0 -1
  10. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common.egg-info/requires.txt +2 -2
  11. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/pyproject.toml +2 -2
  12. dkist_processing_common-14.0.2rc1/changelog/332.feature.rst +0 -1
  13. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/.gitignore +0 -0
  14. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/.pre-commit-config.yaml +0 -0
  15. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/.readthedocs.yml +0 -0
  16. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/.snyk +0 -0
  17. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/README.rst +0 -0
  18. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/bitbucket-pipelines.yml +0 -0
  19. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/changelog/.gitempty +0 -0
  20. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/__init__.py +0 -0
  21. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/_util/__init__.py +0 -0
  22. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/_util/constants.py +0 -0
  23. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/_util/graphql.py +0 -0
  24. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/_util/scratch.py +0 -0
  25. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/_util/tags.py +0 -0
  26. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/codecs/__init__.py +0 -0
  27. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/codecs/array.py +0 -0
  28. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/codecs/asdf.py +0 -0
  29. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/codecs/basemodel.py +0 -0
  30. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/codecs/bytes.py +0 -0
  31. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/codecs/fits.py +0 -0
  32. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/codecs/iobase.py +0 -0
  33. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/codecs/json.py +0 -0
  34. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/codecs/path.py +0 -0
  35. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/codecs/quality.py +0 -0
  36. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/codecs/str.py +0 -0
  37. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/config.py +0 -0
  38. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/fonts/Lato-Regular.ttf +0 -0
  39. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/fonts/__init__.py +0 -0
  40. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/manual.py +0 -0
  41. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/models/__init__.py +0 -0
  42. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/models/constants.py +0 -0
  43. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/models/dkist_location.py +0 -0
  44. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/models/extras.py +0 -0
  45. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/models/fits_access.py +0 -0
  46. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/models/flower_pot.py +0 -0
  47. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/models/fried_parameter.py +0 -0
  48. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/models/graphql.py +0 -0
  49. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/models/input_dataset.py +0 -0
  50. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/models/message.py +0 -0
  51. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/models/message_queue_binding.py +0 -0
  52. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/models/metric_code.py +0 -0
  53. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/models/parameters.py +0 -0
  54. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/models/quality.py +0 -0
  55. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/models/tags.py +0 -0
  56. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/models/task_name.py +0 -0
  57. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/models/telemetry.py +0 -0
  58. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/models/wavelength.py +0 -0
  59. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/parsers/__init__.py +0 -0
  60. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/parsers/average_bud.py +0 -0
  61. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/parsers/cs_step.py +0 -0
  62. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/parsers/dsps_repeat.py +0 -0
  63. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/parsers/experiment_id_bud.py +0 -0
  64. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/parsers/id_bud.py +0 -0
  65. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/parsers/l0_fits_access.py +0 -0
  66. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/parsers/l1_fits_access.py +0 -0
  67. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/parsers/lookup_bud.py +0 -0
  68. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/parsers/near_bud.py +0 -0
  69. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/parsers/observing_program_id_bud.py +0 -0
  70. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/parsers/proposal_id_bud.py +0 -0
  71. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/parsers/quality.py +0 -0
  72. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/parsers/retarder.py +0 -0
  73. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/parsers/single_value_single_key_flower.py +0 -0
  74. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/parsers/task.py +0 -0
  75. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/parsers/time.py +0 -0
  76. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/parsers/unique_bud.py +0 -0
  77. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/parsers/wavelength.py +0 -0
  78. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tasks/__init__.py +0 -0
  79. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tasks/assemble_movie.py +0 -0
  80. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tasks/l1_output_data.py +0 -0
  81. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tasks/mixin/__init__.py +0 -0
  82. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tasks/mixin/globus.py +0 -0
  83. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tasks/mixin/interservice_bus.py +0 -0
  84. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tasks/mixin/metadata_store.py +0 -0
  85. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tasks/mixin/object_store.py +0 -0
  86. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tasks/mixin/quality/__init__.py +0 -0
  87. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tasks/mixin/quality/_base.py +0 -0
  88. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tasks/mixin/quality/_metrics.py +0 -0
  89. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tasks/output_data_base.py +0 -0
  90. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tasks/parse_l0_input_data.py +0 -0
  91. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tasks/quality_metrics.py +0 -0
  92. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tasks/teardown.py +0 -0
  93. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tasks/transfer_input_data.py +0 -0
  94. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tasks/trial_output_data.py +0 -0
  95. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tasks/write_extra.py +0 -0
  96. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tasks/write_l1.py +0 -0
  97. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tasks/write_l1_base.py +0 -0
  98. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/__init__.py +0 -0
  99. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/conftest.py +0 -0
  100. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_assemble_movie.py +0 -0
  101. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_assemble_quality.py +0 -0
  102. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_base.py +0 -0
  103. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_codecs.py +0 -0
  104. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_constants.py +0 -0
  105. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_construct_dataset_extras.py +0 -0
  106. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_cs_step.py +0 -0
  107. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_dkist_location.py +0 -0
  108. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_fits_access.py +0 -0
  109. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_flower_pot.py +0 -0
  110. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_fried_parameter.py +0 -0
  111. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_input_dataset.py +0 -0
  112. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_interservice_bus.py +0 -0
  113. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_interservice_bus_mixin.py +0 -0
  114. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_manual_processing.py +0 -0
  115. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_output_data_base.py +0 -0
  116. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_parameters.py +0 -0
  117. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_parse_l0_input_data.py +0 -0
  118. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_publish_catalog_messages.py +0 -0
  119. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_quality.py +0 -0
  120. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_quality_mixin.py +0 -0
  121. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_scratch.py +0 -0
  122. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_stems.py +0 -0
  123. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_submit_dataset_metadata.py +0 -0
  124. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_tags.py +0 -0
  125. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_task_name.py +0 -0
  126. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_task_parsing.py +0 -0
  127. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_teardown.py +0 -0
  128. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_transfer_input_data.py +0 -0
  129. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_transfer_l1_output_data.py +0 -0
  130. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_trial_output_data.py +0 -0
  131. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common/tests/test_write_l1.py +0 -0
  132. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common.egg-info/dependency_links.txt +0 -0
  133. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/dkist_processing_common.egg-info/top_level.txt +0 -0
  134. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/docs/Makefile +0 -0
  135. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/docs/changelog.rst +0 -0
  136. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/docs/conf.py +0 -0
  137. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/docs/index.rst +0 -0
  138. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/docs/landing_page.rst +0 -0
  139. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/docs/make.bat +0 -0
  140. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/docs/requirements.txt +0 -0
  141. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/licenses/LICENSE.rst +0 -0
  142. {dkist_processing_common-14.0.2rc1 → dkist_processing_common-14.0.3}/setup.cfg +0 -0
@@ -1,3 +1,22 @@
1
+ v14.0.3 (2026-05-05)
2
+ ====================
3
+
4
+ Features
5
+ --------
6
+
7
+ - Add recipe run configuration information relevant to the metadata ASDF file generated in trial workflows. (`#318 <https://bitbucket.org/dkistdc/dkist-processing-common/pull-requests/318>`__)
8
+
9
+
10
+ v14.0.2 (2026-05-04)
11
+ ====================
12
+
13
+ Features
14
+ --------
15
+
16
+ - Convert TASK_TYPES quality metric to the new methodology. (`#332 <https://bitbucket.org/dkistdc/dkist-processing-common/pull-requests/332>`__)
17
+ - Add `TaskCount` quality metric model. (`#332 <https://bitbucket.org/dkistdc/dkist-processing-common/pull-requests/332>`__)
18
+
19
+
1
20
  v14.0.1 (2026-04-22)
2
21
  ====================
3
22
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dkist-processing-common
3
- Version: 14.0.2rc1
3
+ Version: 14.0.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
@@ -56,9 +56,9 @@ Requires-Dist: sphinx-autoapi!=3.1.0; extra == "docs"
56
56
  Requires-Dist: pytest; extra == "docs"
57
57
  Requires-Dist: dkist-sphinx-theme; extra == "docs"
58
58
  Provides-Extra: inventory
59
- Requires-Dist: dkist-inventory<2.0,>=1.11.6; extra == "inventory"
59
+ Requires-Dist: dkist-inventory<2.0,>=1.11.7; extra == "inventory"
60
60
  Provides-Extra: asdf
61
- Requires-Dist: dkist-inventory[asdf]<2.0,>=1.11.6; extra == "asdf"
61
+ Requires-Dist: dkist-inventory[asdf]<2.0,>=1.11.7; extra == "asdf"
62
62
  Provides-Extra: quality
63
63
  Requires-Dist: dkist-quality<3.0,>=2.0.1; extra == "quality"
64
64
 
@@ -19,13 +19,10 @@ from opentelemetry.metrics import Observation
19
19
 
20
20
  from dkist_processing_common._util.scratch import WorkflowFileSystem
21
21
  from dkist_processing_common._util.tags import TagDB
22
- from dkist_processing_common.codecs.basemodel import basemodel_encoder
23
22
  from dkist_processing_common.codecs.bytes import bytes_encoder
24
23
  from dkist_processing_common.codecs.path import path_decoder
25
24
  from dkist_processing_common.config import common_configurations
26
25
  from dkist_processing_common.models.constants import ConstantsBase
27
- from dkist_processing_common.models.metric_code import MetricCode
28
- from dkist_processing_common.models.quality import TaskCount
29
26
  from dkist_processing_common.models.tags import StemName
30
27
  from dkist_processing_common.models.tags import Tag
31
28
  from dkist_processing_common.models.telemetry import ObservableProgress
@@ -341,25 +338,6 @@ class WorkflowTaskBase(TaskBase, MetadataStoreMixin, ABC):
341
338
  """Remove the association between the given tag(s) and the given path."""
342
339
  self.scratch.remove_tags(path, tags)
343
340
 
344
- def quality_write_intermediate_task_type_counts(
345
- self, task_type: str, total_frames: int, frames_not_used: int = 0
346
- ):
347
- """
348
- Write intermediate task type data.
349
-
350
- Parameters
351
- ----------
352
- task_type: task type as listed in the headers
353
- total_frames: total number of frames supplied of the given task type
354
- frames_not_used: if some frames aren't used, how many
355
- """
356
- task_count = TaskCount(
357
- task_type=task_type,
358
- total_frames=total_frames,
359
- frames_not_used=frames_not_used,
360
- )
361
- self.write(task_count, tags=Tag.quality(MetricCode.task_types), encoder=basemodel_encoder)
362
-
363
341
  def _purge(self):
364
342
  """Purge the persistent stores associated with the workflow to which this task belongs e.g. when testing."""
365
343
  self.scratch.purge()
@@ -155,6 +155,12 @@ class CreateTrialAsdf(OutputDataBase):
155
155
  Tag.input_dataset_calibration_frames()
156
156
  )
157
157
 
158
+ with self.telemetry_span("Collate recipe run configuration"):
159
+ recipe_run_config = self.metadata_store_recipe_run.configuration.model_dump(
160
+ exclude_unset=True,
161
+ exclude_none=True,
162
+ )
163
+
158
164
  with self.telemetry_span("Generate ASDF tree"):
159
165
  tree = asdf_tree_from_filenames(
160
166
  filenames=self.absolute_output_frame_paths,
@@ -163,6 +169,7 @@ class CreateTrialAsdf(OutputDataBase):
163
169
  parameters=parameters,
164
170
  observation_frames=observation_frames,
165
171
  calibration_frames=calibration_frames,
172
+ recipe_run_config=recipe_run_config,
166
173
  )
167
174
 
168
175
  trial_history = [
@@ -96,7 +96,11 @@ default_parameters_doc = [
96
96
  },
97
97
  ]
98
98
 
99
- default_recipe_run_configuration = {"tile_size": TILE_SIZE}
99
+ default_recipe_run_configuration = {
100
+ "tile_size": TILE_SIZE,
101
+ "destination_bucket": "data",
102
+ "validate_l1_on_write": True,
103
+ }
100
104
 
101
105
 
102
106
  class Unset:
@@ -27,8 +27,12 @@ from dkist_processing_common.models.tags import Tag
27
27
  from dkist_processing_common.tasks import CreateTrialAsdf
28
28
  from dkist_processing_common.tasks import CreateTrialDatasetInventory
29
29
  from dkist_processing_common.tasks import CreateTrialQualityReport
30
+ from dkist_processing_common.tests.mock_metadata_store import RecipeRunResponseMapping
30
31
  from dkist_processing_common.tests.mock_metadata_store import default_observe_frames_doc
32
+ from dkist_processing_common.tests.mock_metadata_store import default_recipe_run_configuration
33
+ from dkist_processing_common.tests.mock_metadata_store import fake_gql_client_factory
31
34
  from dkist_processing_common.tests.mock_metadata_store import input_dataset_parameters_part_factory
35
+ from dkist_processing_common.tests.mock_metadata_store import make_default_recipe_run_response
32
36
 
33
37
 
34
38
  def _parameter_for_test_comparison(param: dict) -> dict:
@@ -155,20 +159,46 @@ def scratch_with_l1_frames_and_other_frames(
155
159
  return scratch
156
160
 
157
161
 
162
+ @pytest.fixture()
163
+ def patch_default_graphql_client(mocker, fake_gql_client) -> None:
164
+ """Patch the metadata store client to use the default fake GraphQL client."""
165
+ mocker.patch(
166
+ "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient",
167
+ new=fake_gql_client,
168
+ )
169
+
170
+
171
+ @pytest.fixture()
172
+ def fake_gql_client_without_recipe_config():
173
+ """GraphQL client mock that returns a recipe run response without explicit configuration."""
174
+ recipe_run_response = make_default_recipe_run_response()
175
+ recipe_run_response.configuration = None
176
+
177
+ return fake_gql_client_factory(
178
+ response_mapping_override=RecipeRunResponseMapping(response=recipe_run_response)
179
+ )
180
+
181
+
182
+ @pytest.fixture()
183
+ def patch_graphql_client_without_recipe_config(
184
+ mocker, fake_gql_client_without_recipe_config
185
+ ) -> None:
186
+ """Patch the metadata store client to return a recipe run response without config."""
187
+ mocker.patch(
188
+ "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient",
189
+ new=fake_gql_client_without_recipe_config,
190
+ )
191
+
192
+
158
193
  @pytest.fixture()
159
194
  def create_trial_dataset_inventory_task(
160
195
  recipe_run_id,
161
196
  tmp_path,
162
197
  scratch_with_l1_frames,
163
198
  fake_constants_db,
164
- mocker,
165
- fake_gql_client,
199
+ patch_default_graphql_client,
166
200
  ) -> CreateTrialDatasetInventory:
167
201
  """An instance of CreateTrialDatasetInventory with L1 frames tagged in scratch."""
168
- mocker.patch(
169
- "dkist_processing_common.tasks.mixin.metadata_store.GraphQLClient",
170
- new=fake_gql_client,
171
- )
172
202
  task = CreateTrialDatasetInventory(
173
203
  recipe_run_id=recipe_run_id,
174
204
  workflow_name="trial_dataset_inventory",
@@ -182,7 +212,7 @@ def create_trial_dataset_inventory_task(
182
212
 
183
213
  @pytest.fixture()
184
214
  def create_trial_asdf_task(
185
- recipe_run_id, tmp_path, scratch_with_l1_frames, fake_constants_db
215
+ recipe_run_id, tmp_path, scratch_with_l1_frames, fake_constants_db, patch_default_graphql_client
186
216
  ) -> CreateTrialAsdf:
187
217
  """An instance of CreateTrialAsdf with L1 frames tagged in scratch."""
188
218
  task = CreateTrialAsdf(
@@ -196,9 +226,33 @@ def create_trial_asdf_task(
196
226
  task._purge()
197
227
 
198
228
 
229
+ @pytest.fixture(scope="function")
230
+ def create_trial_asdf_task_without_recipe_config(
231
+ recipe_run_id,
232
+ tmp_path,
233
+ scratch_with_l1_frames,
234
+ fake_constants_db,
235
+ patch_graphql_client_without_recipe_config,
236
+ ) -> CreateTrialAsdf:
237
+ """An instance of CreateTrialAsdf with L1 frames and no recipe run configuration."""
238
+ task = CreateTrialAsdf(
239
+ recipe_run_id=recipe_run_id,
240
+ workflow_name="trial_asdf",
241
+ workflow_version="trial_asdf_version",
242
+ )
243
+ task.scratch = scratch_with_l1_frames
244
+ task.constants._update(fake_constants_db)
245
+ yield task
246
+ task._purge()
247
+
248
+
199
249
  @pytest.fixture(scope="function")
200
250
  def create_trial_asdf_task_with_params(
201
- recipe_run_id, tmp_path, scratch_with_l1_frames_and_parameters, fake_constants_db
251
+ recipe_run_id,
252
+ tmp_path,
253
+ scratch_with_l1_frames_and_parameters,
254
+ fake_constants_db,
255
+ patch_default_graphql_client,
202
256
  ) -> CreateTrialAsdf:
203
257
  """An instance of CreateTrialAsdf with L1 frames and input parameters tagged in scratch."""
204
258
  task = CreateTrialAsdf(
@@ -214,7 +268,11 @@ def create_trial_asdf_task_with_params(
214
268
 
215
269
  @pytest.fixture()
216
270
  def create_trial_asdf_task_with_frames(
217
- recipe_run_id, tmp_path, scratch_with_l1_frames_and_other_frames, fake_constants_db
271
+ recipe_run_id,
272
+ tmp_path,
273
+ scratch_with_l1_frames_and_other_frames,
274
+ fake_constants_db,
275
+ patch_default_graphql_client,
218
276
  ) -> CreateTrialAsdf:
219
277
  """An instance of CreateTrialAsdf with L1 frames and input frame docs tagged in scratch."""
220
278
  task = CreateTrialAsdf(
@@ -389,6 +447,38 @@ def test_create_trial_asdf_with_frames(create_trial_asdf_task_with_frames):
389
447
  assert set(cal_keys_str) == expected_keys
390
448
 
391
449
 
450
+ def test_create_trial_asdf_includes_recipe_run_config(create_trial_asdf_task):
451
+ """
452
+ :Given: CreateTrialAsdf with recipe run configuration available in metadata store
453
+ :When: CreateTrialAsdf is run
454
+ :Then: The ASDF tree contains normalized recipe run configuration metadata
455
+ """
456
+ task = create_trial_asdf_task
457
+ task()
458
+
459
+ tree = next(task.read(tags=[Tag.output(), Tag.asdf()], decoder=asdf_decoder))
460
+ ds = tree["dataset"]
461
+
462
+ assert ds.meta["recipe_run_config"] == default_recipe_run_configuration
463
+
464
+
465
+ def test_create_trial_asdf_without_recipe_run_config_has_empty_config(
466
+ create_trial_asdf_task_without_recipe_config,
467
+ ):
468
+ """
469
+ :Given: CreateTrialAsdf with no recipe run configuration in metadata store
470
+ :When: CreateTrialAsdf is run
471
+ :Then: The ASDF tree contains an empty normalized recipe run configuration structure
472
+ """
473
+ task = create_trial_asdf_task_without_recipe_config
474
+ task()
475
+
476
+ tree = next(task.read(tags=[Tag.output(), Tag.asdf()], decoder=asdf_decoder))
477
+ ds = tree["dataset"]
478
+
479
+ assert ds.meta["recipe_run_config"] == {}
480
+
481
+
392
482
  def test_create_trial_quality_report(create_trial_quality_report_task):
393
483
  """
394
484
  :Given: An instance of CreateTrialQualityReport with tagged quality data
@@ -11,12 +11,10 @@ from sqids import Sqids
11
11
 
12
12
  import dkist_processing_common
13
13
  from dkist_processing_common._util.scratch import WorkflowFileSystem
14
- from dkist_processing_common.codecs.basemodel import basemodel_decoder
15
14
  from dkist_processing_common.codecs.str import str_encoder
16
15
  from dkist_processing_common.models.constants import BudName
17
16
  from dkist_processing_common.models.constants import ConstantsBase
18
17
  from dkist_processing_common.models.graphql import RecipeRunProvenanceMutation
19
- from dkist_processing_common.models.quality import TaskCount
20
18
  from dkist_processing_common.models.tags import Tag
21
19
  from dkist_processing_common.tasks.base import WorkflowTaskBase
22
20
 
@@ -215,46 +213,6 @@ def test_dataset_id(workflow_data_task):
215
213
  assert task.constants.dataset_id == expected_dataset_id
216
214
 
217
215
 
218
- @pytest.mark.parametrize(
219
- "task_type, total_frames, frames_not_used",
220
- [
221
- pytest.param("one", 1, 1, id="simple"),
222
- pytest.param("two", 2, 0, id="not_used_zero"),
223
- pytest.param("three", 3, None, id="not_used_none"),
224
- ],
225
- )
226
- def test_quality_write_intermediate_task_type_counts(
227
- task_type: str, total_frames: int, frames_not_used: int | None, workflow_data_task
228
- ):
229
- """
230
- Given: Valid intermediate task type count input
231
- When: Running WorkflowTaskBase quality_write_intermediate_task_type_counts()
232
- Then: A single TaskCount file gets created
233
- """
234
- # Given
235
- task, _, _, _, _ = workflow_data_task
236
-
237
- # When
238
- if frames_not_used is not None:
239
- task.quality_write_intermediate_task_type_counts(task_type, total_frames, frames_not_used)
240
- else:
241
- task.quality_write_intermediate_task_type_counts(task_type, total_frames)
242
-
243
- # Then
244
- task_counts: list[TaskCount] = list(
245
- task.read(tags="QUALITY_TASK_TYPES", decoder=basemodel_decoder, model=TaskCount)
246
- )
247
- assert isinstance(task_counts, list)
248
- assert len(task_counts) == 1
249
- task_count = task_counts[0]
250
- assert task_count.task_type == str(task_type).upper()
251
- assert task_count.total_frames == total_frames
252
- if frames_not_used is not None:
253
- assert task_count.frames_not_used == frames_not_used
254
- else:
255
- assert task_count.frames_not_used == 0
256
-
257
-
258
216
  class ProvenanceTask(WorkflowTaskBase):
259
217
  record_provenance = True
260
218
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dkist-processing-common
3
- Version: 14.0.2rc1
3
+ Version: 14.0.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
@@ -56,9 +56,9 @@ Requires-Dist: sphinx-autoapi!=3.1.0; extra == "docs"
56
56
  Requires-Dist: pytest; extra == "docs"
57
57
  Requires-Dist: dkist-sphinx-theme; extra == "docs"
58
58
  Provides-Extra: inventory
59
- Requires-Dist: dkist-inventory<2.0,>=1.11.6; extra == "inventory"
59
+ Requires-Dist: dkist-inventory<2.0,>=1.11.7; extra == "inventory"
60
60
  Provides-Extra: asdf
61
- Requires-Dist: dkist-inventory[asdf]<2.0,>=1.11.6; extra == "asdf"
61
+ Requires-Dist: dkist-inventory[asdf]<2.0,>=1.11.7; extra == "asdf"
62
62
  Provides-Extra: quality
63
63
  Requires-Dist: dkist-quality<3.0,>=2.0.1; extra == "quality"
64
64
 
@@ -7,7 +7,6 @@ README.rst
7
7
  bitbucket-pipelines.yml
8
8
  pyproject.toml
9
9
  changelog/.gitempty
10
- changelog/332.feature.rst
11
10
  dkist_processing_common/__init__.py
12
11
  dkist_processing_common/config.py
13
12
  dkist_processing_common/manual.py
@@ -24,7 +24,7 @@ sunpy>=3.0.0
24
24
  talus==1.3.4
25
25
 
26
26
  [asdf]
27
- dkist-inventory[asdf]<2.0,>=1.11.6
27
+ dkist-inventory[asdf]<2.0,>=1.11.7
28
28
 
29
29
  [docs]
30
30
  setuptools
@@ -36,7 +36,7 @@ pytest
36
36
  dkist-sphinx-theme
37
37
 
38
38
  [inventory]
39
- dkist-inventory<2.0,>=1.11.6
39
+ dkist-inventory<2.0,>=1.11.7
40
40
 
41
41
  [quality]
42
42
  dkist-quality<3.0,>=2.0.1
@@ -75,10 +75,10 @@ docs = [
75
75
  "dkist-sphinx-theme",
76
76
  ]
77
77
  inventory = [
78
- "dkist-inventory >= 1.11.6, <2.0",
78
+ "dkist-inventory >= 1.11.7, <2.0",
79
79
  ]
80
80
  asdf = [
81
- "dkist-inventory[asdf] >= 1.11.6, <2.0",
81
+ "dkist-inventory[asdf] >= 1.11.7, <2.0",
82
82
  ]
83
83
  quality = [
84
84
  "dkist-quality >= 2.0.1, <3.0",
@@ -1 +0,0 @@
1
- Convert TASK_TYPES quality metric to the new methodology.