dkist-processing-test 1.35.1__tar.gz → 1.36.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.

Potentially problematic release.


This version of dkist-processing-test might be problematic. Click here for more details.

Files changed (42) hide show
  1. {dkist_processing_test-1.35.1/dkist_processing_test.egg-info → dkist_processing_test-1.36.1}/PKG-INFO +143 -52
  2. dkist_processing_test-1.36.1/README.rst +149 -0
  3. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test/tasks/fake_science.py +7 -7
  4. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test/tasks/manual.py +1 -1
  5. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test/tasks/movie.py +2 -2
  6. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test/tests/test_tasks.py +12 -0
  7. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1/dkist_processing_test.egg-info}/PKG-INFO +143 -52
  8. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test.egg-info/requires.txt +67 -50
  9. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/pyproject.toml +69 -52
  10. dkist_processing_test-1.35.1/README.rst +0 -75
  11. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/.gitignore +0 -0
  12. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/.pre-commit-config.yaml +0 -0
  13. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/.snyk +0 -0
  14. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/bitbucket-pipelines.yml +0 -0
  15. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test/__init__.py +0 -0
  16. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test/config.py +0 -0
  17. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test/models/__init__.py +0 -0
  18. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test/models/constants.py +0 -0
  19. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test/models/parameters.py +0 -0
  20. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test/tasks/__init__.py +0 -0
  21. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test/tasks/exercise_numba.py +0 -0
  22. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test/tasks/fail.py +0 -0
  23. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test/tasks/high_memory.py +0 -0
  24. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test/tasks/noop.py +0 -0
  25. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test/tasks/parse.py +0 -0
  26. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test/tasks/quality.py +0 -0
  27. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test/tasks/write_l1.py +0 -0
  28. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test/tests/__init__.py +0 -0
  29. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test/tests/conftest.py +0 -0
  30. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test/tests/test_workflows.py +0 -0
  31. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test/workflows/__init__.py +0 -0
  32. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test/workflows/common_tasks.py +0 -0
  33. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test/workflows/end_to_end.py +0 -0
  34. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test/workflows/exercise_numba.py +0 -0
  35. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test/workflows/fail.py +0 -0
  36. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test/workflows/noop.py +0 -0
  37. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test/workflows/resource_queue.py +0 -0
  38. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test/workflows/trial_end_to_end.py +0 -0
  39. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test.egg-info/SOURCES.txt +0 -0
  40. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test.egg-info/dependency_links.txt +0 -0
  41. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/dkist_processing_test.egg-info/top_level.txt +0 -0
  42. {dkist_processing_test-1.35.1 → dkist_processing_test-1.36.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dkist-processing-test
3
- Version: 1.35.1
3
+ Version: 1.36.1
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,9 +12,9 @@ Classifier: Programming Language :: Python :: 3
12
12
  Classifier: Programming Language :: Python :: 3.12
13
13
  Requires-Python: >=3.12
14
14
  Description-Content-Type: text/x-rst
15
- Requires-Dist: dkist-processing-common==11.5.1
15
+ Requires-Dist: dkist-processing-common==11.7.0
16
16
  Requires-Dist: dkist-header-validator==5.2.1
17
- Requires-Dist: dkist-service-configuration==2.3.0
17
+ Requires-Dist: dkist-service-configuration==4.1.7
18
18
  Requires-Dist: dkist-fits-specifications==4.17.0
19
19
  Requires-Dist: numba==0.61.2
20
20
  Requires-Dist: astropy==7.0.2
@@ -45,64 +45,65 @@ Requires-Dist: Flask-AppBuilder==4.5.3; extra == "frozen"
45
45
  Requires-Dist: Flask-Babel==2.0.0; extra == "frozen"
46
46
  Requires-Dist: Flask-Caching==2.3.1; extra == "frozen"
47
47
  Requires-Dist: Flask-JWT-Extended==4.7.1; extra == "frozen"
48
- Requires-Dist: Flask-Limiter==3.13; extra == "frozen"
48
+ Requires-Dist: Flask-Limiter==3.12; extra == "frozen"
49
49
  Requires-Dist: Flask-Login==0.6.3; extra == "frozen"
50
50
  Requires-Dist: Flask-SQLAlchemy==2.5.1; extra == "frozen"
51
51
  Requires-Dist: Flask-Session==0.5.0; extra == "frozen"
52
52
  Requires-Dist: Flask-WTF==1.2.2; extra == "frozen"
53
53
  Requires-Dist: Jinja2==3.1.6; extra == "frozen"
54
54
  Requires-Dist: Mako==1.3.10; extra == "frozen"
55
- Requires-Dist: MarkupSafe==3.0.2; extra == "frozen"
55
+ Requires-Dist: MarkupSafe==3.0.3; extra == "frozen"
56
56
  Requires-Dist: PyJWT==2.10.1; extra == "frozen"
57
- Requires-Dist: PyYAML==6.0.2; extra == "frozen"
57
+ Requires-Dist: PyYAML==6.0.3; extra == "frozen"
58
58
  Requires-Dist: Pygments==2.19.2; extra == "frozen"
59
59
  Requires-Dist: SQLAlchemy==1.4.54; extra == "frozen"
60
60
  Requires-Dist: SQLAlchemy-JSONField==1.0.2; extra == "frozen"
61
61
  Requires-Dist: SQLAlchemy-Utils==0.42.0; extra == "frozen"
62
62
  Requires-Dist: WTForms==3.2.1; extra == "frozen"
63
63
  Requires-Dist: Werkzeug==2.2.3; extra == "frozen"
64
- Requires-Dist: aioftp==0.26.2; extra == "frozen"
64
+ Requires-Dist: aioftp==0.27.2; extra == "frozen"
65
65
  Requires-Dist: aiohappyeyeballs==2.6.1; extra == "frozen"
66
- Requires-Dist: aiohttp==3.12.15; extra == "frozen"
66
+ Requires-Dist: aiohttp==3.13.0; extra == "frozen"
67
67
  Requires-Dist: aiosignal==1.4.0; extra == "frozen"
68
+ Requires-Dist: aiosmtplib==4.0.2; extra == "frozen"
68
69
  Requires-Dist: alembic==1.16.5; extra == "frozen"
69
70
  Requires-Dist: amqp==5.3.1; extra == "frozen"
70
71
  Requires-Dist: annotated-types==0.7.0; extra == "frozen"
71
- Requires-Dist: anyio==4.10.0; extra == "frozen"
72
+ Requires-Dist: anyio==4.11.0; extra == "frozen"
72
73
  Requires-Dist: apache-airflow==2.11.0; extra == "frozen"
73
74
  Requires-Dist: apache-airflow-providers-celery==3.10.0; extra == "frozen"
74
- Requires-Dist: apache-airflow-providers-common-compat==1.7.3; extra == "frozen"
75
- Requires-Dist: apache-airflow-providers-common-io==1.6.2; extra == "frozen"
76
- Requires-Dist: apache-airflow-providers-common-sql==1.28.0; extra == "frozen"
75
+ Requires-Dist: apache-airflow-providers-common-compat==1.7.4; extra == "frozen"
76
+ Requires-Dist: apache-airflow-providers-common-io==1.6.3; extra == "frozen"
77
+ Requires-Dist: apache-airflow-providers-common-sql==1.28.1; extra == "frozen"
77
78
  Requires-Dist: apache-airflow-providers-fab==1.5.3; extra == "frozen"
78
79
  Requires-Dist: apache-airflow-providers-ftp==3.13.2; extra == "frozen"
79
80
  Requires-Dist: apache-airflow-providers-http==5.3.4; extra == "frozen"
80
81
  Requires-Dist: apache-airflow-providers-imap==3.9.2; extra == "frozen"
81
82
  Requires-Dist: apache-airflow-providers-postgres==6.3.0; extra == "frozen"
82
- Requires-Dist: apache-airflow-providers-smtp==2.2.1; extra == "frozen"
83
+ Requires-Dist: apache-airflow-providers-smtp==2.3.1; extra == "frozen"
83
84
  Requires-Dist: apache-airflow-providers-sqlite==4.1.2; extra == "frozen"
84
- Requires-Dist: apispec==6.8.3; extra == "frozen"
85
+ Requires-Dist: apispec==6.8.4; extra == "frozen"
85
86
  Requires-Dist: argcomplete==3.6.2; extra == "frozen"
86
87
  Requires-Dist: asdf==3.5.0; extra == "frozen"
87
88
  Requires-Dist: asdf_standard==1.4.0; extra == "frozen"
88
89
  Requires-Dist: asdf_transform_schemas==0.6.0; extra == "frozen"
89
- Requires-Dist: asgiref==3.9.1; extra == "frozen"
90
+ Requires-Dist: asgiref==3.10.0; extra == "frozen"
90
91
  Requires-Dist: asteval==1.0.6; extra == "frozen"
91
92
  Requires-Dist: astropy==7.0.2; extra == "frozen"
92
- Requires-Dist: astropy-iers-data==0.2025.9.15.0.37.0; extra == "frozen"
93
+ Requires-Dist: astropy-iers-data==0.2025.10.6.0.35.25; extra == "frozen"
93
94
  Requires-Dist: asyncpg==0.30.0; extra == "frozen"
94
- Requires-Dist: attrs==25.3.0; extra == "frozen"
95
+ Requires-Dist: attrs==25.4.0; extra == "frozen"
95
96
  Requires-Dist: babel==2.17.0; extra == "frozen"
96
- Requires-Dist: billiard==4.2.1; extra == "frozen"
97
+ Requires-Dist: billiard==4.2.2; extra == "frozen"
97
98
  Requires-Dist: blinker==1.9.0; extra == "frozen"
98
- Requires-Dist: boto3==1.40.32; extra == "frozen"
99
- Requires-Dist: botocore==1.40.32; extra == "frozen"
99
+ Requires-Dist: boto3==1.40.48; extra == "frozen"
100
+ Requires-Dist: botocore==1.40.48; extra == "frozen"
100
101
  Requires-Dist: cachelib==0.13.0; extra == "frozen"
101
102
  Requires-Dist: celery==5.3.1; extra == "frozen"
102
- Requires-Dist: certifi==2025.8.3; extra == "frozen"
103
+ Requires-Dist: certifi==2025.10.5; extra == "frozen"
103
104
  Requires-Dist: cffi==2.0.0; extra == "frozen"
104
105
  Requires-Dist: charset-normalizer==3.4.3; extra == "frozen"
105
- Requires-Dist: click==8.2.1; extra == "frozen"
106
+ Requires-Dist: click==8.3.0; extra == "frozen"
106
107
  Requires-Dist: click-didyoumean==0.3.1; extra == "frozen"
107
108
  Requires-Dist: click-plugins==1.1.1.2; extra == "frozen"
108
109
  Requires-Dist: click-repl==0.3.0; extra == "frozen"
@@ -113,33 +114,32 @@ Requires-Dist: connexion==2.14.2; extra == "frozen"
113
114
  Requires-Dist: contourpy==1.3.3; extra == "frozen"
114
115
  Requires-Dist: cron_descriptor==2.0.6; extra == "frozen"
115
116
  Requires-Dist: croniter==6.0.0; extra == "frozen"
116
- Requires-Dist: cryptography==46.0.1; extra == "frozen"
117
+ Requires-Dist: cryptography==46.0.2; extra == "frozen"
117
118
  Requires-Dist: cycler==0.12.1; extra == "frozen"
118
119
  Requires-Dist: dacite==1.9.2; extra == "frozen"
119
120
  Requires-Dist: decorator==5.2.1; extra == "frozen"
120
121
  Requires-Dist: dill==0.4.0; extra == "frozen"
121
122
  Requires-Dist: dkist-header-validator==5.2.1; extra == "frozen"
122
- Requires-Dist: dkist-processing-common==11.5.1; extra == "frozen"
123
- Requires-Dist: dkist-processing-core==5.2.1; extra == "frozen"
123
+ Requires-Dist: dkist-processing-common==11.7.0; extra == "frozen"
124
+ Requires-Dist: dkist-processing-core==6.0.0; extra == "frozen"
124
125
  Requires-Dist: dkist-processing-pac==3.1.1; extra == "frozen"
125
- Requires-Dist: dkist-processing-test==1.35.1; extra == "frozen"
126
- Requires-Dist: dkist-service-configuration==2.3.0; extra == "frozen"
126
+ Requires-Dist: dkist-processing-test==1.36.1; extra == "frozen"
127
+ Requires-Dist: dkist-service-configuration==4.1.7; extra == "frozen"
127
128
  Requires-Dist: dkist-spectral-lines==3.0.0; extra == "frozen"
128
129
  Requires-Dist: dkist_fits_specifications==4.17.0; extra == "frozen"
129
130
  Requires-Dist: dnspython==2.8.0; extra == "frozen"
130
- Requires-Dist: ecs-logging==2.2.0; extra == "frozen"
131
- Requires-Dist: elastic-apm==6.24.0; extra == "frozen"
132
131
  Requires-Dist: email-validator==2.3.0; extra == "frozen"
133
132
  Requires-Dist: fastjsonschema==2.21.2; extra == "frozen"
134
133
  Requires-Dist: flower==2.0.1; extra == "frozen"
135
- Requires-Dist: fonttools==4.60.0; extra == "frozen"
136
- Requires-Dist: frozenlist==1.7.0; extra == "frozen"
134
+ Requires-Dist: fonttools==4.60.1; extra == "frozen"
135
+ Requires-Dist: frozenlist==1.8.0; extra == "frozen"
137
136
  Requires-Dist: fsspec==2025.9.0; extra == "frozen"
138
- Requires-Dist: globus-sdk==3.63.0; extra == "frozen"
137
+ Requires-Dist: globus-sdk==3.65.0; extra == "frozen"
139
138
  Requires-Dist: google-re2==1.1.20250805; extra == "frozen"
140
139
  Requires-Dist: googleapis-common-protos==1.70.0; extra == "frozen"
141
140
  Requires-Dist: gqlclient==1.2.3; extra == "frozen"
142
- Requires-Dist: grpcio==1.75.0; extra == "frozen"
141
+ Requires-Dist: greenlet==3.2.4; extra == "frozen"
142
+ Requires-Dist: grpcio==1.75.1; extra == "frozen"
143
143
  Requires-Dist: gunicorn==23.0.0; extra == "frozen"
144
144
  Requires-Dist: h11==0.16.0; extra == "frozen"
145
145
  Requires-Dist: httpcore==1.0.9; extra == "frozen"
@@ -158,7 +158,7 @@ Requires-Dist: jupyter_core==5.8.1; extra == "frozen"
158
158
  Requires-Dist: kiwisolver==1.4.9; extra == "frozen"
159
159
  Requires-Dist: kombu==5.5.4; extra == "frozen"
160
160
  Requires-Dist: lazy-object-proxy==1.12.0; extra == "frozen"
161
- Requires-Dist: limits==5.5.0; extra == "frozen"
161
+ Requires-Dist: limits==5.6.0; extra == "frozen"
162
162
  Requires-Dist: linkify-it-py==2.0.3; extra == "frozen"
163
163
  Requires-Dist: llvmlite==0.44.0; extra == "frozen"
164
164
  Requires-Dist: lmfit==1.3.4; extra == "frozen"
@@ -168,13 +168,13 @@ Requires-Dist: markdown-it-py==4.0.0; extra == "frozen"
168
168
  Requires-Dist: marshmallow==3.26.1; extra == "frozen"
169
169
  Requires-Dist: marshmallow-oneofschema==3.2.0; extra == "frozen"
170
170
  Requires-Dist: marshmallow-sqlalchemy==0.28.2; extra == "frozen"
171
- Requires-Dist: matplotlib==3.10.6; extra == "frozen"
171
+ Requires-Dist: matplotlib==3.10.7; extra == "frozen"
172
172
  Requires-Dist: mdit-py-plugins==0.5.0; extra == "frozen"
173
173
  Requires-Dist: mdurl==0.1.2; extra == "frozen"
174
174
  Requires-Dist: methodtools==0.4.7; extra == "frozen"
175
175
  Requires-Dist: more-itertools==10.8.0; extra == "frozen"
176
176
  Requires-Dist: moviepy==2.2.1; extra == "frozen"
177
- Requires-Dist: multidict==6.6.4; extra == "frozen"
177
+ Requires-Dist: multidict==6.7.0; extra == "frozen"
178
178
  Requires-Dist: nbformat==5.10.4; extra == "frozen"
179
179
  Requires-Dist: numba==0.61.2; extra == "frozen"
180
180
  Requires-Dist: numpy==2.2.5; extra == "frozen"
@@ -184,35 +184,52 @@ Requires-Dist: opentelemetry-exporter-otlp==1.37.0; extra == "frozen"
184
184
  Requires-Dist: opentelemetry-exporter-otlp-proto-common==1.37.0; extra == "frozen"
185
185
  Requires-Dist: opentelemetry-exporter-otlp-proto-grpc==1.37.0; extra == "frozen"
186
186
  Requires-Dist: opentelemetry-exporter-otlp-proto-http==1.37.0; extra == "frozen"
187
+ Requires-Dist: opentelemetry-instrumentation==0.58b0; extra == "frozen"
188
+ Requires-Dist: opentelemetry-instrumentation-aiohttp-client==0.58b0; extra == "frozen"
189
+ Requires-Dist: opentelemetry-instrumentation-asgi==0.58b0; extra == "frozen"
190
+ Requires-Dist: opentelemetry-instrumentation-botocore==0.58b0; extra == "frozen"
191
+ Requires-Dist: opentelemetry-instrumentation-celery==0.58b0; extra == "frozen"
192
+ Requires-Dist: opentelemetry-instrumentation-dbapi==0.58b0; extra == "frozen"
193
+ Requires-Dist: opentelemetry-instrumentation-fastapi==0.58b0; extra == "frozen"
194
+ Requires-Dist: opentelemetry-instrumentation-pika==0.58b0; extra == "frozen"
195
+ Requires-Dist: opentelemetry-instrumentation-psycopg2==0.58b0; extra == "frozen"
196
+ Requires-Dist: opentelemetry-instrumentation-pymongo==0.58b0; extra == "frozen"
197
+ Requires-Dist: opentelemetry-instrumentation-redis==0.58b0; extra == "frozen"
198
+ Requires-Dist: opentelemetry-instrumentation-requests==0.58b0; extra == "frozen"
199
+ Requires-Dist: opentelemetry-instrumentation-sqlalchemy==0.58b0; extra == "frozen"
200
+ Requires-Dist: opentelemetry-instrumentation-system-metrics==0.58b0; extra == "frozen"
201
+ Requires-Dist: opentelemetry-propagator-aws-xray==1.0.2; extra == "frozen"
187
202
  Requires-Dist: opentelemetry-proto==1.37.0; extra == "frozen"
188
203
  Requires-Dist: opentelemetry-sdk==1.37.0; extra == "frozen"
189
204
  Requires-Dist: opentelemetry-semantic-conventions==0.58b0; extra == "frozen"
205
+ Requires-Dist: opentelemetry-util-http==0.58b0; extra == "frozen"
190
206
  Requires-Dist: ordered-set==4.1.0; extra == "frozen"
191
207
  Requires-Dist: packaging==25.0; extra == "frozen"
192
- Requires-Dist: pandas==2.3.2; extra == "frozen"
208
+ Requires-Dist: pandas==2.3.3; extra == "frozen"
193
209
  Requires-Dist: parfive==2.2.0; extra == "frozen"
210
+ Requires-Dist: pathlib_abc==0.5.1; extra == "frozen"
194
211
  Requires-Dist: pathspec==0.12.1; extra == "frozen"
195
212
  Requires-Dist: pendulum==3.1.0; extra == "frozen"
196
213
  Requires-Dist: pika==1.3.2; extra == "frozen"
197
214
  Requires-Dist: pillow==11.3.0; extra == "frozen"
198
215
  Requires-Dist: pip==25.2; extra == "frozen"
199
- Requires-Dist: platformdirs==4.4.0; extra == "frozen"
216
+ Requires-Dist: platformdirs==4.5.0; extra == "frozen"
200
217
  Requires-Dist: pluggy==1.6.0; extra == "frozen"
201
218
  Requires-Dist: pooch==1.8.2; extra == "frozen"
202
219
  Requires-Dist: prison==0.2.1; extra == "frozen"
203
220
  Requires-Dist: proglog==0.1.12; extra == "frozen"
204
- Requires-Dist: prometheus_client==0.22.1; extra == "frozen"
221
+ Requires-Dist: prometheus_client==0.23.1; extra == "frozen"
205
222
  Requires-Dist: prompt_toolkit==3.0.52; extra == "frozen"
206
- Requires-Dist: propcache==0.3.2; extra == "frozen"
223
+ Requires-Dist: propcache==0.4.1; extra == "frozen"
207
224
  Requires-Dist: protobuf==6.32.1; extra == "frozen"
208
- Requires-Dist: psutil==7.0.0; extra == "frozen"
225
+ Requires-Dist: psutil==7.1.0; extra == "frozen"
209
226
  Requires-Dist: psycopg2-binary==2.9.10; extra == "frozen"
210
227
  Requires-Dist: pycparser==2.23; extra == "frozen"
211
- Requires-Dist: pydantic==2.11.9; extra == "frozen"
212
- Requires-Dist: pydantic-settings==2.10.1; extra == "frozen"
213
- Requires-Dist: pydantic_core==2.33.2; extra == "frozen"
228
+ Requires-Dist: pydantic==2.12.0; extra == "frozen"
229
+ Requires-Dist: pydantic-settings==2.11.0; extra == "frozen"
230
+ Requires-Dist: pydantic_core==2.41.1; extra == "frozen"
214
231
  Requires-Dist: pyerfa==2.0.1.5; extra == "frozen"
215
- Requires-Dist: pyparsing==3.2.4; extra == "frozen"
232
+ Requires-Dist: pyparsing==3.2.5; extra == "frozen"
216
233
  Requires-Dist: python-daemon==3.1.2; extra == "frozen"
217
234
  Requires-Dist: python-dateutil==2.9.0.post0; extra == "frozen"
218
235
  Requires-Dist: python-dotenv==1.1.1; extra == "frozen"
@@ -224,7 +241,7 @@ Requires-Dist: referencing==0.36.2; extra == "frozen"
224
241
  Requires-Dist: requests==2.32.5; extra == "frozen"
225
242
  Requires-Dist: requests-toolbelt==1.0.0; extra == "frozen"
226
243
  Requires-Dist: rfc3339-validator==0.1.4; extra == "frozen"
227
- Requires-Dist: rich==14.1.0; extra == "frozen"
244
+ Requires-Dist: rich==13.9.4; extra == "frozen"
228
245
  Requires-Dist: rich-argparse==1.7.1; extra == "frozen"
229
246
  Requires-Dist: rpds-py==0.27.1; extra == "frozen"
230
247
  Requires-Dist: s3transfer==0.14.0; extra == "frozen"
@@ -236,7 +253,7 @@ Requires-Dist: sniffio==1.3.1; extra == "frozen"
236
253
  Requires-Dist: solar-wavelength-calibration==1.0.1; extra == "frozen"
237
254
  Requires-Dist: sqids==0.5.1; extra == "frozen"
238
255
  Requires-Dist: sqlparse==0.5.3; extra == "frozen"
239
- Requires-Dist: sunpy==7.0.1; extra == "frozen"
256
+ Requires-Dist: sunpy==7.0.2; extra == "frozen"
240
257
  Requires-Dist: tabulate==0.9.0; extra == "frozen"
241
258
  Requires-Dist: talus==1.3.4; extra == "frozen"
242
259
  Requires-Dist: tenacity==8.5.0; extra == "frozen"
@@ -245,20 +262,20 @@ Requires-Dist: text-unidecode==1.3; extra == "frozen"
245
262
  Requires-Dist: tornado==6.5.2; extra == "frozen"
246
263
  Requires-Dist: tqdm==4.67.1; extra == "frozen"
247
264
  Requires-Dist: traitlets==5.14.3; extra == "frozen"
248
- Requires-Dist: typing-inspection==0.4.1; extra == "frozen"
265
+ Requires-Dist: typing-inspection==0.4.2; extra == "frozen"
249
266
  Requires-Dist: typing_extensions==4.15.0; extra == "frozen"
250
267
  Requires-Dist: tzdata==2025.2; extra == "frozen"
251
268
  Requires-Dist: uc-micro-py==1.0.3; extra == "frozen"
252
269
  Requires-Dist: uncertainties==3.2.3; extra == "frozen"
253
- Requires-Dist: universal_pathlib==0.2.6; extra == "frozen"
270
+ Requires-Dist: universal_pathlib==0.3.3; extra == "frozen"
254
271
  Requires-Dist: urllib3==2.5.0; extra == "frozen"
255
272
  Requires-Dist: vine==5.1.0; extra == "frozen"
256
273
  Requires-Dist: voluptuous==0.15.2; extra == "frozen"
257
- Requires-Dist: wcwidth==0.2.13; extra == "frozen"
274
+ Requires-Dist: wcwidth==0.2.14; extra == "frozen"
258
275
  Requires-Dist: wirerope==1.0.0; extra == "frozen"
259
276
  Requires-Dist: wrapt==1.17.3; extra == "frozen"
260
277
  Requires-Dist: yamale==6.0.0; extra == "frozen"
261
- Requires-Dist: yarl==1.20.1; extra == "frozen"
278
+ Requires-Dist: yarl==1.22.0; extra == "frozen"
262
279
  Requires-Dist: zipp==3.23.0; extra == "frozen"
263
280
 
264
281
  dkist-processing-test
@@ -290,7 +307,81 @@ the process detailed in `dkist-processing-core <https://pypi.org/project/dkist-p
290
307
 
291
308
  Environment Variables
292
309
  ---------------------
293
- Only those specified by `dkist-processing-core <https://pypi.org/project/dkist-processing-core/>`_ and `dkist-processing-common <https://pypi.org/project/dkist-processing-common/>`_
310
+
311
+ .. list-table::
312
+ :widths: 10 90
313
+ :header-rows: 1
314
+
315
+ * - Variable
316
+ - Field Info
317
+ * - LOGURU_LEVEL
318
+ - annotation=str required=False default='INFO' alias_priority=2 validation_alias='LOGURU_LEVEL' description='Log level for the application'
319
+ * - MESH_CONFIG
320
+ - annotation=dict[str, MeshService] required=False default_factory=dict alias_priority=2 validation_alias='MESH_CONFIG' description='Service mesh configuration' examples=[{'upstream_service_name': {'mesh_address': 'localhost', 'mesh_port': 6742}}]
321
+ * - RETRY_CONFIG
322
+ - annotation=RetryConfig required=False default_factory=RetryConfig description='Retry configuration for the service'
323
+ * - OTEL_SERVICE_NAME
324
+ - annotation=str required=False default='unknown-service-name' alias_priority=2 validation_alias='OTEL_SERVICE_NAME' description='Service name for OpenTelemetry'
325
+ * - DKIST_SERVICE_VERSION
326
+ - annotation=str required=False default='unknown-service-version' alias_priority=2 validation_alias='DKIST_SERVICE_VERSION' description='Service version for OpenTelemetry'
327
+ * - NOMAD_ALLOC_ID
328
+ - annotation=str required=False default='unknown-allocation-id' alias_priority=2 validation_alias='NOMAD_ALLOC_ID' description='Nomad allocation ID for OpenTelemetry'
329
+ * - OTEL_EXPORTER_OTLP_TRACES_INSECURE
330
+ - annotation=bool required=False default=True description='Use insecure connection for OTLP traces'
331
+ * - OTEL_EXPORTER_OTLP_METRICS_INSECURE
332
+ - annotation=bool required=False default=True description='Use insecure connection for OTLP metrics'
333
+ * - OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
334
+ - annotation=Union[str, NoneType] required=False default=None description='OTLP traces endpoint. Overrides mesh configuration' examples=['localhost:4317']
335
+ * - OTEL_EXPORTER_OTLP_METRICS_ENDPOINT
336
+ - annotation=Union[str, NoneType] required=False default=None description='OTLP metrics endpoint. Overrides mesh configuration' examples=['localhost:4317']
337
+ * - OTEL_PYTHON_DISABLED_INSTRUMENTATIONS
338
+ - annotation=list[str] required=False default_factory=list description='List of instrumentations to disable. https://opentelemetry.io/docs/zero-code/python/configuration/' examples=[['pika', 'requests']]
339
+ * - OTEL_PYTHON_FASTAPI_EXCLUDED_URLS
340
+ - annotation=str required=False default='health' description='Comma separated list of URLs to exclude from OpenTelemetry instrumentation in FastAPI.' examples=['client/.*/info,healthcheck']
341
+ * - SYSTEM_METRIC_INSTRUMENTATION_CONFIG
342
+ - annotation=Union[dict[str, bool], NoneType] required=False default=None description='Configuration for system metric instrumentation. https://opentelemetry-python-contrib.readthedocs.io/en/latest/instrumentation/system_metrics/system_metrics.html' examples=[{'system.memory.usage': ['used', 'free', 'cached'], 'system.cpu.time': ['idle', 'user', 'system', 'irq'], 'system.network.io': ['transmit', 'receive'], 'process.runtime.memory': ['rss', 'vms'], 'process.runtime.cpu.time': ['user', 'system'], 'process.runtime.context_switches': ['involuntary', 'voluntary']}]
343
+ * - ISB_USERNAME
344
+ - annotation=str required=False default='guest' description='Username for the interservice-bus.'
345
+ * - ISB_PASSWORD
346
+ - annotation=str required=False default='guest' description='Password for the interservice-bus.'
347
+ * - ISB_EXCHANGE
348
+ - annotation=str required=False default='master.direct.x' description='Exchange for the interservice-bus.'
349
+ * - ISB_QUEUE_TYPE
350
+ - annotation=str required=False default='classic' description='Queue type for the interservice-bus.' examples=['quorum', 'classic']
351
+ * - BUILD_VERSION
352
+ - annotation=str required=False default='dev' description='Fallback build version for workflow tasks.'
353
+ * - GQL_AUTH_TOKEN
354
+ - annotation=Union[str, NoneType] required=False default='dev' description='The auth token for the metadata-store-api.'
355
+ * - OBJECT_STORE_ACCESS_KEY
356
+ - annotation=Union[str, NoneType] required=False default=None description='The access key for the object store.'
357
+ * - OBJECT_STORE_SECRET_KEY
358
+ - annotation=Union[str, NoneType] required=False default=None description='The secret key for the object store.'
359
+ * - OBJECT_STORE_USE_SSL
360
+ - annotation=bool required=False default=False description='Whether to use SSL for the object store connection.'
361
+ * - MULTIPART_THRESHOLD
362
+ - annotation=Union[int, NoneType] required=False default=None description='Multipart threshold for the object store.'
363
+ * - S3_CLIENT_CONFIG
364
+ - annotation=Union[dict, NoneType] required=False default=None description='S3 client configuration for the object store.'
365
+ * - S3_UPLOAD_CONFIG
366
+ - annotation=Union[dict, NoneType] required=False default=None description='S3 upload configuration for the object store.'
367
+ * - S3_DOWNLOAD_CONFIG
368
+ - annotation=Union[dict, NoneType] required=False default=None description='S3 download configuration for the object store.'
369
+ * - GLOBUS_TRANSPORT_PARAMS
370
+ - annotation=dict required=False default_factory=dict description='Globus transfer parameters.'
371
+ * - GLOBUS_CLIENT_ID
372
+ - annotation=Union[str, NoneType] required=False default=None description='Globus client ID for inbound/outbound transfers.'
373
+ * - GLOBUS_CLIENT_SECRET
374
+ - annotation=Union[str, NoneType] required=False default=None description='Globus client secret for inbound/outbound transfers.'
375
+ * - OBJECT_STORE_ENDPOINT
376
+ - annotation=Union[str, NoneType] required=False default=None description='Object store Globus Endpoint ID.'
377
+ * - SCRATCH_ENDPOINT
378
+ - annotation=Union[str, NoneType] required=False default=None description='Scratch Globus Endpoint ID.'
379
+ * - SCRATCH_BASE_PATH
380
+ - annotation=str required=False default='scratch/' description='Base path for scratch storage.'
381
+ * - SCRATCH_INVENTORY_DB_COUNT
382
+ - annotation=int required=False default=16 description='Number of databases in the scratch inventory (redis).'
383
+ * - DOCS_BASE_URL
384
+ - annotation=str required=False default='my_test_url' description='Base URL for the documentation site.'
294
385
 
295
386
  Development
296
387
  -----------
@@ -0,0 +1,149 @@
1
+ dkist-processing-test
2
+ ---------------------
3
+
4
+ |codecov|
5
+
6
+ Overview
7
+ --------
8
+ The dkist-processing-test library serves as an example implementation of a Tasks and Workflows using the
9
+ `dkist-processing-core <https://pypi.org/project/dkist-processing-core/>`_ framework and
10
+ `dkist-processing-common <https://pypi.org/project/dkist-processing-common/>`_ Tasks.
11
+
12
+ The recommended project structure is to separate tasks and workflows into separate packages.
13
+
14
+ Build
15
+ -----
16
+ Artifacts are built through `bitbucket pipelines <bitbucket-pipelines.yml>`_
17
+
18
+ The pipeline can be used in other repos with a modification of the package and artifact locations
19
+ to use the names relevant to the target repo.
20
+
21
+ e.g. dkist-processing-test -> dkist-processing-vbi and dkist_processing_test -> dkist_processing_vbi
22
+
23
+ Deployment
24
+ ----------
25
+ Deployment is done with `turtlebot <https://bitbucket.org/dkistdc/turtlebot/src/master/>`_ and follows
26
+ the process detailed in `dkist-processing-core <https://pypi.org/project/dkist-processing-core/>`_
27
+
28
+ Environment Variables
29
+ ---------------------
30
+
31
+ .. list-table::
32
+ :widths: 10 90
33
+ :header-rows: 1
34
+
35
+ * - Variable
36
+ - Field Info
37
+ * - LOGURU_LEVEL
38
+ - annotation=str required=False default='INFO' alias_priority=2 validation_alias='LOGURU_LEVEL' description='Log level for the application'
39
+ * - MESH_CONFIG
40
+ - annotation=dict[str, MeshService] required=False default_factory=dict alias_priority=2 validation_alias='MESH_CONFIG' description='Service mesh configuration' examples=[{'upstream_service_name': {'mesh_address': 'localhost', 'mesh_port': 6742}}]
41
+ * - RETRY_CONFIG
42
+ - annotation=RetryConfig required=False default_factory=RetryConfig description='Retry configuration for the service'
43
+ * - OTEL_SERVICE_NAME
44
+ - annotation=str required=False default='unknown-service-name' alias_priority=2 validation_alias='OTEL_SERVICE_NAME' description='Service name for OpenTelemetry'
45
+ * - DKIST_SERVICE_VERSION
46
+ - annotation=str required=False default='unknown-service-version' alias_priority=2 validation_alias='DKIST_SERVICE_VERSION' description='Service version for OpenTelemetry'
47
+ * - NOMAD_ALLOC_ID
48
+ - annotation=str required=False default='unknown-allocation-id' alias_priority=2 validation_alias='NOMAD_ALLOC_ID' description='Nomad allocation ID for OpenTelemetry'
49
+ * - OTEL_EXPORTER_OTLP_TRACES_INSECURE
50
+ - annotation=bool required=False default=True description='Use insecure connection for OTLP traces'
51
+ * - OTEL_EXPORTER_OTLP_METRICS_INSECURE
52
+ - annotation=bool required=False default=True description='Use insecure connection for OTLP metrics'
53
+ * - OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
54
+ - annotation=Union[str, NoneType] required=False default=None description='OTLP traces endpoint. Overrides mesh configuration' examples=['localhost:4317']
55
+ * - OTEL_EXPORTER_OTLP_METRICS_ENDPOINT
56
+ - annotation=Union[str, NoneType] required=False default=None description='OTLP metrics endpoint. Overrides mesh configuration' examples=['localhost:4317']
57
+ * - OTEL_PYTHON_DISABLED_INSTRUMENTATIONS
58
+ - annotation=list[str] required=False default_factory=list description='List of instrumentations to disable. https://opentelemetry.io/docs/zero-code/python/configuration/' examples=[['pika', 'requests']]
59
+ * - OTEL_PYTHON_FASTAPI_EXCLUDED_URLS
60
+ - annotation=str required=False default='health' description='Comma separated list of URLs to exclude from OpenTelemetry instrumentation in FastAPI.' examples=['client/.*/info,healthcheck']
61
+ * - SYSTEM_METRIC_INSTRUMENTATION_CONFIG
62
+ - annotation=Union[dict[str, bool], NoneType] required=False default=None description='Configuration for system metric instrumentation. https://opentelemetry-python-contrib.readthedocs.io/en/latest/instrumentation/system_metrics/system_metrics.html' examples=[{'system.memory.usage': ['used', 'free', 'cached'], 'system.cpu.time': ['idle', 'user', 'system', 'irq'], 'system.network.io': ['transmit', 'receive'], 'process.runtime.memory': ['rss', 'vms'], 'process.runtime.cpu.time': ['user', 'system'], 'process.runtime.context_switches': ['involuntary', 'voluntary']}]
63
+ * - ISB_USERNAME
64
+ - annotation=str required=False default='guest' description='Username for the interservice-bus.'
65
+ * - ISB_PASSWORD
66
+ - annotation=str required=False default='guest' description='Password for the interservice-bus.'
67
+ * - ISB_EXCHANGE
68
+ - annotation=str required=False default='master.direct.x' description='Exchange for the interservice-bus.'
69
+ * - ISB_QUEUE_TYPE
70
+ - annotation=str required=False default='classic' description='Queue type for the interservice-bus.' examples=['quorum', 'classic']
71
+ * - BUILD_VERSION
72
+ - annotation=str required=False default='dev' description='Fallback build version for workflow tasks.'
73
+ * - GQL_AUTH_TOKEN
74
+ - annotation=Union[str, NoneType] required=False default='dev' description='The auth token for the metadata-store-api.'
75
+ * - OBJECT_STORE_ACCESS_KEY
76
+ - annotation=Union[str, NoneType] required=False default=None description='The access key for the object store.'
77
+ * - OBJECT_STORE_SECRET_KEY
78
+ - annotation=Union[str, NoneType] required=False default=None description='The secret key for the object store.'
79
+ * - OBJECT_STORE_USE_SSL
80
+ - annotation=bool required=False default=False description='Whether to use SSL for the object store connection.'
81
+ * - MULTIPART_THRESHOLD
82
+ - annotation=Union[int, NoneType] required=False default=None description='Multipart threshold for the object store.'
83
+ * - S3_CLIENT_CONFIG
84
+ - annotation=Union[dict, NoneType] required=False default=None description='S3 client configuration for the object store.'
85
+ * - S3_UPLOAD_CONFIG
86
+ - annotation=Union[dict, NoneType] required=False default=None description='S3 upload configuration for the object store.'
87
+ * - S3_DOWNLOAD_CONFIG
88
+ - annotation=Union[dict, NoneType] required=False default=None description='S3 download configuration for the object store.'
89
+ * - GLOBUS_TRANSPORT_PARAMS
90
+ - annotation=dict required=False default_factory=dict description='Globus transfer parameters.'
91
+ * - GLOBUS_CLIENT_ID
92
+ - annotation=Union[str, NoneType] required=False default=None description='Globus client ID for inbound/outbound transfers.'
93
+ * - GLOBUS_CLIENT_SECRET
94
+ - annotation=Union[str, NoneType] required=False default=None description='Globus client secret for inbound/outbound transfers.'
95
+ * - OBJECT_STORE_ENDPOINT
96
+ - annotation=Union[str, NoneType] required=False default=None description='Object store Globus Endpoint ID.'
97
+ * - SCRATCH_ENDPOINT
98
+ - annotation=Union[str, NoneType] required=False default=None description='Scratch Globus Endpoint ID.'
99
+ * - SCRATCH_BASE_PATH
100
+ - annotation=str required=False default='scratch/' description='Base path for scratch storage.'
101
+ * - SCRATCH_INVENTORY_DB_COUNT
102
+ - annotation=int required=False default=16 description='Number of databases in the scratch inventory (redis).'
103
+ * - DOCS_BASE_URL
104
+ - annotation=str required=False default='my_test_url' description='Base URL for the documentation site.'
105
+
106
+ Development
107
+ -----------
108
+
109
+ .. code-block:: bash
110
+
111
+ git clone git@bitbucket.org:dkistdc/dkist-processing-test.git
112
+ cd dkist-processing-test
113
+ pre-commit install
114
+ pip install -e .[test]
115
+ pytest -v --cov dkist_processing_test
116
+
117
+ Deployment
118
+ ----------
119
+
120
+ When a new release is ready to be built the following steps need to be taken:
121
+
122
+ 1. Freezing Dependencies
123
+ #########################
124
+
125
+ A new "frozen" extra is generated by the `dkist-dev-tools <https://bitbucket.org/dkistdc/dkist-dev-tools/src/main/>`_
126
+ package. If you don't have `dkist-dev-tools` installed please follow the directions from that repo.
127
+
128
+ To freeze dependencies run
129
+
130
+ .. code-block:: bash
131
+
132
+ ddt freeze vX.Y.Z[rcK]
133
+
134
+ Where "vX.Y.Z[rcK]" is the version about to be released.
135
+
136
+ 2. Tag and Push
137
+ ###############
138
+
139
+ Once all commits are in place add a git tag that will define the released version, then push the tags up to Bitbucket:
140
+
141
+ .. code-block:: bash
142
+
143
+ git tag vX.Y.Z[rcK]
144
+ git push --tags origin BRANCH
145
+
146
+ In the case of an rc, BRANCH will likely be your development branch. For full releases BRANCH should be "main".
147
+
148
+ .. |codecov| image:: https://codecov.io/bb/dkistdc/dkist-processing-test/graph/badge.svg?token=U004CWS46G
149
+ :target: https://codecov.io/bb/dkistdc/dkist-processing-test
@@ -40,25 +40,25 @@ class GenerateCalibratedData(WorkflowTaskBase):
40
40
 
41
41
  def run(self):
42
42
  rng = np.random.default_rng()
43
- with self.apm_task_step("Create debug frame"):
43
+ with self.telemetry_span("Create debug frame"):
44
44
  self.write(
45
45
  data=np.arange(10), tags=[Tag.frame(), Tag.debug()], encoder=fits_array_encoder
46
46
  )
47
47
 
48
- with self.apm_task_step("Creating intermediate frame"):
48
+ with self.telemetry_span("Creating intermediate frame"):
49
49
  self.write(
50
50
  data=np.arange(5),
51
51
  tags=[Tag.frame(), Tag.intermediate(), Tag.task("DUMMY")],
52
52
  encoder=fits_array_encoder,
53
53
  )
54
54
 
55
- with self.apm_task_step("Creating unique frames"):
55
+ with self.telemetry_span("Creating unique frames"):
56
56
  for _ in range(2):
57
57
  self.write(data=np.arange(3), tags=["FOO", "BAR"], encoder=fits_array_encoder)
58
58
 
59
59
  self.write(data={"test": "dictionary"}, tags=["BAZ"], encoder=json_encoder)
60
60
 
61
- with self.apm_task_step(
61
+ with self.telemetry_span(
62
62
  "Creating frames that won't be used or transferred as trial outputs"
63
63
  ):
64
64
  self.write(data=b"123", tags=[Tag.intermediate(), Tag.task("NOT_USED"), Tag.frame()])
@@ -67,11 +67,11 @@ class GenerateCalibratedData(WorkflowTaskBase):
67
67
  logger.info(f"Using {self.parameters.value_message = }")
68
68
  logger.info(f"Using {self.parameters.file_message = }")
69
69
 
70
- with self.apm_task_step("Loop over inputs"):
70
+ with self.telemetry_span("Loop over inputs"):
71
71
  count = 1 # keep a running count to increment the dsps repeat number
72
72
  for hdu in self.read(tags=Tag.input(), decoder=fits_hdu_decoder):
73
73
  header = hdu.header
74
- with self.apm_processing_step("Doing some calculations"):
74
+ with self.telemetry_span("Doing some calculations"):
75
75
  header["DSPSNUM"] = count
76
76
  data = hdu.data
77
77
 
@@ -96,7 +96,7 @@ class GenerateCalibratedData(WorkflowTaskBase):
96
96
  wavelength_category = self.parameters.wavelength_category
97
97
  header["WAVECAT"] = wavelength_category
98
98
 
99
- with self.apm_writing_step("Writing data"):
99
+ with self.telemetry_span("Writing data"):
100
100
  output_hdul = fits.HDUList([output_hdu])
101
101
  self.write(
102
102
  data=output_hdul,
@@ -10,7 +10,7 @@ __all__ = ["ManualWithProvenance", "ManualWithoutProvenance"]
10
10
 
11
11
  class ManualBase(WorkflowTaskBase):
12
12
  def run(self):
13
- with self.apm_task_step("NoOp"):
13
+ with self.telemetry_span("NoOp"):
14
14
  pass
15
15
 
16
16
 
@@ -23,7 +23,7 @@ class MakeTestMovieFrames(WorkflowTaskBase):
23
23
 
24
24
  def run(self):
25
25
  for d in range(1, self.constants.num_dsps_repeats + 1):
26
- with self.apm_task_step(f"Workign on dsps repeat {d}"):
26
+ with self.telemetry_span(f"Workign on dsps repeat {d}"):
27
27
  for hdu in self.read(
28
28
  tags=[Tag.calibrated(), Tag.dsps_repeat(d)], decoder=fits_hdu_decoder
29
29
  ):
@@ -32,7 +32,7 @@ class MakeTestMovieFrames(WorkflowTaskBase):
32
32
  output_hdu = fits.PrimaryHDU(data=data, header=header)
33
33
  output_hdul = fits.HDUList([output_hdu])
34
34
 
35
- with self.apm_writing_step("Writing data"):
35
+ with self.telemetry_span("Writing data"):
36
36
  self.write(
37
37
  data=output_hdul,
38
38
  tags=[Tag.movie_frame(), Tag.dsps_repeat(d)],
@@ -447,6 +447,18 @@ class CommonDataset(Spec122Dataset):
447
447
  self.add_constant_key("DKIST008", num_dsps_repeats)
448
448
  self.add_constant_key("BZERO", 0)
449
449
  self.add_constant_key("BSCALE", 1)
450
+ self.add_constant_key("CAM__001", "camera_id")
451
+ self.add_constant_key("CAM__002", "camera_name")
452
+ self.add_constant_key("CAM__003", 1) # camera_bit_depth
453
+ self.add_constant_key("CAM__009", 1) # hardware_binning_x
454
+ self.add_constant_key("CAM__010", 1) # hardware_binning_y
455
+ self.add_constant_key("CAM__011", 1) # software_binning_x
456
+ self.add_constant_key("CAM__012", 1) # software_binning_y
457
+ self.add_constant_key("ID___014", "v1") # hls_version
458
+ self.add_constant_key("TELTRACK", "Fixed Solar Rotation Tracking")
459
+ self.add_constant_key("TTBLTRCK", "fixed angle on sun")
460
+ self.add_constant_key("TELSCAN", "Raster")
461
+ self.add_constant_key("CAM__014", 10) # num_raw_frames_per_fpa
450
462
 
451
463
  # Because these test data are from "ViSP" we need to add these keys,
452
464
  # which would normally be added by the `*-processing-visp` science task (although they are not