dkist-processing-common 11.8.2rc1__tar.gz → 11.9.1__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 (137) hide show
  1. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/CHANGELOG.rst +30 -0
  2. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/PKG-INFO +17 -13
  3. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/README.rst +10 -6
  4. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/config.py +28 -6
  5. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/l1_output_data.py +5 -8
  6. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/mixin/globus.py +23 -26
  7. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/mixin/quality/_metrics.py +4 -6
  8. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/trial_catalog.py +8 -2
  9. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_quality_mixin.py +11 -3
  10. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common.egg-info/PKG-INFO +17 -13
  11. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common.egg-info/SOURCES.txt +0 -1
  12. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common.egg-info/requires.txt +6 -6
  13. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/pyproject.toml +6 -6
  14. dkist_processing_common-11.8.2rc1/changelog/276.feature.rst +0 -1
  15. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/.gitignore +0 -0
  16. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/.pre-commit-config.yaml +0 -0
  17. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/.readthedocs.yml +0 -0
  18. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/.snyk +0 -0
  19. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/bitbucket-pipelines.yml +0 -0
  20. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/changelog/.gitempty +0 -0
  21. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/__init__.py +0 -0
  22. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/_util/__init__.py +0 -0
  23. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/_util/constants.py +0 -0
  24. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/_util/graphql.py +0 -0
  25. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/_util/scratch.py +0 -0
  26. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/_util/tags.py +0 -0
  27. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/codecs/__init__.py +0 -0
  28. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/codecs/array.py +0 -0
  29. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/codecs/asdf.py +0 -0
  30. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/codecs/basemodel.py +0 -0
  31. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/codecs/bytes.py +0 -0
  32. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/codecs/fits.py +0 -0
  33. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/codecs/iobase.py +0 -0
  34. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/codecs/json.py +0 -0
  35. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/codecs/path.py +0 -0
  36. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/codecs/quality.py +0 -0
  37. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/codecs/str.py +0 -0
  38. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/fonts/Lato-Regular.ttf +0 -0
  39. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/fonts/__init__.py +0 -0
  40. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/manual.py +0 -0
  41. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/__init__.py +0 -0
  42. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/constants.py +0 -0
  43. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/dkist_location.py +0 -0
  44. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/fits_access.py +0 -0
  45. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/flower_pot.py +0 -0
  46. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/fried_parameter.py +0 -0
  47. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/graphql.py +0 -0
  48. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/input_dataset.py +0 -0
  49. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/message.py +0 -0
  50. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/message_queue_binding.py +0 -0
  51. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/metric_code.py +0 -0
  52. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/parameters.py +0 -0
  53. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/quality.py +0 -0
  54. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/tags.py +0 -0
  55. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/task_name.py +0 -0
  56. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/telemetry.py +0 -0
  57. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/wavelength.py +0 -0
  58. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/__init__.py +0 -0
  59. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/average_bud.py +0 -0
  60. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/cs_step.py +0 -0
  61. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/dsps_repeat.py +0 -0
  62. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/experiment_id_bud.py +0 -0
  63. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/id_bud.py +0 -0
  64. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/l0_fits_access.py +0 -0
  65. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/l1_fits_access.py +0 -0
  66. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/near_bud.py +0 -0
  67. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/observing_program_id_bud.py +0 -0
  68. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/proposal_id_bud.py +0 -0
  69. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/quality.py +0 -0
  70. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/retarder.py +0 -0
  71. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/single_value_single_key_flower.py +0 -0
  72. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/task.py +0 -0
  73. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/time.py +0 -0
  74. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/unique_bud.py +0 -0
  75. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/wavelength.py +0 -0
  76. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/__init__.py +0 -0
  77. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/assemble_movie.py +0 -0
  78. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/base.py +0 -0
  79. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/mixin/__init__.py +0 -0
  80. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/mixin/interservice_bus.py +0 -0
  81. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/mixin/metadata_store.py +0 -0
  82. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/mixin/object_store.py +0 -0
  83. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/mixin/quality/__init__.py +0 -0
  84. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/mixin/quality/_base.py +0 -0
  85. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/output_data_base.py +0 -0
  86. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/parse_l0_input_data.py +0 -0
  87. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/quality_metrics.py +0 -0
  88. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/teardown.py +0 -0
  89. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/transfer_input_data.py +0 -0
  90. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/trial_output_data.py +0 -0
  91. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/write_l1.py +0 -0
  92. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/__init__.py +0 -0
  93. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/conftest.py +0 -0
  94. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/mock_metadata_store.py +0 -0
  95. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_assemble_movie.py +0 -0
  96. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_assemble_quality.py +0 -0
  97. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_base.py +0 -0
  98. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_codecs.py +0 -0
  99. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_constants.py +0 -0
  100. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_cs_step.py +0 -0
  101. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_dkist_location.py +0 -0
  102. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_fits_access.py +0 -0
  103. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_flower_pot.py +0 -0
  104. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_fried_parameter.py +0 -0
  105. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_input_dataset.py +0 -0
  106. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_interservice_bus.py +0 -0
  107. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_interservice_bus_mixin.py +0 -0
  108. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_manual_processing.py +0 -0
  109. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_output_data_base.py +0 -0
  110. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_parameters.py +0 -0
  111. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_parse_l0_input_data.py +0 -0
  112. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_publish_catalog_messages.py +0 -0
  113. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_quality.py +0 -0
  114. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_scratch.py +0 -0
  115. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_stems.py +0 -0
  116. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_submit_dataset_metadata.py +0 -0
  117. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_tags.py +0 -0
  118. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_task_name.py +0 -0
  119. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_task_parsing.py +0 -0
  120. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_teardown.py +0 -0
  121. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_transfer_input_data.py +0 -0
  122. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_transfer_l1_output_data.py +0 -0
  123. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_trial_catalog.py +0 -0
  124. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_trial_output_data.py +0 -0
  125. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_workflow_task_base.py +0 -0
  126. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_write_l1.py +0 -0
  127. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common.egg-info/dependency_links.txt +0 -0
  128. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common.egg-info/top_level.txt +0 -0
  129. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/docs/Makefile +0 -0
  130. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/docs/changelog.rst +0 -0
  131. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/docs/conf.py +0 -0
  132. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/docs/index.rst +0 -0
  133. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/docs/landing_page.rst +0 -0
  134. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/docs/make.bat +0 -0
  135. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/docs/requirements.txt +0 -0
  136. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/licenses/LICENSE.rst +0 -0
  137. {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/setup.cfg +0 -0
@@ -1,3 +1,33 @@
1
+ v11.9.1 (2025-12-08)
2
+ ====================
3
+
4
+ Features
5
+ --------
6
+
7
+ - Store quality data in object store. (`#276 <https://bitbucket.org/dkistdc/dkist-processing-common/pull-requests/276>`__)
8
+
9
+
10
+ v11.9.0 (2025-12-03)
11
+ ====================
12
+
13
+ Misc
14
+ ----
15
+
16
+ - Upgrade to the globus 4.x SDK. (`#274 <https://bitbucket.org/dkistdc/dkist-processing-common/pull-requests/274>`__)
17
+ - Use a pool of direction aware globus accounts for transfers to mitigate contention between simultaneous inbound (TransferL0Data) and/or outbound (TransferL1Data) transfers. (`#274 <https://bitbucket.org/dkistdc/dkist-processing-common/pull-requests/274>`__)
18
+ - Integrate dkist-processing-core 6.0.1 which adds additional attributes to metrics and tracing to facilitate discoverability and analysis. (`#275 <https://bitbucket.org/dkistdc/dkist-processing-common/pull-requests/275>`__)
19
+
20
+
21
+ v11.8.1 (2025-12-02)
22
+ ====================
23
+
24
+ Misc
25
+ ----
26
+
27
+ - Bump minimum version of `pydantic` to 2.7.2 to avoid install failures for python versions >= 3.12. (`#271 <https://bitbucket.org/dkistdc/dkist-processing-common/pull-requests/271>`__)
28
+ - Move `solar-wavelength-calibration` dep to 2.0.0 and make use of new helper properties in that release. (`#271 <https://bitbucket.org/dkistdc/dkist-processing-common/pull-requests/271>`__)
29
+
30
+
1
31
  v11.8.0 (2025-11-03)
2
32
  ====================
3
33
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dkist-processing-common
3
- Version: 11.8.2rc1
3
+ Version: 11.9.1
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
@@ -17,12 +17,12 @@ Requires-Dist: asdf<4.0.0,>=3.5.0
17
17
  Requires-Dist: astropy>=7.0.0
18
18
  Requires-Dist: dkist-fits-specifications<5.0,>=4.0.0
19
19
  Requires-Dist: dkist-header-validator<6.0,>=5.0.0
20
- Requires-Dist: dkist-processing-core==6.0.0
20
+ Requires-Dist: dkist-processing-core==6.0.1
21
21
  Requires-Dist: dkist-processing-pac<4.0,>=3.1
22
22
  Requires-Dist: dkist-service-configuration<5.0,>=4.1.7
23
23
  Requires-Dist: dkist-spectral-lines<4.0,>=3.0.0
24
- Requires-Dist: solar-wavelength-calibration<2.0,>=1.0
25
- Requires-Dist: globus-sdk<4.0.0,>=3.12.0
24
+ Requires-Dist: solar-wavelength-calibration<3.0,>=2.0.0
25
+ Requires-Dist: globus-sdk<5.0.0,>=4.0.0
26
26
  Requires-Dist: gqlclient[pydantic]==1.2.3
27
27
  Requires-Dist: sqids==0.5.1
28
28
  Requires-Dist: matplotlib>=3.4
@@ -31,7 +31,7 @@ Requires-Dist: numpy>=1.26.4
31
31
  Requires-Dist: object-clerk==1.0.0
32
32
  Requires-Dist: pandas>=1.4.2
33
33
  Requires-Dist: pillow>=10.2.0
34
- Requires-Dist: pydantic>=2.0
34
+ Requires-Dist: pydantic>=2.7.2
35
35
  Requires-Dist: redis==6.4.0
36
36
  Requires-Dist: requests>=2.23
37
37
  Requires-Dist: scipy>=1.15.1
@@ -57,9 +57,9 @@ Requires-Dist: pytest; extra == "docs"
57
57
  Requires-Dist: towncrier<22.12.0; extra == "docs"
58
58
  Requires-Dist: dkist-sphinx-theme; extra == "docs"
59
59
  Provides-Extra: inventory
60
- Requires-Dist: dkist-inventory==1.11.3rc2; extra == "inventory"
60
+ Requires-Dist: dkist-inventory<2.0,>=1.11.2; extra == "inventory"
61
61
  Provides-Extra: asdf
62
- Requires-Dist: dkist-inventory[asdf]==1.11.3rc2; extra == "asdf"
62
+ Requires-Dist: dkist-inventory[asdf]<2.0,>=1.11.2; extra == "asdf"
63
63
  Provides-Extra: quality
64
64
  Requires-Dist: dkist-quality<3.0,>=2.0.0; extra == "quality"
65
65
 
@@ -118,6 +118,10 @@ Environment Variables
118
118
  - annotation=str required=False default='unknown-service-version' alias_priority=2 validation_alias='DKIST_SERVICE_VERSION' description='Service version for OpenTelemetry'
119
119
  * - NOMAD_ALLOC_ID
120
120
  - annotation=str required=False default='unknown-allocation-id' alias_priority=2 validation_alias='NOMAD_ALLOC_ID' description='Nomad allocation ID for OpenTelemetry'
121
+ * - NOMAD_ALLOC_NAME
122
+ - annotation=str required=False default='unknown-allocation-name' alias='NOMAD_ALLOC_NAME' alias_priority=2 description='Allocation name for the deployed container the task is running on.'
123
+ * - NOMAD_GROUP_NAME
124
+ - annotation=str required=False default='unknown-allocation-group' alias='NOMAD_GROUP_NAME' alias_priority=2 description='Allocation group for the deployed container the task is running on'
121
125
  * - OTEL_EXPORTER_OTLP_TRACES_INSECURE
122
126
  - annotation=bool required=False default=True description='Use insecure connection for OTLP traces'
123
127
  * - OTEL_EXPORTER_OTLP_METRICS_INSECURE
@@ -158,12 +162,12 @@ Environment Variables
158
162
  - annotation=Union[dict, NoneType] required=False default=None description='S3 upload configuration for the object store.'
159
163
  * - S3_DOWNLOAD_CONFIG
160
164
  - annotation=Union[dict, NoneType] required=False default=None description='S3 download configuration for the object store.'
161
- * - GLOBUS_TRANSPORT_PARAMS
162
- - annotation=dict required=False default_factory=dict description='Globus transfer parameters.'
163
- * - GLOBUS_CLIENT_ID
164
- - annotation=Union[str, NoneType] required=False default=None description='Globus client ID for inbound/outbound transfers.'
165
- * - GLOBUS_CLIENT_SECRET
166
- - annotation=Union[str, NoneType] required=False default=None description='Globus client secret for inbound/outbound transfers.'
165
+ * - GLOBUS_MAX_RETRIES
166
+ - annotation=int required=False default=5 description='Max retries for transient errors on calls to the globus api.'
167
+ * - GLOBUS_INBOUND_CLIENT_CREDENTIALS
168
+ - annotation=list[GlobusClientCredential] required=False default_factory=list description='Globus client credentials for inbound transfers.' examples=[[{'client_id': 'id1', 'client_secret': 'secret1'}, {'client_id': 'id2', 'client_secret': 'secret2'}]]
169
+ * - GLOBUS_OUTBOUND_CLIENT_CREDENTIALS
170
+ - annotation=list[GlobusClientCredential] required=False default_factory=list description='Globus client credentials for outbound transfers.' examples=[[{'client_id': 'id3', 'client_secret': 'secret3'}, {'client_id': 'id4', 'client_secret': 'secret4'}]]
167
171
  * - OBJECT_STORE_ENDPOINT
168
172
  - annotation=Union[str, NoneType] required=False default=None description='Object store Globus Endpoint ID.'
169
173
  * - SCRATCH_ENDPOINT
@@ -53,6 +53,10 @@ Environment Variables
53
53
  - annotation=str required=False default='unknown-service-version' alias_priority=2 validation_alias='DKIST_SERVICE_VERSION' description='Service version for OpenTelemetry'
54
54
  * - NOMAD_ALLOC_ID
55
55
  - annotation=str required=False default='unknown-allocation-id' alias_priority=2 validation_alias='NOMAD_ALLOC_ID' description='Nomad allocation ID for OpenTelemetry'
56
+ * - NOMAD_ALLOC_NAME
57
+ - annotation=str required=False default='unknown-allocation-name' alias='NOMAD_ALLOC_NAME' alias_priority=2 description='Allocation name for the deployed container the task is running on.'
58
+ * - NOMAD_GROUP_NAME
59
+ - annotation=str required=False default='unknown-allocation-group' alias='NOMAD_GROUP_NAME' alias_priority=2 description='Allocation group for the deployed container the task is running on'
56
60
  * - OTEL_EXPORTER_OTLP_TRACES_INSECURE
57
61
  - annotation=bool required=False default=True description='Use insecure connection for OTLP traces'
58
62
  * - OTEL_EXPORTER_OTLP_METRICS_INSECURE
@@ -93,12 +97,12 @@ Environment Variables
93
97
  - annotation=Union[dict, NoneType] required=False default=None description='S3 upload configuration for the object store.'
94
98
  * - S3_DOWNLOAD_CONFIG
95
99
  - annotation=Union[dict, NoneType] required=False default=None description='S3 download configuration for the object store.'
96
- * - GLOBUS_TRANSPORT_PARAMS
97
- - annotation=dict required=False default_factory=dict description='Globus transfer parameters.'
98
- * - GLOBUS_CLIENT_ID
99
- - annotation=Union[str, NoneType] required=False default=None description='Globus client ID for inbound/outbound transfers.'
100
- * - GLOBUS_CLIENT_SECRET
101
- - annotation=Union[str, NoneType] required=False default=None description='Globus client secret for inbound/outbound transfers.'
100
+ * - GLOBUS_MAX_RETRIES
101
+ - annotation=int required=False default=5 description='Max retries for transient errors on calls to the globus api.'
102
+ * - GLOBUS_INBOUND_CLIENT_CREDENTIALS
103
+ - annotation=list[GlobusClientCredential] required=False default_factory=list description='Globus client credentials for inbound transfers.' examples=[[{'client_id': 'id1', 'client_secret': 'secret1'}, {'client_id': 'id2', 'client_secret': 'secret2'}]]
104
+ * - GLOBUS_OUTBOUND_CLIENT_CREDENTIALS
105
+ - annotation=list[GlobusClientCredential] required=False default_factory=list description='Globus client credentials for outbound transfers.' examples=[[{'client_id': 'id3', 'client_secret': 'secret3'}, {'client_id': 'id4', 'client_secret': 'secret4'}]]
102
106
  * - OBJECT_STORE_ENDPOINT
103
107
  - annotation=Union[str, NoneType] required=False default=None description='Object store Globus Endpoint ID.'
104
108
  * - SCRATCH_ENDPOINT
@@ -3,12 +3,20 @@
3
3
  from dkist_processing_core.config import DKISTProcessingCoreConfiguration
4
4
  from dkist_service_configuration.settings import DEFAULT_MESH_SERVICE
5
5
  from dkist_service_configuration.settings import MeshService
6
+ from pydantic import BaseModel
6
7
  from pydantic import Field
7
8
  from talus import ConnectionRetryerFactory
8
9
  from talus import ConsumerConnectionParameterFactory
9
10
  from talus import ProducerConnectionParameterFactory
10
11
 
11
12
 
13
+ class GlobusClientCredential(BaseModel):
14
+ """Globus client credential."""
15
+
16
+ client_id: str = Field(..., description="Globus client ID for transfers.")
17
+ client_secret: str = Field(..., description="Globus client secret for transfers.")
18
+
19
+
12
20
  class DKISTProcessingCommonConfiguration(DKISTProcessingCoreConfiguration):
13
21
  """Common configurations."""
14
22
 
@@ -40,14 +48,28 @@ class DKISTProcessingCommonConfiguration(DKISTProcessingCoreConfiguration):
40
48
  default=None, description="S3 download configuration for the object store."
41
49
  )
