dkist-processing-test 1.42.18__tar.gz → 1.43.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/PKG-INFO +59 -56
  2. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test/tasks/__init__.py +1 -0
  3. dkist_processing_test-1.43.0/dkist_processing_test/tasks/exercise_multiprocessing.py +59 -0
  4. dkist_processing_test-1.43.0/dkist_processing_test/tests/test_workflows.py +17 -0
  5. dkist_processing_test-1.43.0/dkist_processing_test/workflows/exercise_multiprocessing.py +19 -0
  6. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test.egg-info/PKG-INFO +59 -56
  7. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test.egg-info/SOURCES.txt +2 -0
  8. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test.egg-info/requires.txt +58 -55
  9. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test.egg-info/scm_file_list.json +24 -22
  10. dkist_processing_test-1.43.0/dkist_processing_test.egg-info/scm_version.json +8 -0
  11. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/pyproject.toml +60 -57
  12. dkist_processing_test-1.42.18/dkist_processing_test/tests/test_workflows.py +0 -10
  13. dkist_processing_test-1.42.18/dkist_processing_test.egg-info/scm_version.json +0 -8
  14. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/.gitignore +0 -0
  15. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/.pre-commit-config.yaml +0 -0
  16. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/.rovodev/.review-agent.md +0 -0
  17. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/.snyk +0 -0
  18. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/README.rst +0 -0
  19. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/bitbucket-pipelines.yml +0 -0
  20. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test/__init__.py +0 -0
  21. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test/config.py +0 -0
  22. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test/models/__init__.py +0 -0
  23. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test/models/constants.py +0 -0
  24. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test/models/parameters.py +0 -0
  25. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test/parsers/__init__.py +0 -0
  26. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test/parsers/test_l0_fits_access.py +0 -0
  27. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test/parsers/time.py +0 -0
  28. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test/tasks/construct_dataset_extras.py +0 -0
  29. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test/tasks/exercise_numba.py +0 -0
  30. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test/tasks/fail.py +0 -0
  31. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test/tasks/fake_science.py +0 -0
  32. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test/tasks/high_memory.py +0 -0
  33. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test/tasks/manual.py +0 -0
  34. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test/tasks/movie.py +0 -0
  35. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test/tasks/noop.py +0 -0
  36. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test/tasks/parse.py +0 -0
  37. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test/tasks/quality.py +0 -0
  38. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test/tasks/write_l1.py +0 -0
  39. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test/tests/__init__.py +0 -0
  40. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test/tests/conftest.py +0 -0
  41. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test/tests/test_tasks.py +0 -0
  42. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test/workflows/__init__.py +0 -0
  43. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test/workflows/common_tasks.py +0 -0
  44. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test/workflows/end_to_end.py +0 -0
  45. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test/workflows/exercise_numba.py +0 -0
  46. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test/workflows/fail.py +0 -0
  47. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test/workflows/noop.py +0 -0
  48. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test/workflows/resource_queue.py +0 -0
  49. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test/workflows/trial_end_to_end.py +0 -0
  50. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test.egg-info/dependency_links.txt +0 -0
  51. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/dkist_processing_test.egg-info/top_level.txt +0 -0
  52. {dkist_processing_test-1.42.18 → dkist_processing_test-1.43.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dkist-processing-test
3
- Version: 1.42.18
3
+ Version: 1.43.0
4
4
  Summary: Example instrument code used by the DKIST science data processing pipelines to test processing infrastructure
5
5
  Author-email: NSO / AURA <dkistdc@nso.edu>
6
6
  License: BSD-3-Clause
@@ -12,7 +12,7 @@ Classifier: Programming Language :: Python :: 3
12
12
  Classifier: Programming Language :: Python :: 3.13
13
13
  Requires-Python: >=3.13
14
14
  Description-Content-Type: text/x-rst
15
- Requires-Dist: dkist-processing-common==14.3.4
15
+ Requires-Dist: dkist-processing-common==14.3.5
16
16
  Requires-Dist: dkist-header-validator==5.4.0
17
17
  Requires-Dist: dkist-service-configuration==4.3.0
18
18
  Requires-Dist: dkist-fits-specifications==4.28.0
@@ -41,7 +41,7 @@ Provides-Extra: frozen
41
41
  Requires-Dist: Deprecated==1.3.1; extra == "frozen"
42
42
  Requires-Dist: ImageIO==2.37.4; extra == "frozen"
43
43
  Requires-Dist: Jinja2==3.1.6; extra == "frozen"
44
- Requires-Dist: Mako==1.3.12; extra == "frozen"
44
+ Requires-Dist: Mako==1.4.1; extra == "frozen"
45
45
  Requires-Dist: MarkupSafe==3.0.3; extra == "frozen"
46
46
  Requires-Dist: PyJWT==2.13.0; extra == "frozen"
47
47
  Requires-Dist: PyYAML==6.0.3; extra == "frozen"
@@ -50,28 +50,29 @@ Requires-Dist: Pygments==2.20.0; extra == "frozen"
50
50
  Requires-Dist: SQLAlchemy==2.0.51; extra == "frozen"
51
51
  Requires-Dist: Send2Trash==2.1.0; extra == "frozen"
52
52
  Requires-Dist: a2wsgi==1.10.10; extra == "frozen"
53
- Requires-Dist: aioftp==0.27.2; extra == "frozen"
53
+ Requires-Dist: aioftp==0.28.0; extra == "frozen"
54
54
  Requires-Dist: aiohappyeyeballs==2.7.1; extra == "frozen"
55
- Requires-Dist: aiohttp==3.14.2; extra == "frozen"
55
+ Requires-Dist: aiohttp==3.14.3; extra == "frozen"
56
56
  Requires-Dist: aiosignal==1.4.0; extra == "frozen"
57
57
  Requires-Dist: aiosmtplib==5.1.2; extra == "frozen"
58
58
  Requires-Dist: aiosqlite==0.21.0; extra == "frozen"
59
- Requires-Dist: alembic==1.18.5; extra == "frozen"
59
+ Requires-Dist: alembic==1.19.1; extra == "frozen"
60
60
  Requires-Dist: amqp==5.3.1; extra == "frozen"
61
- Requires-Dist: annotated-doc==0.0.4; extra == "frozen"
62
- Requires-Dist: annotated-types==0.7.0; extra == "frozen"
61
+ Requires-Dist: annotated-doc==0.0.5; extra == "frozen"
62
+ Requires-Dist: annotated-types==0.8.0; extra == "frozen"
63
63
  Requires-Dist: anyio==4.14.2; extra == "frozen"
64
64
  Requires-Dist: apache-airflow==3.2.1; extra == "frozen"
65
65
  Requires-Dist: apache-airflow-core==3.2.1; extra == "frozen"
66
- Requires-Dist: apache-airflow-providers-celery==3.22.0; extra == "frozen"
67
- Requires-Dist: apache-airflow-providers-common-compat==1.16.0; extra == "frozen"
66
+ Requires-Dist: apache-airflow-providers-celery==3.23.1; extra == "frozen"
67
+ Requires-Dist: apache-airflow-providers-common-compat==1.18.0; extra == "frozen"
68
68
  Requires-Dist: apache-airflow-providers-common-io==1.8.0; extra == "frozen"
69
- Requires-Dist: apache-airflow-providers-common-sql==2.0.2; extra == "frozen"
70
- Requires-Dist: apache-airflow-providers-postgres==6.8.0; extra == "frozen"
71
- Requires-Dist: apache-airflow-providers-smtp==3.0.2; extra == "frozen"
72
- Requires-Dist: apache-airflow-providers-standard==1.16.0; extra == "frozen"
69
+ Requires-Dist: apache-airflow-providers-common-sql==2.1.0; extra == "frozen"
70
+ Requires-Dist: apache-airflow-providers-postgres==7.0.1; extra == "frozen"
71
+ Requires-Dist: apache-airflow-providers-smtp==3.0.3; extra == "frozen"
72
+ Requires-Dist: apache-airflow-providers-standard==1.17.0; extra == "frozen"
73
73
  Requires-Dist: apache-airflow-task-sdk==1.2.1; extra == "frozen"
74
- Requires-Dist: argcomplete==3.7.0; extra == "frozen"
74
+ Requires-Dist: appnope==0.1.4; extra == "frozen"
75
+ Requires-Dist: argcomplete==3.7.2; extra == "frozen"
75
76
  Requires-Dist: argon2-cffi==25.1.0; extra == "frozen"
76
77
  Requires-Dist: argon2-cffi-bindings==25.1.0; extra == "frozen"
77
78
  Requires-Dist: arrow==1.4.0; extra == "frozen"
@@ -80,7 +81,7 @@ Requires-Dist: asdf_standard==1.5.0; extra == "frozen"
80
81
  Requires-Dist: asgiref==3.12.1; extra == "frozen"
81
82
  Requires-Dist: asteval==1.0.9; extra == "frozen"
82
83
  Requires-Dist: astropy==7.0.2; extra == "frozen"
83
- Requires-Dist: astropy-iers-data==0.2026.7.20.15.31.18; extra == "frozen"
84
+ Requires-Dist: astropy-iers-data==0.2026.8.10.0.32.39; extra == "frozen"
84
85
  Requires-Dist: asttokens==3.0.2; extra == "frozen"
85
86
  Requires-Dist: async-lru==2.3.0; extra == "frozen"
86
87
  Requires-Dist: asyncpg==0.31.0; extra == "frozen"
@@ -89,53 +90,53 @@ Requires-Dist: babel==2.18.0; extra == "frozen"
89
90
  Requires-Dist: beautifulsoup4==4.15.0; extra == "frozen"
90
91
  Requires-Dist: billiard==4.2.4; extra == "frozen"
91
92
  Requires-Dist: bleach==6.4.0; extra == "frozen"
92
- Requires-Dist: boto3==1.43.53; extra == "frozen"
93
- Requires-Dist: botocore==1.43.53; extra == "frozen"
94
- Requires-Dist: cadwyn==7.1.1; extra == "frozen"
93
+ Requires-Dist: boto3==1.43.68; extra == "frozen"
94
+ Requires-Dist: botocore==1.43.68; extra == "frozen"
95
+ Requires-Dist: cadwyn==7.2.0; extra == "frozen"
95
96
  Requires-Dist: celery==5.6.3; extra == "frozen"
96
97
  Requires-Dist: certifi==2026.7.22; extra == "frozen"
97
- Requires-Dist: cffi==2.1.0; extra == "frozen"
98
+ Requires-Dist: cffi==2.1.1; extra == "frozen"
98
99
  Requires-Dist: charset-normalizer==3.4.9; extra == "frozen"
99
100
  Requires-Dist: click==8.4.2; extra == "frozen"
100
101
  Requires-Dist: click-didyoumean==0.3.1; extra == "frozen"
101
102
  Requires-Dist: click-plugins==1.1.1.2; extra == "frozen"
102
103
  Requires-Dist: click-repl==0.3.0; extra == "frozen"
103
- Requires-Dist: colorlog==6.11.0; extra == "frozen"
104
+ Requires-Dist: colorlog==6.12.0; extra == "frozen"
104
105
  Requires-Dist: comm==0.2.3; extra == "frozen"
105
106
  Requires-Dist: contourpy==1.3.3; extra == "frozen"
106
107
  Requires-Dist: cron_descriptor==2.1.0; extra == "frozen"
107
108
  Requires-Dist: croniter==6.2.4; extra == "frozen"
108
- Requires-Dist: cryptography==49.0.0; extra == "frozen"
109
+ Requires-Dist: cryptography==50.0.0; extra == "frozen"
109
110
  Requires-Dist: cycler==0.12.1; extra == "frozen"
110
111
  Requires-Dist: debugpy==1.8.21; extra == "frozen"
111
112
  Requires-Dist: decorator==5.3.1; extra == "frozen"
112
113
  Requires-Dist: defusedxml==0.7.1; extra == "frozen"
113
114
  Requires-Dist: dill==0.4.1; extra == "frozen"
114
115
  Requires-Dist: dkist-header-validator==5.4.0; extra == "frozen"
115
- Requires-Dist: dkist-processing-common==14.3.4; extra == "frozen"
116
- Requires-Dist: dkist-processing-core==7.3.0; extra == "frozen"
116
+ Requires-Dist: dkist-processing-common==14.3.5; extra == "frozen"
117
+ Requires-Dist: dkist-processing-core==7.4.0; extra == "frozen"
117
118
  Requires-Dist: dkist-processing-pac==3.1.2; extra == "frozen"
118
- Requires-Dist: dkist-processing-test==1.42.18; extra == "frozen"
119
+ Requires-Dist: dkist-processing-test==1.43.0; extra == "frozen"
119
120
  Requires-Dist: dkist-service-configuration==4.3.0; extra == "frozen"
120
121
  Requires-Dist: dkist-spectral-lines==3.0.1; extra == "frozen"
121
122
  Requires-Dist: dkist_fits_specifications==4.28.0; extra == "frozen"
122
123
  Requires-Dist: dnspython==2.8.0; extra == "frozen"
123
124
  Requires-Dist: email-validator==2.3.0; extra == "frozen"
124
125
  Requires-Dist: executing==2.2.1; extra == "frozen"
125
- Requires-Dist: fastapi==0.139.2; extra == "frozen"
126
+ Requires-Dist: fastapi==0.141.1; extra == "frozen"
126
127
  Requires-Dist: fastapi-cli==0.0.32; extra == "frozen"
127
- Requires-Dist: fastjsonschema==2.21.2; extra == "frozen"
128
+ Requires-Dist: fastjsonschema==2.22.1; extra == "frozen"
128
129
  Requires-Dist: flower==2.0.1; extra == "frozen"
129
130
  Requires-Dist: fonttools==4.63.0; extra == "frozen"
130
131
  Requires-Dist: fqdn==1.5.1; extra == "frozen"
131
132
  Requires-Dist: frozenlist==1.8.0; extra == "frozen"
132
- Requires-Dist: fsspec==2026.6.0; extra == "frozen"
133
- Requires-Dist: globus-sdk==4.8.1; extra == "frozen"
134
- Requires-Dist: googleapis-common-protos==1.75.0; extra == "frozen"
133
+ Requires-Dist: fsspec==2026.7.0; extra == "frozen"
134
+ Requires-Dist: globus-sdk==4.9.0; extra == "frozen"
135
+ Requires-Dist: googleapis-common-protos==1.75.1; extra == "frozen"
135
136
  Requires-Dist: gqlclient==2.0.0; extra == "frozen"
136
137
  Requires-Dist: greenback==1.3.0; extra == "frozen"
137
- Requires-Dist: greenlet==3.5.4; extra == "frozen"
138
- Requires-Dist: grpcio==1.82.1; extra == "frozen"
138
+ Requires-Dist: greenlet==3.5.5; extra == "frozen"
139
+ Requires-Dist: grpcio==1.83.0; extra == "frozen"
139
140
  Requires-Dist: h11==0.16.0; extra == "frozen"
140
141
  Requires-Dist: httpcore==1.0.9; extra == "frozen"
141
142
  Requires-Dist: httptools==0.8.0; extra == "frozen"
@@ -145,7 +146,7 @@ Requires-Dist: idna==3.18; extra == "frozen"
145
146
  Requires-Dist: imageio-ffmpeg==0.6.0; extra == "frozen"
146
147
  Requires-Dist: importlib_metadata==9.0.0; extra == "frozen"
147
148
  Requires-Dist: ipykernel==7.3.0; extra == "frozen"
148
- Requires-Dist: ipython==9.15.0; extra == "frozen"
149
+ Requires-Dist: ipython==9.16.1; extra == "frozen"
149
150
  Requires-Dist: ipython_pygments_lexers==1.1.1; extra == "frozen"
150
151
  Requires-Dist: isoduration==20.11.0; extra == "frozen"
151
152
  Requires-Dist: itsdangerous==2.2.0; extra == "frozen"
@@ -157,19 +158,19 @@ Requires-Dist: jsonschema==4.26.0; extra == "frozen"
157
158
  Requires-Dist: jsonschema-specifications==2025.9.1; extra == "frozen"
158
159
  Requires-Dist: jupyter-events==0.12.1; extra == "frozen"
159
160
  Requires-Dist: jupyter-lsp==2.3.1; extra == "frozen"
160
- Requires-Dist: jupyter_builder==1.1.1; extra == "frozen"
161
+ Requires-Dist: jupyter_builder==1.2.2; extra == "frozen"
161
162
  Requires-Dist: jupyter_client==8.9.1; extra == "frozen"
162
163
  Requires-Dist: jupyter_core==5.9.1; extra == "frozen"
163
164
  Requires-Dist: jupyter_server==2.20.0; extra == "frozen"
164
165
  Requires-Dist: jupyter_server_terminals==0.5.4; extra == "frozen"
165
- Requires-Dist: jupyterlab==4.6.2; extra == "frozen"
166
+ Requires-Dist: jupyterlab==4.6.3; extra == "frozen"
166
167
  Requires-Dist: jupyterlab_pygments==0.3.0; extra == "frozen"
167
168
  Requires-Dist: jupyterlab_server==2.28.0; extra == "frozen"
168
169
  Requires-Dist: kiwisolver==1.5.0; extra == "frozen"
169
170
  Requires-Dist: kombu==5.6.2; extra == "frozen"
170
171
  Requires-Dist: lark==1.3.1; extra == "frozen"
171
172
  Requires-Dist: lazy-object-proxy==1.12.0; extra == "frozen"
172
- Requires-Dist: libcst==1.8.6; extra == "frozen"
173
+ Requires-Dist: libcst==1.9.0; extra == "frozen"
173
174
  Requires-Dist: linkify-it-py==2.1.0; extra == "frozen"
174
175
  Requires-Dist: llvmlite==0.44.0; extra == "frozen"
175
176
  Requires-Dist: lmfit==1.3.4; extra == "frozen"
@@ -188,7 +189,7 @@ Requires-Dist: multidict==6.7.1; extra == "frozen"
188
189
  Requires-Dist: natsort==8.4.0; extra == "frozen"
189
190
  Requires-Dist: nbclient==0.11.0; extra == "frozen"
190
191
  Requires-Dist: nbconvert==7.17.1; extra == "frozen"
191
- Requires-Dist: nbformat==5.10.4; extra == "frozen"
192
+ Requires-Dist: nbformat==5.11.0; extra == "frozen"
192
193
  Requires-Dist: nest-asyncio2==1.7.2; extra == "frozen"
193
194
  Requires-Dist: notebook==7.6.1; extra == "frozen"
194
195
  Requires-Dist: notebook_shim==0.2.4; extra == "frozen"
@@ -220,8 +221,8 @@ Requires-Dist: opentelemetry-sdk==1.44.0; extra == "frozen"
220
221
  Requires-Dist: opentelemetry-semantic-conventions==0.65b0; extra == "frozen"
221
222
  Requires-Dist: opentelemetry-util-http==0.65b0; extra == "frozen"
222
223
  Requires-Dist: outcome==1.3.0.post0; extra == "frozen"
223
- Requires-Dist: packaging==26.2; extra == "frozen"
224
- Requires-Dist: pandas==3.0.3; extra == "frozen"
224
+ Requires-Dist: packaging==26.3; extra == "frozen"
225
+ Requires-Dist: pandas==3.0.5; extra == "frozen"
225
226
  Requires-Dist: pandocfilters==1.5.1; extra == "frozen"
226
227
  Requires-Dist: parfive==2.3.1; extra == "frozen"
227
228
  Requires-Dist: parso==0.8.7; extra == "frozen"
@@ -229,25 +230,27 @@ Requires-Dist: pathlib_abc==0.5.2; extra == "frozen"
229
230
  Requires-Dist: pathspec==1.1.1; extra == "frozen"
230
231
  Requires-Dist: pendulum==3.2.0; extra == "frozen"
231
232
  Requires-Dist: pexpect==4.9.0; extra == "frozen"
232
- Requires-Dist: pika==1.4.1; extra == "frozen"
233
+ Requires-Dist: pika==1.4.4; extra == "frozen"
233
234
  Requires-Dist: pillow==11.3.0; extra == "frozen"
234
- Requires-Dist: pip==26.1.2; extra == "frozen"
235
- Requires-Dist: platformdirs==4.11.0; extra == "frozen"
235
+ Requires-Dist: pip==26.2.1; extra == "frozen"
236
+ Requires-Dist: platformdirs==4.11.2; extra == "frozen"
236
237
  Requires-Dist: pluggy==1.6.0; extra == "frozen"
237
238
  Requires-Dist: pooch==1.9.0; extra == "frozen"
238
239
  Requires-Dist: proglog==0.1.12; extra == "frozen"
239
- Requires-Dist: prometheus_client==0.25.0; extra == "frozen"
240
- Requires-Dist: prompt_toolkit==3.0.52; extra == "frozen"
240
+ Requires-Dist: prometheus_client==0.26.0; extra == "frozen"
241
+ Requires-Dist: prompt_toolkit==3.0.53; extra == "frozen"
241
242
  Requires-Dist: propcache==0.5.2; extra == "frozen"
242
243
  Requires-Dist: protobuf==7.35.1; extra == "frozen"
243
244
  Requires-Dist: psutil==7.2.2; extra == "frozen"
245
+ Requires-Dist: psycopg==3.3.4; extra == "frozen"
246
+ Requires-Dist: psycopg-binary==3.3.4; extra == "frozen"
244
247
  Requires-Dist: psycopg2-binary==2.9.12; extra == "frozen"
245
248
  Requires-Dist: ptyprocess==0.7.0; extra == "frozen"
246
249
  Requires-Dist: pure_eval==0.2.3; extra == "frozen"
247
250
  Requires-Dist: pycparser==3.0; extra == "frozen"
248
251
  Requires-Dist: pydantic==2.13.4; extra == "frozen"
249
252
  Requires-Dist: pydantic-extra-types==2.11.1; extra == "frozen"
250
- Requires-Dist: pydantic-settings==2.14.2; extra == "frozen"
253
+ Requires-Dist: pydantic-settings==2.15.0; extra == "frozen"
251
254
  Requires-Dist: pydantic_core==2.46.4; extra == "frozen"
252
255
  Requires-Dist: pyerfa==2.0.1.5; extra == "frozen"
253
256
  Requires-Dist: pygtrie==2.5.0; extra == "frozen"
@@ -258,7 +261,7 @@ Requires-Dist: python-dotenv==1.2.2; extra == "frozen"
258
261
  Requires-Dist: python-json-logger==4.1.0; extra == "frozen"
259
262
  Requires-Dist: python-multipart==0.0.32; extra == "frozen"
260
263
  Requires-Dist: python-slugify==8.0.4; extra == "frozen"
261
- Requires-Dist: pytz==2026.2; extra == "frozen"
264
+ Requires-Dist: pytz==2026.3.post1; extra == "frozen"
262
265
  Requires-Dist: pyzmq==27.1.0; extra == "frozen"
263
266
  Requires-Dist: redis==6.4.0; extra == "frozen"
264
267
  Requires-Dist: referencing==0.37.0; extra == "frozen"
@@ -270,7 +273,7 @@ Requires-Dist: rich==15.0.0; extra == "frozen"
270
273
  Requires-Dist: rich-argparse==1.8.0; extra == "frozen"
271
274
  Requires-Dist: rich-toolkit==0.20.3; extra == "frozen"
272
275
  Requires-Dist: rpds-py==2026.6.3; extra == "frozen"
273
- Requires-Dist: s3transfer==0.19.1; extra == "frozen"
276
+ Requires-Dist: s3transfer==0.19.2; extra == "frozen"
274
277
  Requires-Dist: scipy==1.18.0; extra == "frozen"
275
278
  Requires-Dist: semantic-version==2.10.0; extra == "frozen"
276
279
  Requires-Dist: setproctitle==1.3.7; extra == "frozen"
@@ -278,7 +281,7 @@ Requires-Dist: shellingham==1.5.4; extra == "frozen"
278
281
  Requires-Dist: six==1.17.0; extra == "frozen"
279
282
  Requires-Dist: sniffio==1.3.1; extra == "frozen"
280
283
  Requires-Dist: solar-wavelength-calibration==2.0.3; extra == "frozen"
281
- Requires-Dist: soupsieve==2.9.1; extra == "frozen"
284
+ Requires-Dist: soupsieve==2.9.2; extra == "frozen"
282
285
  Requires-Dist: sqids==0.5.1; extra == "frozen"
283
286
  Requires-Dist: sqlparse==0.5.5; extra == "frozen"
284
287
  Requires-Dist: stack-data==0.6.3; extra == "frozen"
@@ -293,11 +296,11 @@ Requires-Dist: termcolor==3.3.0; extra == "frozen"
293
296
  Requires-Dist: terminado==0.18.1; extra == "frozen"
294
297
  Requires-Dist: text-unidecode==1.3; extra == "frozen"
295
298
  Requires-Dist: tinycss2==1.5.1; extra == "frozen"
296
- Requires-Dist: tornado==6.5.7; extra == "frozen"
297
- Requires-Dist: tqdm==4.69.0; extra == "frozen"
298
- Requires-Dist: traitlets==5.15.1; extra == "frozen"
299
- Requires-Dist: typer==0.27.0; extra == "frozen"
300
- Requires-Dist: typing-inspection==0.4.2; extra == "frozen"
299
+ Requires-Dist: tornado==6.5.8; extra == "frozen"
300
+ Requires-Dist: tqdm==4.70.0; extra == "frozen"
301
+ Requires-Dist: traitlets==5.16.1; extra == "frozen"
302
+ Requires-Dist: typer==0.27.1; extra == "frozen"
303
+ Requires-Dist: typing-inspection==0.4.3; extra == "frozen"
301
304
  Requires-Dist: typing_extensions==4.16.0; extra == "frozen"
302
305
  Requires-Dist: tzdata==2026.3; extra == "frozen"
303
306
  Requires-Dist: tzlocal==5.4.4; extra == "frozen"
@@ -307,7 +310,7 @@ Requires-Dist: universal_pathlib==0.3.10; extra == "frozen"
307
310
  Requires-Dist: uri-template==1.3.0; extra == "frozen"
308
311
  Requires-Dist: urllib3==2.7.0; extra == "frozen"
309
312
  Requires-Dist: uuid6==2025.0.1; extra == "frozen"
310
- Requires-Dist: uvicorn==0.51.0; extra == "frozen"
313
+ Requires-Dist: uvicorn==0.52.1; extra == "frozen"
311
314
  Requires-Dist: uvloop==0.22.1; extra == "frozen"
312
315
  Requires-Dist: vine==5.1.0; extra == "frozen"
313
316
  Requires-Dist: voluptuous==0.16.0; extra == "frozen"
@@ -316,9 +319,9 @@ Requires-Dist: wcwidth==0.8.2; extra == "frozen"
316
319
  Requires-Dist: webcolors==25.10.0; extra == "frozen"
317
320
  Requires-Dist: webencodings==0.5.1; extra == "frozen"
318
321
  Requires-Dist: websocket-client==1.9.0; extra == "frozen"
319
- Requires-Dist: websockets==16.1.1; extra == "frozen"
322
+ Requires-Dist: websockets==17.0.1; extra == "frozen"
320
323
  Requires-Dist: wirerope==1.0.0; extra == "frozen"
321
- Requires-Dist: wrapt==2.2.2; extra == "frozen"
324
+ Requires-Dist: wrapt==2.3.0; extra == "frozen"
322
325
  Requires-Dist: yamale==6.1.0; extra == "frozen"
323
326
  Requires-Dist: yarl==1.24.5; extra == "frozen"
324
327
  Requires-Dist: zipp==4.1.0; extra == "frozen"
@@ -1,3 +1,4 @@
1
+ from dkist_processing_test.tasks.exercise_multiprocessing import *
1
2
  from dkist_processing_test.tasks.exercise_numba import *
2
3
  from dkist_processing_test.tasks.fail import *
3
4
  from dkist_processing_test.tasks.fake_science import *
@@ -0,0 +1,59 @@
1
+ """Exercise CPU-level multiprocessing in the workflow execution environment."""
2
+
3
+ import os
4
+ from concurrent.futures import ProcessPoolExecutor
5
+
6
+ from dkist_processing_core import TaskBase
7
+ from dkist_service_configuration.logging import logger
8
+ from pydantic import BaseModel
9
+
10
+ from dkist_processing_test.config import dkist_processing_test_configurations
11
+
12
+ __all__ = ["CpuBoundWorkloadResult", "ExerciseMultiprocessing"]
13
+
14
+ # Keep computation short while giving each worker process meaningful CPU work.
15
+ WORKLOAD_SIZE = 1_000_000
16
+
17
+
18
+ class CpuBoundWorkloadResult(BaseModel):
19
+ """Result from a CPU-bound workload executed in a worker process."""
20
+
21
+ workload_id: int
22
+ process_id: int
23
+ result: int
24
+
25
+
26
+ def _cpu_bound_workload(workload_id: int) -> CpuBoundWorkloadResult:
27
+ """Run a deterministic CPU-bound workload and report the worker process."""
28
+ result = sum((value + workload_id) ** 2 for value in range(WORKLOAD_SIZE))
29
+ return CpuBoundWorkloadResult(
30
+ workload_id=workload_id,
31
+ process_id=os.getpid(),
32
+ result=result,
33
+ )
34
+
35
+
36
+ class ExerciseMultiprocessing(TaskBase):
37
+ """Run one CPU-bound workload per configured CPU in separate worker processes."""
38
+
39
+ def run(self) -> None:
40
+ worker_count = dkist_processing_test_configurations.cpu_count
41
+
42
+ if worker_count <= 1:
43
+ raise RuntimeError(f"Insufficient CPU count for multiprocessing test. {worker_count=}")
44
+
45
+ with ProcessPoolExecutor(max_workers=worker_count) as executor:
46
+ workload_results = list(executor.map(_cpu_bound_workload, range(worker_count)))
47
+
48
+ worker_process_ids = {workload_result.process_id for workload_result in workload_results}
49
+ if len(worker_process_ids) != worker_count:
50
+ raise RuntimeError(
51
+ f"Expected {worker_count} worker processes; found {worker_process_ids}."
52
+ )
53
+
54
+ self.workload_results = workload_results
55
+ self.worker_process_ids = worker_process_ids
56
+ logger.info(
57
+ f"ExerciseMultiprocessing completed {worker_count} CPU-bound workloads "
58
+ f"using worker processes {sorted(worker_process_ids)}."
59
+ )
@@ -0,0 +1,17 @@
1
+ """Test integrity of workflows."""
2
+
3
+ from dkist_processing_core import ResourceQueue
4
+ from dkist_processing_core.build_utils import validate_workflows
5
+
6
+ from dkist_processing_test import workflows
7
+ from dkist_processing_test.workflows.exercise_multiprocessing import exercise_multiprocessing
8
+
9
+
10
+ def test_workflow_integrity():
11
+ """Validate workflow to ensure acyclic-ness and export compilation"""
12
+ validate_workflows(workflows)
13
+
14
+
15
+ def test_exercise_multiprocessing_uses_multi_core_resource_queue():
16
+ """The multiprocessing workflow runs on workers configured with multiple CPUs."""
17
+ assert exercise_multiprocessing.nodes[0].resource_queue == ResourceQueue.MULTI_CORE
@@ -0,0 +1,19 @@
1
+ """Workflow that exercises CPU-level multiprocessing."""
2
+
3
+ from dkist_processing_core import ResourceQueue
4
+ from dkist_processing_core import Workflow
5
+
6
+ from dkist_processing_test.tasks import ExerciseMultiprocessing
7
+
8
+ exercise_multiprocessing = Workflow(
9
+ input_data="input",
10
+ output_data="output",
11
+ category="test",
12
+ detail="exercise_multiprocessing",
13
+ workflow_package=__package__,
14
+ )
15
+ exercise_multiprocessing.add_node(
16
+ task=ExerciseMultiprocessing,
17
+ resource_queue=ResourceQueue.MULTI_CORE,
18
+ upstreams=None,
19
+ )