dkist-processing-common 13.0.3rc2__tar.gz → 13.0.4__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-13.0.3rc2 → dkist_processing_common-13.0.4}/.readthedocs.yml +1 -1
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/CHANGELOG.rst +30 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/PKG-INFO +2 -2
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tasks/assemble_movie.py +1 -1
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tasks/quality_metrics.py +21 -33
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tasks/trial_catalog.py +1 -1
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/conftest.py +2 -2
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_codecs.py +8 -11
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_fits_access.py +0 -1
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_interservice_bus.py +24 -5
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_interservice_bus_mixin.py +16 -2
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_quality.py +27 -27
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_quality_mixin.py +2 -2
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_write_l1.py +78 -64
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common.egg-info/PKG-INFO +2 -2
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common.egg-info/SOURCES.txt +0 -1
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common.egg-info/requires.txt +1 -1
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/pyproject.toml +11 -1
- dkist_processing_common-13.0.3rc2/changelog/326.feature.rst +0 -1
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/.gitignore +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/.pre-commit-config.yaml +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/.snyk +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/README.rst +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/bitbucket-pipelines.yml +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/changelog/.gitempty +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/__init__.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/_util/__init__.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/_util/constants.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/_util/graphql.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/_util/scratch.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/_util/tags.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/codecs/__init__.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/codecs/array.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/codecs/asdf.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/codecs/basemodel.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/codecs/bytes.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/codecs/fits.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/codecs/iobase.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/codecs/json.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/codecs/path.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/codecs/quality.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/codecs/str.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/config.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/fonts/Lato-Regular.ttf +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/fonts/__init__.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/manual.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/models/__init__.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/models/constants.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/models/dkist_location.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/models/extras.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/models/fits_access.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/models/flower_pot.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/models/fried_parameter.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/models/graphql.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/models/input_dataset.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/models/message.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/models/message_queue_binding.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/models/metric_code.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/models/parameters.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/models/quality.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/models/tags.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/models/task_name.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/models/telemetry.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/models/wavelength.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/parsers/__init__.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/parsers/average_bud.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/parsers/cs_step.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/parsers/dsps_repeat.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/parsers/experiment_id_bud.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/parsers/id_bud.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/parsers/l0_fits_access.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/parsers/l1_fits_access.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/parsers/lookup_bud.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/parsers/near_bud.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/parsers/observing_program_id_bud.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/parsers/proposal_id_bud.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/parsers/quality.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/parsers/retarder.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/parsers/single_value_single_key_flower.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/parsers/task.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/parsers/time.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/parsers/unique_bud.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/parsers/wavelength.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tasks/__init__.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tasks/base.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tasks/l1_output_data.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tasks/mixin/__init__.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tasks/mixin/globus.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tasks/mixin/interservice_bus.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tasks/mixin/metadata_store.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tasks/mixin/object_store.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tasks/mixin/quality/__init__.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tasks/mixin/quality/_base.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tasks/mixin/quality/_metrics.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tasks/output_data_base.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tasks/parse_l0_input_data.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tasks/teardown.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tasks/transfer_input_data.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tasks/trial_output_data.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tasks/write_extra.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tasks/write_l1.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tasks/write_l1_base.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/__init__.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/mock_metadata_store.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_assemble_movie.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_assemble_quality.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_base.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_constants.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_construct_dataset_extras.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_cs_step.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_dkist_location.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_flower_pot.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_fried_parameter.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_input_dataset.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_manual_processing.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_output_data_base.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_parameters.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_parse_l0_input_data.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_publish_catalog_messages.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_scratch.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_stems.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_submit_dataset_metadata.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_tags.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_task_name.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_task_parsing.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_teardown.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_transfer_input_data.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_transfer_l1_output_data.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_trial_catalog.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_trial_output_data.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common/tests/test_workflow_task_base.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common.egg-info/dependency_links.txt +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/dkist_processing_common.egg-info/top_level.txt +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/docs/Makefile +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/docs/changelog.rst +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/docs/conf.py +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/docs/index.rst +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/docs/landing_page.rst +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/docs/make.bat +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/docs/requirements.txt +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/licenses/LICENSE.rst +0 -0
- {dkist_processing_common-13.0.3rc2 → dkist_processing_common-13.0.4}/setup.cfg +0 -0
|
@@ -1,3 +1,33 @@
|
|
|
1
|
+
v13.0.4 (2026-04-16)
|
|
2
|
+
====================
|
|
3
|
+
|
|
4
|
+
Misc
|
|
5
|
+
----
|
|
6
|
+
|
|
7
|
+
- Convert fits.open usage in tests to context managers. (`#289 <https://bitbucket.org/dkistdc/dkist-processing-common/pull-requests/289>`__)
|
|
8
|
+
- Remove deprecated Astropy usage (e.g., CompImageHeader) and updated tests accordingly. (`#289 <https://bitbucket.org/dkistdc/dkist-processing-common/pull-requests/289>`__)
|
|
9
|
+
- Configure pyproject.toml to turn warnings raised during testing into errors.
|
|
10
|
+
Ignore certain testing warnings that we know are okay. (`#289 <https://bitbucket.org/dkistdc/dkist-processing-common/pull-requests/289>`__)
|
|
11
|
+
- Modernize code to address Python 3.13 deprecations (e.g., datetime.utcnow, Pillow image mode handling). (`#289 <https://bitbucket.org/dkistdc/dkist-processing-common/pull-requests/289>`__)
|
|
12
|
+
- Update dkist-processing-core to v7.2.1, which includes better warning handling and an RTD build OS update. (`#298 <https://bitbucket.org/dkistdc/dkist-processing-common/pull-requests/298>`__)
|
|
13
|
+
- Upgrade Read the Docs LTS build image to Ubuntu 24.04. (`#328 <https://bitbucket.org/dkistdc/dkist-processing-common/pull-requests/328>`__)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
v13.0.3 (2026-04-14)
|
|
17
|
+
====================
|
|
18
|
+
|
|
19
|
+
Features
|
|
20
|
+
--------
|
|
21
|
+
|
|
22
|
+
- Simplify the production of L1 quality metrics. (`#326 <https://bitbucket.org/dkistdc/dkist-processing-common/pull-requests/326>`__)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
Misc
|
|
26
|
+
----
|
|
27
|
+
|
|
28
|
+
- Make isb username and password configurable for local unit tests. (`#322 <https://bitbucket.org/dkistdc/dkist-processing-common/pull-requests/322>`__)
|
|
29
|
+
|
|
30
|
+
|
|
1
31
|
v13.0.1 (2026-04-07)
|
|
2
32
|
====================
|
|
3
33
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dkist-processing-common
|
|
3
|
-
Version: 13.0.
|
|
3
|
+
Version: 13.0.4
|
|
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,7 +17,7 @@ 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.24.0
|
|
19
19
|
Requires-Dist: dkist-header-validator<6.0,>=5.3.0
|
|
20
|
-
Requires-Dist: dkist-processing-core==7.1
|
|
20
|
+
Requires-Dist: dkist-processing-core==7.2.1
|
|
21
21
|
Requires-Dist: dkist-processing-pac<4.0,>=3.1
|
|
22
22
|
Requires-Dist: dkist-service-configuration<5.0,>=4.3.0
|
|
23
23
|
Requires-Dist: dkist-spectral-lines<4.0,>=3.0.0
|
|
@@ -225,7 +225,7 @@ class AssembleMovie(WorkflowTaskBase, ABC):
|
|
|
225
225
|
)
|
|
226
226
|
|
|
227
227
|
background = Image.new("RGB", self.MOVIE_FRAME_SHAPE, (0, 0, 0))
|
|
228
|
-
frame_im = Image.fromarray(colored_image
|
|
228
|
+
frame_im = Image.fromarray(colored_image)
|
|
229
229
|
frame_im = frame_im.resize(self.MOVIE_FRAME_SHAPE, resample=Image.NEAREST)
|
|
230
230
|
background.paste(frame_im)
|
|
231
231
|
draw = ImageDraw.Draw(background)
|
|
@@ -439,36 +439,22 @@ class QualityL1Metrics(WorkflowTaskBase, QualityMixin):
|
|
|
439
439
|
fits_access_class=L1QualityFitsAccess,
|
|
440
440
|
)
|
|
441
441
|
|
|
442
|
-
#
|
|
443
|
-
|
|
444
|
-
(
|
|
445
|
-
(
|
|
446
|
-
# DATE-BEG
|
|
447
|
-
datetime.fromisoformat(frame.time_obs),
|
|
448
|
-
# LIGHTLVL
|
|
449
|
-
frame.light_level,
|
|
450
|
-
# DSHEALTH
|
|
451
|
-
frame.health_status,
|
|
452
|
-
# ATMOS_R0
|
|
453
|
-
frame.fried_parameter,
|
|
454
|
-
# AO_LOCK
|
|
455
|
-
frame.ao_status,
|
|
456
|
-
# OOBSHIFT
|
|
457
|
-
frame.num_out_of_bounds_ao_values,
|
|
458
|
-
)
|
|
459
|
-
for frame in frames
|
|
460
|
-
),
|
|
461
|
-
# DATE-BEG
|
|
462
|
-
key=lambda row: row[0],
|
|
463
|
-
)
|
|
442
|
+
# sort by datetime
|
|
443
|
+
sorted_frames = sorted(frames, key=lambda f: datetime.fromisoformat(f.time_obs))
|
|
464
444
|
|
|
465
445
|
return L1QualityData(
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
446
|
+
# DATE-BEG
|
|
447
|
+
datetimes=tuple(datetime.fromisoformat(f.time_obs) for f in sorted_frames),
|
|
448
|
+
# LIGHTLVL
|
|
449
|
+
light_level_values=tuple(f.light_level for f in sorted_frames),
|
|
450
|
+
# DSHEALTH
|
|
451
|
+
health_status_values=tuple(f.health_status for f in sorted_frames),
|
|
452
|
+
# ATMOS_R0
|
|
453
|
+
fried_parameter_values=tuple(f.fried_parameter for f in sorted_frames),
|
|
454
|
+
# AO_LOCK
|
|
455
|
+
ao_lock_values=tuple(f.ao_status for f in sorted_frames),
|
|
456
|
+
# OOBSHIFT
|
|
457
|
+
ao_oob_values=tuple(f.num_out_of_bounds_ao_values for f in sorted_frames),
|
|
472
458
|
)
|
|
473
459
|
|
|
474
460
|
def compute_and_write_l1_quality_metrics(self, l1_quality_data: L1QualityData) -> None:
|
|
@@ -575,19 +561,21 @@ class QualityL1Metrics(WorkflowTaskBase, QualityMixin):
|
|
|
575
561
|
rows.extend(tuple(z) for z in zip(statuses, counts))
|
|
576
562
|
table_data = TableData(rows=tuple(rows))
|
|
577
563
|
|
|
564
|
+
warnings = None
|
|
565
|
+
if any(s in statuses for s in ["bad", "ill", "unknown"]):
|
|
566
|
+
warnings = [
|
|
567
|
+
"Data sourced from components with a health status of 'ill', 'bad', or 'unknown'."
|
|
568
|
+
]
|
|
569
|
+
|
|
578
570
|
metric = QualityMetric(
|
|
579
571
|
name="Data Source Health",
|
|
580
572
|
description="This metric contains the worst health status of the data source during "
|
|
581
573
|
"data acquisition. One reading is taken per L1 frame.",
|
|
582
574
|
metric_code=MetricCode.health_status,
|
|
583
575
|
table_data=[table_data],
|
|
576
|
+
warnings=warnings,
|
|
584
577
|
)
|
|
585
578
|
|
|
586
|
-
if any(s in statuses for s in ["bad", "ill", "unknown"]):
|
|
587
|
-
metric.warnings = [
|
|
588
|
-
"Data sourced from components with a health status of 'ill', 'bad', or 'unknown'."
|
|
589
|
-
]
|
|
590
|
-
|
|
591
579
|
self.write(metric, tags=Tag.quality("GENERIC"), encoder=basemodel_encoder)
|
|
592
580
|
|
|
593
581
|
def compute_and_write_light_level(self, l1_quality_data: L1QualityData) -> None:
|
|
@@ -93,7 +93,7 @@ class CreateTrialDatasetInventory(OutputDataBase):
|
|
|
93
93
|
frame_inventory["_id"] = uuid4().hex
|
|
94
94
|
frame_inventory["bucket"] = self.destination_bucket
|
|
95
95
|
frame_inventory["frameStatus"] = "AVAILABLE"
|
|
96
|
-
frame_inventory["createDate"] = datetime.
|
|
96
|
+
frame_inventory["createDate"] = datetime.now().isoformat("T")
|
|
97
97
|
frame_inventory["updateDate"] = None
|
|
98
98
|
frame_inventory["lostDate"] = None
|
|
99
99
|
frame_inventory["headerHDU"] = 1
|
|
@@ -617,7 +617,7 @@ def visp_modulation_matrix() -> np.ndarray:
|
|
|
617
617
|
|
|
618
618
|
@pytest.fixture(scope="session")
|
|
619
619
|
def fully_realistic_local_cs(
|
|
620
|
-
cs_with_correct_geometry, visp_modulation_matrix, pac_fit_mode, pac_init_set
|
|
620
|
+
cs_with_correct_geometry, visp_modulation_matrix, pac_fit_mode, pac_init_set, cs_data_shape
|
|
621
621
|
):
|
|
622
622
|
|
|
623
623
|
cs_dict = cs_with_correct_geometry
|
|
@@ -643,7 +643,7 @@ def fully_realistic_local_cs(
|
|
|
643
643
|
# Now set the "observed" value for each of the input objects
|
|
644
644
|
for m in range(dresser.nummod):
|
|
645
645
|
for n in range(dresser.numsteps):
|
|
646
|
-
cs_dict[n][m].data
|
|
646
|
+
cs_dict[n][m].data = np.ones(cs_data_shape) * observed[m, n]
|
|
647
647
|
|
|
648
648
|
return cs_dict
|
|
649
649
|
|
|
@@ -454,11 +454,10 @@ def test_fits_array_encoder_header_preserved(ndarray_object, header_func: Callab
|
|
|
454
454
|
header = header_func(raw_header)
|
|
455
455
|
encoded_data = fits_array_encoder(data=ndarray_object, header=header)
|
|
456
456
|
bytes_reader = BytesIO(encoded_data)
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
assert hdul[0].header["KEY1"] == "VALUE1"
|
|
457
|
+
with fits.open(bytes_reader) as hdul:
|
|
458
|
+
assert len(hdul) == 1
|
|
459
|
+
np.testing.assert_equal(hdul[0].data, ndarray_object)
|
|
460
|
+
assert hdul[0].header["KEY1"] == "VALUE1"
|
|
462
461
|
|
|
463
462
|
|
|
464
463
|
@pytest.mark.parametrize(
|
|
@@ -584,13 +583,11 @@ def test_fits_header_decoder(path_fixture_name, request):
|
|
|
584
583
|
if init_num_fd is not None:
|
|
585
584
|
assert init_num_fd == post_num_fd
|
|
586
585
|
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
expected_header = hdul[
|
|
590
|
-
else:
|
|
591
|
-
expected_header = hdul[0].header
|
|
586
|
+
with fits.open(file_path, disable_image_compression=True) as hdul:
|
|
587
|
+
index = 1 if "compressed" in path_fixture_name else 0
|
|
588
|
+
expected_header = hdul[index].header
|
|
592
589
|
|
|
593
|
-
|
|
590
|
+
assert header == expected_header
|
|
594
591
|
|
|
595
592
|
|
|
596
593
|
@pytest.mark.parametrize(
|
|
@@ -342,7 +342,6 @@ def test_header_dict(hdu_with_special_keys):
|
|
|
342
342
|
[
|
|
343
343
|
pytest.param(dict, id="Dict"),
|
|
344
344
|
pytest.param(fits.header.Header, id="Header"),
|
|
345
|
-
pytest.param(fits.hdu.compressed.CompImageHeader, id="CompHeader"),
|
|
346
345
|
],
|
|
347
346
|
)
|
|
348
347
|
def test_from_header_naxis_preserved(header_type):
|
|
@@ -4,8 +4,9 @@ from typing import Type
|
|
|
4
4
|
from uuid import uuid4
|
|
5
5
|
|
|
6
6
|
import pytest
|
|
7
|
+
from pika import ConnectionParameters
|
|
8
|
+
from pika.credentials import PlainCredentials
|
|
7
9
|
from pydantic import BaseModel
|
|
8
|
-
from pydantic import Field
|
|
9
10
|
from talus import Binding
|
|
10
11
|
from talus import ConsumeMessageBase
|
|
11
12
|
from talus import DurableConsumer
|
|
@@ -15,6 +16,8 @@ from talus import MessageBodyBase
|
|
|
15
16
|
from talus import PublishMessageBase
|
|
16
17
|
from talus import Queue
|
|
17
18
|
|
|
19
|
+
from dkist_processing_common.config import common_configurations
|
|
20
|
+
|
|
18
21
|
|
|
19
22
|
@pytest.fixture
|
|
20
23
|
def sample_message_body():
|
|
@@ -59,19 +62,35 @@ def consume_message(sample_message):
|
|
|
59
62
|
|
|
60
63
|
|
|
61
64
|
@pytest.fixture
|
|
62
|
-
def
|
|
65
|
+
def connection_parameters() -> ConnectionParameters:
|
|
66
|
+
isb_username = common_configurations.isb_username
|
|
67
|
+
isb_password = common_configurations.isb_password
|
|
68
|
+
connection_parameters = ConnectionParameters(
|
|
69
|
+
credentials=PlainCredentials(isb_username, isb_password)
|
|
70
|
+
)
|
|
71
|
+
return connection_parameters
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
@pytest.fixture
|
|
75
|
+
def producer(sample_message, publish_message, connection_parameters):
|
|
63
76
|
exchange = sample_message.exchange
|
|
64
77
|
binding = Binding(queue=sample_message.queue, message=publish_message)
|
|
65
|
-
with DurableProducer(
|
|
78
|
+
with DurableProducer(
|
|
79
|
+
queue_bindings=binding,
|
|
80
|
+
publish_exchange=exchange,
|
|
81
|
+
connection_parameters=connection_parameters,
|
|
82
|
+
) as p:
|
|
66
83
|
yield p
|
|
67
84
|
p.channel.queue_delete(queue=sample_message.queue.name)
|
|
68
85
|
p.channel.exchange_delete(exchange=sample_message.exchange.name)
|
|
69
86
|
|
|
70
87
|
|
|
71
88
|
@pytest.fixture
|
|
72
|
-
def consumer(sample_message):
|
|
89
|
+
def consumer(sample_message, connection_parameters):
|
|
73
90
|
queue = sample_message.queue
|
|
74
|
-
with DurableConsumer(
|
|
91
|
+
with DurableConsumer(
|
|
92
|
+
consume_queue=queue, prefetch_count=100, connection_parameters=connection_parameters
|
|
93
|
+
) as c:
|
|
75
94
|
yield c
|
|
76
95
|
c.channel.queue_delete(queue=sample_message.queue.name)
|
|
77
96
|
c.channel.exchange_delete(exchange=sample_message.exchange.name)
|
|
@@ -5,6 +5,8 @@ from typing import Dict
|
|
|
5
5
|
from typing import Type
|
|
6
6
|
|
|
7
7
|
import pytest
|
|
8
|
+
from pika import ConnectionParameters
|
|
9
|
+
from pika.credentials import PlainCredentials
|
|
8
10
|
from pydantic import BaseModel
|
|
9
11
|
from talus import ConsumeMessageBase
|
|
10
12
|
from talus import DurableConsumer
|
|
@@ -77,9 +79,21 @@ def consume_message(task_message):
|
|
|
77
79
|
|
|
78
80
|
|
|
79
81
|
@pytest.fixture
|
|
80
|
-
def
|
|
82
|
+
def connection_parameters() -> ConnectionParameters:
|
|
83
|
+
isb_username = common_configurations.isb_username
|
|
84
|
+
isb_password = common_configurations.isb_password
|
|
85
|
+
connection_parameters = ConnectionParameters(
|
|
86
|
+
credentials=PlainCredentials(isb_username, isb_password)
|
|
87
|
+
)
|
|
88
|
+
return connection_parameters
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
@pytest.fixture
|
|
92
|
+
def consumer(task_message, connection_parameters):
|
|
81
93
|
queue = task_message.queue
|
|
82
|
-
with DurableConsumer(
|
|
94
|
+
with DurableConsumer(
|
|
95
|
+
consume_queue=queue, prefetch_count=100, connection_parameters=connection_parameters
|
|
96
|
+
) as c:
|
|
83
97
|
yield c
|
|
84
98
|
# Clean up all the queues, skipping queues that are not empty:
|
|
85
99
|
for binding in common_message_queue_bindings:
|
|
@@ -737,9 +737,9 @@ def test_ao_status(quality_l1_task_with_calibrated_frames: QualityL1Metrics):
|
|
|
737
737
|
# Then
|
|
738
738
|
metric_code = "AO_STATUS"
|
|
739
739
|
tags = [Tag.quality("GENERIC")]
|
|
740
|
-
metrics =
|
|
741
|
-
|
|
742
|
-
|
|
740
|
+
metrics: list[QualityMetric] = list(
|
|
741
|
+
task.read(tags=tags, decoder=basemodel_decoder, model=QualityMetric)
|
|
742
|
+
)
|
|
743
743
|
assert len([metric for metric in metrics if metric.metric_code in metric_code]) == 1
|
|
744
744
|
for metric in metrics:
|
|
745
745
|
if metric.metric_code != metric_code:
|
|
@@ -772,9 +772,9 @@ def test_fried_parameter(
|
|
|
772
772
|
# Then
|
|
773
773
|
metric_code = "FRIED_PARAMETER"
|
|
774
774
|
tags = [Tag.quality("GENERIC")]
|
|
775
|
-
metrics =
|
|
776
|
-
|
|
777
|
-
|
|
775
|
+
metrics: list[QualityMetric] = list(
|
|
776
|
+
task.read(tags=tags, decoder=basemodel_decoder, model=QualityMetric)
|
|
777
|
+
)
|
|
778
778
|
assert len([metric for metric in metrics if metric.metric_code in metric_code]) == 1
|
|
779
779
|
for metric in metrics:
|
|
780
780
|
if metric.metric_code != metric_code:
|
|
@@ -823,9 +823,9 @@ def test_health_status(quality_l1_task_with_calibrated_frames: QualityL1Metrics)
|
|
|
823
823
|
# Then
|
|
824
824
|
metric_code = "HEALTH_STATUS"
|
|
825
825
|
tags = [Tag.quality("GENERIC")]
|
|
826
|
-
metrics =
|
|
827
|
-
|
|
828
|
-
|
|
826
|
+
metrics: list[QualityMetric] = list(
|
|
827
|
+
task.read(tags=tags, decoder=basemodel_decoder, model=QualityMetric)
|
|
828
|
+
)
|
|
829
829
|
assert len([metric for metric in metrics if metric.metric_code in metric_code]) == 1
|
|
830
830
|
for metric in metrics:
|
|
831
831
|
if metric.metric_code != metric_code:
|
|
@@ -867,9 +867,9 @@ def test_light_level(
|
|
|
867
867
|
# Then
|
|
868
868
|
metric_code = "LIGHT_LEVEL"
|
|
869
869
|
tags = [Tag.quality("GENERIC")]
|
|
870
|
-
metrics =
|
|
871
|
-
|
|
872
|
-
|
|
870
|
+
metrics: list[QualityMetric] = list(
|
|
871
|
+
task.read(tags=tags, decoder=basemodel_decoder, model=QualityMetric)
|
|
872
|
+
)
|
|
873
873
|
assert len([metric for metric in metrics if metric.metric_code in metric_code]) == 1
|
|
874
874
|
for metric in metrics:
|
|
875
875
|
if metric.metric_code != metric_code:
|
|
@@ -919,9 +919,9 @@ def test_compute_and_write_ao_status(
|
|
|
919
919
|
task.compute_and_write_ao_status(l1_quality_data)
|
|
920
920
|
# Then
|
|
921
921
|
tags = [Tag.quality("GENERIC")]
|
|
922
|
-
metrics: list[QualityMetric] =
|
|
923
|
-
|
|
924
|
-
|
|
922
|
+
metrics: list[QualityMetric] = list(
|
|
923
|
+
task.read(tags=tags, decoder=basemodel_decoder, model=QualityMetric)
|
|
924
|
+
)
|
|
925
925
|
assert len(metrics) == 1
|
|
926
926
|
metric = metrics[0]
|
|
927
927
|
# basics
|
|
@@ -956,9 +956,9 @@ def test_compute_and_write_fried_parameter(
|
|
|
956
956
|
task.compute_and_write_fried_parameter(l1_quality_data)
|
|
957
957
|
# Then
|
|
958
958
|
tags = [Tag.quality("GENERIC")]
|
|
959
|
-
metrics: list[QualityMetric] =
|
|
960
|
-
|
|
961
|
-
|
|
959
|
+
metrics: list[QualityMetric] = list(
|
|
960
|
+
task.read(tags=tags, decoder=basemodel_decoder, model=QualityMetric)
|
|
961
|
+
)
|
|
962
962
|
assert len(metrics) == 1
|
|
963
963
|
metric = metrics[0]
|
|
964
964
|
# basics
|
|
@@ -1013,9 +1013,9 @@ def test_compute_and_write_health_status(
|
|
|
1013
1013
|
task.compute_and_write_health_status(l1_quality_data)
|
|
1014
1014
|
# Then
|
|
1015
1015
|
tags = [Tag.quality("GENERIC")]
|
|
1016
|
-
metrics: list[QualityMetric] =
|
|
1017
|
-
|
|
1018
|
-
|
|
1016
|
+
metrics: list[QualityMetric] = list(
|
|
1017
|
+
task.read(tags=tags, decoder=basemodel_decoder, model=QualityMetric)
|
|
1018
|
+
)
|
|
1019
1019
|
assert len(metrics) == 1
|
|
1020
1020
|
metric = metrics[0]
|
|
1021
1021
|
# basics
|
|
@@ -1069,9 +1069,9 @@ def test_compute_and_write_light_level(
|
|
|
1069
1069
|
task.compute_and_write_light_level(l1_quality_data)
|
|
1070
1070
|
# Then
|
|
1071
1071
|
tags = [Tag.quality("GENERIC")]
|
|
1072
|
-
metrics: list[QualityMetric] =
|
|
1073
|
-
|
|
1074
|
-
|
|
1072
|
+
metrics: list[QualityMetric] = list(
|
|
1073
|
+
task.read(tags=tags, decoder=basemodel_decoder, model=QualityMetric)
|
|
1074
|
+
)
|
|
1075
1075
|
assert len(metrics) == 1
|
|
1076
1076
|
metric = metrics[0]
|
|
1077
1077
|
# basics
|
|
@@ -1122,7 +1122,7 @@ def test_no_calibration_frames_no_l1_metrics(quality_l1_task_no_scratch_data: Qu
|
|
|
1122
1122
|
task()
|
|
1123
1123
|
# Then
|
|
1124
1124
|
tags = [Tag.quality("GENERIC")]
|
|
1125
|
-
metrics =
|
|
1126
|
-
|
|
1127
|
-
|
|
1125
|
+
metrics: list[QualityMetric] = list(
|
|
1126
|
+
task.read(tags=tags, decoder=basemodel_decoder, model=QualityMetric)
|
|
1127
|
+
)
|
|
1128
1128
|
assert len(metrics) == 0
|
|
@@ -1074,8 +1074,8 @@ def test_validate_vertical_multi_pane_plot_model():
|
|
|
1074
1074
|
# Test invalid case
|
|
1075
1075
|
with pytest.raises(
|
|
1076
1076
|
ValidationError,
|
|
1077
|
-
match="The number of items in `top_to_bottom_height_ratios` list \(3\) is not "
|
|
1078
|
-
"the same as the number of plots \(2\)",
|
|
1077
|
+
match=r"The number of items in `top_to_bottom_height_ratios` list \(3\) is not "
|
|
1078
|
+
r"the same as the number of plots \(2\)",
|
|
1079
1079
|
):
|
|
1080
1080
|
_ = VerticalMultiPanePlot2D(
|
|
1081
1081
|
top_to_bottom_plot_list=[plot2d, plot2d], top_to_bottom_height_ratios=[1.0, 2.0, 3.0]
|
|
@@ -445,17 +445,18 @@ def test_solarnet_keys(write_l1_task, mocker, fake_gql_client):
|
|
|
445
445
|
task()
|
|
446
446
|
files = list(task.read(tags=[Tag.frame(), Tag.output()]))
|
|
447
447
|
for file in files:
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
448
|
+
with fits.open(file) as hdu:
|
|
449
|
+
header = hdu[1].header
|
|
450
|
+
assert header["DATEREF"] == header["DATE-BEG"]
|
|
451
|
+
assert round(header["OBSGEO-X"]) == -5466045
|
|
452
|
+
assert round(header["OBSGEO-Y"]) == -2404389
|
|
453
|
+
assert round(header["OBSGEO-Z"]) == 2242134
|
|
454
|
+
assert header["SOLARRAD"] == 975.58
|
|
455
|
+
assert header["SPECSYS"] == "TOPOCENT"
|
|
456
|
+
assert header["VELOSYS"] == 0.0
|
|
457
|
+
assert header["WAVEBAND"] == "Fe XIII (1079.8 nm)"
|
|
458
|
+
assert header["WAVEMIN"] == 1075.0
|
|
459
|
+
assert header["WAVEMAX"] == 1085.0
|
|
459
460
|
|
|
460
461
|
|
|
461
462
|
def test_documentation_keys(write_l1_task, mocker, fake_gql_client):
|
|
@@ -477,18 +478,20 @@ def test_documentation_keys(write_l1_task, mocker, fake_gql_client):
|
|
|
477
478
|
task()
|
|
478
479
|
files = list(task.read(tags=[Tag.frame(), Tag.output()]))
|
|
479
480
|
for file in files:
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
header["
|
|
490
|
-
|
|
491
|
-
|
|
481
|
+
with fits.open(file) as hdu:
|
|
482
|
+
header = hdu[1].header
|
|
483
|
+
assert header["INFO_URL"] == task.docs_base_url
|
|
484
|
+
assert header["HEADVERS"] == spec_version
|
|
485
|
+
assert (
|
|
486
|
+
header["HEAD_URL"]
|
|
487
|
+
== f"{task.docs_base_url}/projects/data-products/en/v{spec_version}"
|
|
488
|
+
)
|
|
489
|
+
calvers = task.version_from_module_name()
|
|
490
|
+
assert header["CALVERS"] == calvers
|
|
491
|
+
assert (
|
|
492
|
+
header["CAL_URL"]
|
|
493
|
+
== f"{task.docs_base_url}/projects/{task.constants.instrument.lower()}/en/v{calvers}/{task.workflow_name}.html"
|
|
494
|
+
)
|
|
492
495
|
|
|
493
496
|
|
|
494
497
|
def test_get_version_from_module(write_l1_task):
|
|
@@ -519,13 +522,13 @@ def test_rice_compression_with_specified_tile_size(write_l1_task, mocker, fake_g
|
|
|
519
522
|
task()
|
|
520
523
|
files = list(task.read(tags=[Tag.frame(), Tag.output()]))
|
|
521
524
|
for file in files:
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
525
|
+
with fits.open(file) as hdul:
|
|
526
|
+
bintable = hdul[1]._get_bintable_without_data()
|
|
527
|
+
comp_header = bintable.header
|
|
528
|
+
data_shape = list(hdul[1].data.shape)
|
|
529
|
+
data_shape.reverse()
|
|
530
|
+
for i, dim in enumerate(data_shape):
|
|
531
|
+
assert comp_header["ZTILE" + str(i + 1)] == min(dim, TILE_SIZE)
|
|
529
532
|
|
|
530
533
|
|
|
531
534
|
def test_rice_compression_with_default_tile_size(
|
|
@@ -547,14 +550,14 @@ def test_rice_compression_with_default_tile_size(
|
|
|
547
550
|
assert task.tile_size_param == None
|
|
548
551
|
files = list(task.read(tags=[Tag.frame(), Tag.output()]))
|
|
549
552
|
for file in files:
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
553
|
+
with fits.open(file) as hdul:
|
|
554
|
+
bintable = hdul[1]._get_bintable_without_data()
|
|
555
|
+
comp_header = bintable.header
|
|
556
|
+
data_shape = list(hdul[1].data.shape)
|
|
557
|
+
data_shape.reverse()
|
|
558
|
+
assert comp_header["ZTILE1"] == data_shape[0]
|
|
559
|
+
assert comp_header["ZTILE2"] == 128
|
|
560
|
+
assert comp_header["ZTILE3"] == 1
|
|
558
561
|
|
|
559
562
|
|
|
560
563
|
def test_reprocessing_keys(write_l1_task, mocker, fake_gql_client):
|
|
@@ -571,20 +574,26 @@ def test_reprocessing_keys(write_l1_task, mocker, fake_gql_client):
|
|
|
571
574
|
task()
|
|
572
575
|
files = list(task.read(tags=[Tag.frame(), Tag.output()]))
|
|
573
576
|
for file in files:
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
577
|
+
with fits.open(file) as hdu:
|
|
578
|
+
header = hdu[1].header
|
|
579
|
+
assert (
|
|
580
|
+
header["IDSPARID"]
|
|
581
|
+
== task.metadata_store_input_dataset_parameters.inputDatasetPartId
|
|
582
|
+
)
|
|
583
|
+
assert (
|
|
584
|
+
header["IDSOBSID"]
|
|
585
|
+
== task.metadata_store_input_dataset_observe_frames.inputDatasetPartId
|
|
586
|
+
)
|
|
587
|
+
assert (
|
|
588
|
+
header["IDSCALID"]
|
|
589
|
+
== task.metadata_store_input_dataset_calibration_frames.inputDatasetPartId
|
|
590
|
+
)
|
|
591
|
+
assert header["WKFLNAME"] == task.workflow_name
|
|
592
|
+
assert header["WKFLVERS"] == task.workflow_version
|
|
593
|
+
assert header["PROCTYPE"] == "L1"
|
|
594
|
+
assert header["PRODUCT"] == task.compute_product_id(
|
|
595
|
+
header["IDSOBSID"], header["PROCTYPE"]
|
|
596
|
+
)
|
|
588
597
|
|
|
589
598
|
|
|
590
599
|
def test_missing_input_dataset_part(
|
|
@@ -603,13 +612,17 @@ def test_missing_input_dataset_part(
|
|
|
603
612
|
task()
|
|
604
613
|
files = list(task.read(tags=[Tag.frame(), Tag.output()]))
|
|
605
614
|
for file in files:
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
615
|
+
with fits.open(file) as hdu:
|
|
616
|
+
header = hdu[1].header
|
|
617
|
+
assert (
|
|
618
|
+
header["IDSPARID"]
|
|
619
|
+
== task.metadata_store_input_dataset_parameters.inputDatasetPartId
|
|
620
|
+
)
|
|
621
|
+
assert (
|
|
622
|
+
header["IDSOBSID"]
|
|
623
|
+
== task.metadata_store_input_dataset_observe_frames.inputDatasetPartId
|
|
624
|
+
)
|
|
625
|
+
assert "IDSCALID" not in header
|
|
613
626
|
|
|
614
627
|
|
|
615
628
|
@pytest.mark.parametrize(
|
|
@@ -757,8 +770,9 @@ def test_empty_waveband(write_l1_task_with_empty_waveband, mocker, fake_gql_clie
|
|
|
757
770
|
task()
|
|
758
771
|
files = list(task.read(tags=[Tag.frame(), Tag.output()]))
|
|
759
772
|
for file in files:
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
773
|
+
with fits.open(file) as hdu:
|
|
774
|
+
header = hdu[1].header
|
|
775
|
+
assert header["WAVEMIN"] == 10000
|
|
776
|
+
assert header["WAVEMAX"] == 10050
|
|
777
|
+
with pytest.raises(KeyError):
|
|
778
|
+
header["WAVEBAND"]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dkist-processing-common
|
|
3
|
-
Version: 13.0.
|
|
3
|
+
Version: 13.0.4
|
|
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,7 +17,7 @@ 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.24.0
|
|
19
19
|
Requires-Dist: dkist-header-validator<6.0,>=5.3.0
|
|
20
|
-
Requires-Dist: dkist-processing-core==7.1
|
|
20
|
+
Requires-Dist: dkist-processing-core==7.2.1
|
|
21
21
|
Requires-Dist: dkist-processing-pac<4.0,>=3.1
|
|
22
22
|
Requires-Dist: dkist-service-configuration<5.0,>=4.3.0
|
|
23
23
|
Requires-Dist: dkist-spectral-lines<4.0,>=3.0.0
|