42
50
  # globus
43
- globus_transport_params: dict = Field(
44
- default_factory=dict, description="Globus transfer parameters."
51
+ globus_max_retries: int = Field(
52
+ default=5, description="Max retries for transient errors on calls to the globus api."
45
53
  )
46
- globus_client_id: str | None = Field(
47
- default=None, description="Globus client ID for inbound/outbound transfers."
54
+ globus_inbound_client_credentials: list[GlobusClientCredential] = Field(
55
+ default_factory=list,
56
+ description="Globus client credentials for inbound transfers.",
57
+ examples=[
58
+ [
59
+ {"client_id": "id1", "client_secret": "secret1"},
60
+ {"client_id": "id2", "client_secret": "secret2"},
61
+ ],
62
+ ],
48
63
  )
49
- globus_client_secret: str | None = Field(
50
- default=None, description="Globus client secret for inbound/outbound transfers."
64
+ globus_outbound_client_credentials: list[GlobusClientCredential] = Field(
65
+ default_factory=list,
66
+ description="Globus client credentials for outbound transfers.",
67
+ examples=[
68
+ [
69
+ {"client_id": "id3", "client_secret": "secret3"},
70
+ {"client_id": "id4", "client_secret": "secret4"},
71
+ ],
72
+ ],
51
73
  )
52
74
  object_store_endpoint: str | None = Field(
53
75
  default=None, description="Object store Globus Endpoint ID."
@@ -39,8 +39,8 @@ class L1OutputDataBase(OutputDataBase, ABC):
39
39
  @property
40
40
  def dataset_has_quality_data(self) -> bool:
41
41
  """Return True if the dataset has quality data."""
42
- paths = list(self.read(tags=[Tag.output(), Tag.quality_data()]))
43
- return len(paths) > 0
42
+ path_count = self.count(tags=[Tag.output(), Tag.quality_data()])
43
+ return path_count > 0
44
44
 
45
45
  def rollback(self):
46
46
  """Warn that the metadata-store and the interservice bus retain the effect of this tasks execution. Rolling back this task may not be achievable without other action."""
@@ -109,7 +109,7 @@ class TransferL1Data(TransferDataBase, GlobusMixin):
109
109
  """Transfer quality data to the object store."""
110
110
  paths = list(self.read(tags=[Tag.output(), Tag.quality_data()]))
111
111
  if len(paths) == 0:
112
- logger.warning(
112
+ logger.info(
113
113
  f"No quality data found to upload for dataset. recipe_run_id={self.recipe_run_id}"
114
114
  )
115
115
  return
@@ -167,11 +167,10 @@ class AssembleQualityData(L1OutputDataBase, QualityMixin):
167
167
 
168
168
  class SubmitDatasetMetadata(L1OutputDataBase):
169
169
  """
170
- Add quality data and receipt account to the metadata store.
170
+ Add receipt account to the metadata store.
171
171
 
172
- Add the quality data to the Quality database.
173
172
  Add a Dataset Receipt Account record to Processing Support for use by the Dataset Catalog Locker.
174
- Adds the number of files created during the calibration processing to the Processing Support table
173
+ Adds the number of files to be created during the calibration processing to the Processing Support table
175
174
  for use by the Dataset Catalog Locker.
176
175
  """
177
176
 
@@ -180,8 +179,6 @@ class SubmitDatasetMetadata(L1OutputDataBase):
180
179
  with self.telemetry_span("Count Expected Outputs"):
181
180
  dataset_id = self.constants.dataset_id
182
181
  expected_object_count = self.count(tags=Tag.output())
183
- if self.dataset_has_quality_data:
184
- expected_object_count += 1
185
182
  logger.info(
186
183
  f"Adding Dataset Receipt Account: "
187
184
  f"{dataset_id=}, {expected_object_count=}, recipe_run_id={self.recipe_run_id}"
@@ -9,6 +9,8 @@ from globus_sdk import ConfidentialAppAuthClient
9
9
  from globus_sdk import GlobusError
10
10
  from globus_sdk import TransferClient
11
11
  from globus_sdk import TransferData
12
+ from globus_sdk.scopes import TransferScopes
13
+ from globus_sdk.transport import RetryConfig
12
14
 
13
15
  from dkist_processing_common.config import common_configurations
14
16
 
@@ -31,27 +33,32 @@ class GlobusTransferItem:
31
33
  class GlobusMixin:
32
34
  """Mixin to add methods to a Task to support globus transfers."""
33
35
 
34
- @property
35
- def globus_transfer_client(self) -> TransferClient:
36
- """Get the globus transfer client, creating it if it doesn't exist."""
37
- if getattr(self, "_globus_transfer_client", False):
38
- return self._globus_transfer_client
36
+ def globus_transfer_client_factory(self, transfer_data: TransferData) -> TransferClient:
37
+ """Create a globus transfer client based on the direction of transfer and round-robin the available application credentials."""
38
+ if (
39
+ transfer_data["source_endpoint"] == common_configurations.object_store_endpoint
40
+ ): # inbound
41
+ client_credentials = common_configurations.globus_inbound_client_credentials
42
+ else: # outbound
43
+ client_credentials = common_configurations.globus_outbound_client_credentials
44
+
45
+ # Round-robin the client credentials based on the recipe run id
46
+ index = self.recipe_run_id % len(client_credentials)
47
+ selected_credential = client_credentials[index]
48
+
39
49
  confidential_client = ConfidentialAppAuthClient(
40
- client_id=common_configurations.globus_client_id,
41
- client_secret=common_configurations.globus_client_secret,
42
- transport_params=common_configurations.globus_transport_params,
50
+ client_id=selected_credential.client_id,
51
+ client_secret=selected_credential.client_secret,
43
52
  )
44
- authorizer = ClientCredentialsAuthorizer(
45
- confidential_client, scopes="urn:globus:auth:scope:transfer.api.globus.org:all"
46
- )
47
- self._globus_transfer_client = TransferClient(authorizer=authorizer)
48
- return self._globus_transfer_client
53
+ authorizer = ClientCredentialsAuthorizer(confidential_client, scopes=TransferScopes)
54
+ retry_config = RetryConfig(max_retries=common_configurations.globus_max_retries)
55
+
56
+ return TransferClient(authorizer=authorizer, retry_config=retry_config)
49
57
 
50
58
  def globus_transfer_scratch_to_object_store(
51
59
  self,
52
60
  transfer_items: list[GlobusTransferItem],
53
61
  label: str = None,
54
- sync_level: str = None,
55
62
  verify_checksum: bool = True,
56
63
  ) -> None:
57
64
  """Transfer data from scratch to the object store."""
@@ -60,7 +67,6 @@ class GlobusMixin:
60
67
  destination_endpoint=common_configurations.object_store_endpoint,
61
68
  transfer_items=transfer_items,
62
69
  label=label,
63
- sync_level=sync_level,
64
70
  verify_checksum=verify_checksum,
65
71
  )
66
72
 
@@ -68,7 +74,6 @@ class GlobusMixin:
68
74
  self,
69
75
  transfer_items: list[GlobusTransferItem],
70
76
  label: str = None,
71
- sync_level: str = None,
72
77
  verify_checksum: bool = True,
73
78
  ) -> None:
74
79
  """Transfer data from the object store to scratch."""
@@ -77,7 +82,6 @@ class GlobusMixin:
77
82
  destination_endpoint=common_configurations.scratch_endpoint,
78
83
  transfer_items=transfer_items,
79
84
  label=label,
80
- sync_level=sync_level,
81
85
  verify_checksum=verify_checksum,
82
86
  )
83
87
 
@@ -87,7 +91,6 @@ class GlobusMixin:
87
91
  destination_endpoint: str,
88
92
  transfer_items: list[GlobusTransferItem],
89
93
  label: str = None,
90
- sync_level: str = None,
91
94
  verify_checksum: bool = True,
92
95
  ) -> TransferData:
93
96
  """Format a globus TransferData instance."""
@@ -95,7 +98,6 @@ class GlobusMixin:
95
98
  source_endpoint=source_endpoint,
96
99
  destination_endpoint=destination_endpoint,
97
100
  label=label,
98
- sync_level=sync_level,
99
101
  verify_checksum=verify_checksum,
100
102
  )
101
103
  for item in transfer_items:
@@ -112,7 +114,6 @@ class GlobusMixin:
112
114
  destination_endpoint: str,
113
115
  transfer_items: list[GlobusTransferItem],
114
116
  label: str = None,
115
- sync_level: str = None,
116
117
  verify_checksum: bool = True,
117
118
  ) -> None:
