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.
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/CHANGELOG.rst +30 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/PKG-INFO +17 -13
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/README.rst +10 -6
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/config.py +28 -6
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/l1_output_data.py +5 -8
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/mixin/globus.py +23 -26
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/mixin/quality/_metrics.py +4 -6
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/trial_catalog.py +8 -2
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_quality_mixin.py +11 -3
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common.egg-info/PKG-INFO +17 -13
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common.egg-info/SOURCES.txt +0 -1
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common.egg-info/requires.txt +6 -6
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/pyproject.toml +6 -6
- dkist_processing_common-11.8.2rc1/changelog/276.feature.rst +0 -1
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/.gitignore +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/.pre-commit-config.yaml +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/.readthedocs.yml +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/.snyk +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/bitbucket-pipelines.yml +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/changelog/.gitempty +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/__init__.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/_util/__init__.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/_util/constants.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/_util/graphql.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/_util/scratch.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/_util/tags.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/codecs/__init__.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/codecs/array.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/codecs/asdf.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/codecs/basemodel.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/codecs/bytes.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/codecs/fits.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/codecs/iobase.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/codecs/json.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/codecs/path.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/codecs/quality.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/codecs/str.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/fonts/Lato-Regular.ttf +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/fonts/__init__.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/manual.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/__init__.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/constants.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/dkist_location.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/fits_access.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/flower_pot.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/fried_parameter.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/graphql.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/input_dataset.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/message.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/message_queue_binding.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/metric_code.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/parameters.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/quality.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/tags.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/task_name.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/telemetry.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/models/wavelength.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/__init__.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/average_bud.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/cs_step.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/dsps_repeat.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/experiment_id_bud.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/id_bud.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/l0_fits_access.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/l1_fits_access.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/near_bud.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/observing_program_id_bud.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/proposal_id_bud.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/quality.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/retarder.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/single_value_single_key_flower.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/task.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/time.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/unique_bud.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/parsers/wavelength.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/__init__.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/assemble_movie.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/base.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/mixin/__init__.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/mixin/interservice_bus.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/mixin/metadata_store.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/mixin/object_store.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/mixin/quality/__init__.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/mixin/quality/_base.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/output_data_base.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/parse_l0_input_data.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/quality_metrics.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/teardown.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/transfer_input_data.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/trial_output_data.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tasks/write_l1.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/__init__.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/conftest.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/mock_metadata_store.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_assemble_movie.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_assemble_quality.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_base.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_codecs.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_constants.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_cs_step.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_dkist_location.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_fits_access.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_flower_pot.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_fried_parameter.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_input_dataset.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_interservice_bus.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_interservice_bus_mixin.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_manual_processing.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_output_data_base.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_parameters.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_parse_l0_input_data.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_publish_catalog_messages.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_quality.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_scratch.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_stems.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_submit_dataset_metadata.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_tags.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_task_name.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_task_parsing.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_teardown.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_transfer_input_data.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_transfer_l1_output_data.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_trial_catalog.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_trial_output_data.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_workflow_task_base.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common/tests/test_write_l1.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common.egg-info/dependency_links.txt +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/dkist_processing_common.egg-info/top_level.txt +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/docs/Makefile +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/docs/changelog.rst +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/docs/conf.py +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/docs/index.rst +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/docs/landing_page.rst +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/docs/make.bat +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/docs/requirements.txt +0 -0
- {dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/licenses/LICENSE.rst +0 -0
- {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.
|
|
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.
|
|
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<
|
|
25
|
-
Requires-Dist: globus-sdk<
|
|
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.
|
|
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
|
|
60
|
+
Requires-Dist: dkist-inventory<2.0,>=1.11.2; extra == "inventory"
|
|
61
61
|
Provides-Extra: asdf
|
|
62
|
-
Requires-Dist: dkist-inventory[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
|
-
* -
|
|
162
|
-
- annotation=
|
|
163
|
-
* -
|
|
164
|
-
- annotation=
|
|
165
|
-
* -
|
|
166
|
-
- annotation=
|
|
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
|
-
* -
|
|
97
|
-
- annotation=
|
|
98
|
-
* -
|
|
99
|
-
- annotation=
|
|
100
|
-
* -
|
|
101
|
-
- annotation=
|
|
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
|
-
|
|
44
|
-
|
|
51
|
+
globus_max_retries: int = Field(
|
|
52
|
+
default=5, description="Max retries for transient errors on calls to the globus api."
|
|
45
53
|
)
|
|
46
|
-
|
|
47
|
-
|
|
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
|
-
|
|
50
|
-
|
|
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
|
-
|
|
43
|
-
return
|
|
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.
|
|
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
|
|
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
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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=
|
|
41
|
-
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
|
-
|
|
46
|
-
|
|
47
|
-
|
|
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.
|
|
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 =
|
|
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
|
-
|
|
1366
|
-
|
|
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
|
|
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
|
-
|
|
1222
|
-
|
|
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.
|
|
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.
|
|
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<
|
|
25
|
-
Requires-Dist: globus-sdk<
|
|
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.
|
|
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
|
|
60
|
+
Requires-Dist: dkist-inventory<2.0,>=1.11.2; extra == "inventory"
|
|
61
61
|
Provides-Extra: asdf
|
|
62
|
-
Requires-Dist: dkist-inventory[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
|
-
* -
|
|
162
|
-
- annotation=
|
|
163
|
-
* -
|
|
164
|
-
- annotation=
|
|
165
|
-
* -
|
|
166
|
-
- annotation=
|
|
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
|
|
@@ -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.
|
|
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<
|
|
10
|
-
globus-sdk<
|
|
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.
|
|
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]
|
|
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
|
|
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.
|
|
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 >=
|
|
33
|
-
"globus-sdk >=
|
|
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.
|
|
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
|
|
79
|
+
"dkist-inventory >= 1.11.2, <2.0",
|
|
80
80
|
]
|
|
81
81
|
asdf = [
|
|
82
|
-
"dkist-inventory[asdf]
|
|
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
|
|
File without changes
|
{dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/.pre-commit-config.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{dkist_processing_common-11.8.2rc1 → dkist_processing_common-11.9.1}/bitbucket-pipelines.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|