118
119
  """Perform a transfer of data using globus."""
@@ -121,7 +122,6 @@ class GlobusMixin:
121
122
  destination_endpoint=destination_endpoint,
122
123
  transfer_items=transfer_items,
123
124
  label=label,
124
- sync_level=sync_level,
125
125
  verify_checksum=verify_checksum,
126
126
  )
127
127
  self._blocking_globus_transfer(transfer_data=transfer_data)
@@ -131,24 +131,21 @@ class GlobusMixin:
131
131
  source_endpoint: str,
132
132
  destination_endpoint: str,
133
133
  label: str = None,
134
- sync_level: str = None,
135
134
  verify_checksum: bool = True,
136
135
  ) -> TransferData:
137
136
  label = label or "Data Processing Transfer"
138
137
  return TransferData(
139
- transfer_client=self.globus_transfer_client,
140
138
  source_endpoint=source_endpoint,
141
139
  destination_endpoint=destination_endpoint,
142
140
  label=label,
143
- sync_level=sync_level,
144
141
  verify_checksum=verify_checksum,
145
142
  )
146
143
 
147
144
  def _blocking_globus_transfer(self, transfer_data: TransferData) -> None:
148
- tc = self.globus_transfer_client
149
- logger.info(f"Starting globus transfer: label={transfer_data.get('label')}")
145
+ tc = self.globus_transfer_client_factory(transfer_data=transfer_data)
150
146
  transfer_result = tc.submit_transfer(transfer_data)
151
147
  task_id = transfer_result["task_id"]
148
+ logger.info(f"Starting globus transfer: label={transfer_data.get('label')}, {task_id=}, ")
152
149
  polling_interval = 60
153
150
  while not tc.task_wait(
154
151
  task_id=task_id, timeout=polling_interval, polling_interval=polling_interval
@@ -1356,15 +1356,13 @@ class _WavecalQualityMixin:
1356
1356
  Note that the residuals are the *unweighed* residuals.
1357
1357
  """
1358
1358
  weight_data = np.ones(input_wavelength.size) if weights is None else weights
1359
- prepared_weights = np.sqrt(weight_data / np.sum(weight_data))
1359
+ prepared_weights = fit_result.prepared_weights
1360
1360
  residuals = fit_result.minimizer_result.residual / prepared_weights
1361
1361
  residuals[~np.isfinite(residuals)] = 0.0
1362
- best_fit_atlas = input_spectrum - residuals
1363
1362
  normalized_residuals = residuals / input_spectrum
1364
1363
 
1365
- best_fit_header = fit_result.wavelength_parameters.to_header(axis_num=1)
1366
- wcs = WCS(best_fit_header)
1367
- best_fit_wavelength = wcs.spectral.pixel_to_world(np.arange(input_spectrum.size))
1364
+ best_fit_atlas = fit_result.best_fit_atlas
1365
+ best_fit_wavelength = fit_result.best_fit_wavelength_vector
1368
1366
 
1369
1367
  finite_idx = (
1370
1368
  np.isfinite(input_wavelength)
@@ -1378,7 +1376,7 @@ class _WavecalQualityMixin:
1378
1376
  data = {
1379
1377
  "input_wavelength_nm": input_wavelength.to_value(u.nm)[finite_idx].tolist(),
1380
1378
  "input_spectrum": input_spectrum[finite_idx].tolist(),
1381
- "best_fit_wavelength_nm": best_fit_wavelength.to_value(u.nm)[finite_idx].tolist(),
1379
+ "best_fit_wavelength_nm": best_fit_wavelength[finite_idx].tolist(),
1382
1380
  "best_fit_atlas": best_fit_atlas[finite_idx].tolist(),
1383
1381
  "normalized_residuals": normalized_residuals[finite_idx].tolist(),
1384
1382
  "weights": None if weights is None else weight_data[finite_idx].tolist(),
@@ -9,8 +9,6 @@ from typing import Any
9
9
  from typing import Generator
10
10
  from uuid import uuid4
11
11
 
12
- from dkist_inventory.inventory import generate_quality_report_filename
13
-
14
12
  from dkist_processing_common.codecs.asdf import asdf_fileobj_encoder
15
13
  from dkist_processing_common.codecs.basemodel import basemodel_decoder
16
14
  from dkist_processing_common.codecs.fits import fits_access_decoder
@@ -32,6 +30,7 @@ INVENTORY_EXTRA_INSTALLED = False
32
30
  try:
33
31
  from dkist_inventory.inventory import generate_asdf_filename
34
32
  from dkist_inventory.inventory import generate_inventory_from_frame_inventory
33
+ from dkist_inventory.inventory import generate_quality_report_filename
35
34
 
36
35
  INVENTORY_EXTRA_INSTALLED = True
37
36
  except ModuleNotFoundError:
@@ -226,6 +225,13 @@ class CreateTrialQualityReport(OutputDataBase):
226
225
  f" but the required dependencies were not found."
227
226
  )
228
227
 
228
+ if not INVENTORY_EXTRA_INSTALLED:
229
+ raise ModuleNotFoundError(
230
+ f"{self.__class__.__name__} Task requires the dkist-inventory package "
231
+ f"(e.g. via an 'inventory' pip_extra on dkist_processing_core.Workflow().add_node())"
232
+ f" but the required dependencies were not found."
233
+ )
234
+
229
235
  def run(self) -> None:
230
236
  """Generate the quality report for the dataset."""
231
237
  self.create_trial_quality_report()
@@ -1214,12 +1214,20 @@ def wavecal_weights(wavecal_input_wavelength) -> np.ndarray:
1214
1214
 
1215
1215
 
1216
1216
  @pytest.fixture(scope="session")
1217
- def wavecal_fit_result(wavecal_input_wavelength) -> FitResult:
1217
+ def wavecal_fit_result(wavecal_input_wavelength, wavecal_input_spectrum) -> FitResult:
1218
1218
  wavelength_params = WavelengthParameters(
1219
1219
  crpix=1, crval=10.0, dispersion=1, grating_constant=1, order=1, incident_light_angle=0
1220
1220
  )
1221
- minimizer_result = MinimizerResult(residual=np.random.random(wavecal_input_wavelength.size))
1222
- return FitResult(wavelength_parameters=wavelength_params, minimizer_result=minimizer_result)
1221
+
1222
+ residuals = np.random.random(wavecal_input_wavelength.size)
1223
+ residuals[-1] = np.nan
1224
+ minimizer_result = MinimizerResult(residual=residuals)
1225
+ return FitResult(
1226
+ wavelength_parameters=wavelength_params,
1227
+ minimizer_result=minimizer_result,
1228
+ input_wavelength_vector=wavecal_input_wavelength,
1229
+ input_spectrum=wavecal_input_spectrum,
1230
+ )
1223
1231
 
1224
1232
 
1225
1233
  @pytest.mark.parametrize(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dkist-processing-common
3
- Version: 11.8.2rc1
3
+ Version: 11.9.1
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
@@ -17,12 +17,12 @@ Requires-Dist: asdf<4.0.0,>=3.5.0
17
17
  Requires-Dist: astropy>=7.0.0
18
18
  Requires-Dist: dkist-fits-specifications<5.0,>=4.0.0
19
19
  Requires-Dist: dkist-header-validator<6.0,>=5.0.0
20
- Requires-Dist: dkist-processing-core==6.0.0
20
+ Requires-Dist: dkist-processing-core==6.0.1
21
21
  Requires-Dist: dkist-processing-pac<4.0,>=3.1
22
22
  Requires-Dist: dkist-service-configuration<5.0,>=4.1.7
23
23
  Requires-Dist: dkist-spectral-lines<4.0,>=3.0.0
24
- Requires-Dist: solar-wavelength-calibration<2.0,>=1.0
25
- Requires-Dist: globus-sdk<4.0.0,>=3.12.0
24
+ Requires-Dist: solar-wavelength-calibration<3.0,>=2.0.0
25
+ Requires-Dist: globus-sdk<5.0.0,>=4.0.0
26
26
  Requires-Dist: gqlclient[pydantic]==1.2.3
27
27
  Requires-Dist: sqids==0.5.1
28
28
  Requires-Dist: matplotlib>=3.4
@@ -31,7 +31,7 @@ Requires-Dist: numpy>=1.26.4
31
31
  Requires-Dist: object-clerk==1.0.0
32
32
  Requires-Dist: pandas>=1.4.2
33
33
  Requires-Dist: pillow>=10.2.0
34
- Requires-Dist: pydantic>=2.0
34
+ Requires-Dist: pydantic>=2.7.2
35
35
  Requires-Dist: redis==6.4.0
36
36
  Requires-Dist: requests>=2.23
37
37
  Requires-Dist: scipy>=1.15.1
@@ -57,9 +57,9 @@ Requires-Dist: pytest; extra == "docs"
57
57
  Requires-Dist: towncrier<22.12.0; extra == "docs"
58
58
  Requires-Dist: dkist-sphinx-theme; extra == "docs"
59
59
  Provides-Extra: inventory
60
- Requires-Dist: dkist-inventory==1.11.3rc2; extra == "inventory"
60
+ Requires-Dist: dkist-inventory<2.0,>=1.11.2; extra == "inventory"
61
61
  Provides-Extra: asdf
62
- Requires-Dist: dkist-inventory[asdf]==1.11.3rc2; extra == "asdf"
62
+ Requires-Dist: dkist-inventory[asdf]<2.0,>=1.11.2; extra == "asdf"
63
63
  Provides-Extra: quality
64
64
  Requires-Dist: dkist-quality<3.0,>=2.0.0; extra == "quality"
65
65
 
@@ -118,6 +118,10 @@ Environment Variables
118
118
  - annotation=str required=False default='unknown-service-version' alias_priority=2 validation_alias='DKIST_SERVICE_VERSION' description='Service version for OpenTelemetry'
119
119
  * - NOMAD_ALLOC_ID
120
120
  - annotation=str required=False default='unknown-allocation-id' alias_priority=2 validation_alias='NOMAD_ALLOC_ID' description='Nomad allocation ID for OpenTelemetry'
121
+ * - NOMAD_ALLOC_NAME
122
+ - annotation=str required=False default='unknown-allocation-name' alias='NOMAD_ALLOC_NAME' alias_priority=2 description='Allocation name for the deployed container the task is running on.'
123
+ * - NOMAD_GROUP_NAME
124
+ - annotation=str required=False default='unknown-allocation-group' alias='NOMAD_GROUP_NAME' alias_priority=2 description='Allocation group for the deployed container the task is running on'
121
125
  * - OTEL_EXPORTER_OTLP_TRACES_INSECURE
122
126
  - annotation=bool required=False default=True description='Use insecure connection for OTLP traces'
123
127
  * - OTEL_EXPORTER_OTLP_METRICS_INSECURE
@@ -158,12 +162,12 @@ Environment Variables
158
162
  - annotation=Union[dict, NoneType] required=False default=None description='S3 upload configuration for the object store.'
159
163
  * - S3_DOWNLOAD_CONFIG
160
164
  - annotation=Union[dict, NoneType] required=False default=None description='S3 download configuration for the object store.'
161
- * - GLOBUS_TRANSPORT_PARAMS
162
- - annotation=dict required=False default_factory=dict description='Globus transfer parameters.'
163
- * - GLOBUS_CLIENT_ID
164
- - annotation=Union[str, NoneType] required=False default=None description='Globus client ID for inbound/outbound transfers.'
165
- * - GLOBUS_CLIENT_SECRET
166
- - annotation=Union[str, NoneType] required=False default=None description='Globus client secret for inbound/outbound transfers.'
165
+ * - GLOBUS_MAX_RETRIES
166
+ - annotation=int required=False default=5 description='Max retries for transient errors on calls to the globus api.'
167
+ * - GLOBUS_INBOUND_CLIENT_CREDENTIALS
168
+ - annotation=list[GlobusClientCredential] required=False default_factory=list description='Globus client credentials for inbound transfers.' examples=[[{'client_id': 'id1', 'client_secret': 'secret1'}, {'client_id': 'id2', 'client_secret': 'secret2'}]]
169
+ * - GLOBUS_OUTBOUND_CLIENT_CREDENTIALS
170
+ - annotation=list[GlobusClientCredential] required=False default_factory=list description='Globus client credentials for outbound transfers.' examples=[[{'client_id': 'id3', 'client_secret': 'secret3'}, {'client_id': 'id4', 'client_secret': 'secret4'}]]
167
171
  * - OBJECT_STORE_ENDPOINT
168
172
  - annotation=Union[str, NoneType] required=False default=None description='Object store Globus Endpoint ID.'
169
173
  * - SCRATCH_ENDPOINT
@@ -7,7 +7,6 @@ README.rst
7
7
  bitbucket-pipelines.yml
8
8
  pyproject.toml
9
9
  changelog/.gitempty
10
- changelog/276.feature.rst
11
10
  dkist_processing_common/__init__.py
12
11
  dkist_processing_common/config.py
13
12
  dkist_processing_common/manual.py
@@ -2,12 +2,12 @@ asdf<4.0.0,>=3.5.0
2
2
  astropy>=7.0.0
3
3
  dkist-fits-specifications<5.0,>=4.0.0
4
4
  dkist-header-validator<6.0,>=5.0.0
5
- dkist-processing-core==6.0.0
5
+ dkist-processing-core==6.0.1
6
6
  dkist-processing-pac<4.0,>=3.1
7
7
  dkist-service-configuration<5.0,>=4.1.7
8
8
  dkist-spectral-lines<4.0,>=3.0.0
9
- solar-wavelength-calibration<2.0,>=1.0
10
- globus-sdk<4.0.0,>=3.12.0
9
+ solar-wavelength-calibration<3.0,>=2.0.0
10
+ globus-sdk<5.0.0,>=4.0.0
11
11
  gqlclient[pydantic]==1.2.3
12
12
  sqids==0.5.1
13
13
  matplotlib>=3.4
@@ -16,7 +16,7 @@ numpy>=1.26.4
16
16
  object-clerk==1.0.0
17
17
  pandas>=1.4.2
18
18
  pillow>=10.2.0
19
- pydantic>=2.0
19
+ pydantic>=2.7.2
20
20
  redis==6.4.0
21
21
  requests>=2.23
22
22
  scipy>=1.15.1
@@ -24,7 +24,7 @@ sunpy>=3.0.0
24
24
  talus==1.3.4
25
25
 
26
26
  [asdf]
27
- dkist-inventory[asdf]==1.11.3rc2
27
+ dkist-inventory[asdf]<2.0,>=1.11.2
28
28
 
29
29
  [docs]
30
30
  sphinx
@@ -36,7 +36,7 @@ towncrier<22.12.0
36
36
  dkist-sphinx-theme
37
37
 
38
38
  [inventory]
39
- dkist-inventory==1.11.3rc2
39
+ dkist-inventory<2.0,>=1.11.2
40
40
 
41
41
  [quality]
42
42
  dkist-quality<3.0,>=2.0.0
@@ -25,12 +25,12 @@ dependencies = [
25
25
  "astropy >= 7.0.0",
26
26
  "dkist-fits-specifications >= 4.0.0, <5.0",
27
27
  "dkist-header-validator >= 5.0.0, <6.0",
28
- "dkist-processing-core == 6.0.0",
28
+ "dkist-processing-core == 6.0.1",
29
29
  "dkist-processing-pac >= 3.1, <4.0",
30
30
  "dkist-service-configuration >= 4.1.7, <5.0",
31
31
  "dkist-spectral-lines >= 3.0.0, <4.0",
32
- "solar-wavelength-calibration >= 1.0, <2.0",
33
- "globus-sdk >= 3.12.0, <4.0.0",
32
+ "solar-wavelength-calibration >= 2.0.0, <3.0",
33
+ "globus-sdk >= 4.0.0, <5.0.0",
34
34
  "gqlclient[pydantic] == 1.2.3",
35
35
  "sqids == 0.5.1",
36
36
  "matplotlib >= 3.4",
@@ -39,7 +39,7 @@ dependencies = [
39
39
  "object-clerk == 1.0.0",
40
40
  "pandas >= 1.4.2",
41
41
  "pillow >= 10.2.0",
42
- "pydantic >= 2.0",
42
+ "pydantic >= 2.7.2",
43
43
  "redis == 6.4.0",
44
44
  "requests >= 2.23",
45
45
  "scipy >= 1.15.1",
@@ -76,10 +76,10 @@ docs = [
76
76
  "dkist-sphinx-theme",
77
77
  ]
78
78
  inventory = [
79
- "dkist-inventory == 1.11.3rc2",
79
+ "dkist-inventory >= 1.11.2, <2.0",
80
80
  ]
81
81
  asdf = [
82
- "dkist-inventory[asdf] == 1.11.3rc2",
82
+ "dkist-inventory[asdf] >= 1.11.2, <2.0",
83
83
  ]
84
84
  quality = [
85
85
  "dkist-quality >= 2.0.0, <3.0",
@@ -1 +0,0 @@
1
- Store quality data in object store