dkist-processing-test 1.26.4__tar.gz → 1.26.6rc1__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 (43) hide show
  1. {dkist_processing_test-1.26.4/dkist_processing_test.egg-info → dkist_processing_test-1.26.6rc1}/PKG-INFO +18 -17
  2. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test/models/parameters.py +9 -3
  3. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test/tasks/fake_science.py +2 -3
  4. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test/tests/test_tasks.py +149 -47
  5. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1/dkist_processing_test.egg-info}/PKG-INFO +18 -17
  6. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test.egg-info/SOURCES.txt +0 -2
  7. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test.egg-info/requires.txt +17 -16
  8. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/pyproject.toml +19 -18
  9. dkist_processing_test-1.26.4/dkist_processing_test/tests/parameter_models.py +0 -130
  10. dkist_processing_test-1.26.4/dkist_processing_test/tests/test_parameters.py +0 -151
  11. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/.gitignore +0 -0
  12. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/.pre-commit-config.yaml +0 -0
  13. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/.snyk +0 -0
  14. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/README.rst +0 -0
  15. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/bitbucket-pipelines.yml +0 -0
  16. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test/__init__.py +0 -0
  17. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test/config.py +0 -0
  18. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test/models/__init__.py +0 -0
  19. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test/models/constants.py +0 -0
  20. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test/tasks/__init__.py +0 -0
  21. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test/tasks/exercise_numba.py +0 -0
  22. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test/tasks/fail.py +0 -0
  23. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test/tasks/high_memory.py +0 -0
  24. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test/tasks/manual.py +0 -0
  25. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test/tasks/movie.py +0 -0
  26. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test/tasks/noop.py +0 -0
  27. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test/tasks/parse.py +0 -0
  28. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test/tasks/quality.py +0 -0
  29. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test/tasks/write_l1.py +0 -0
  30. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test/tests/__init__.py +0 -0
  31. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test/tests/conftest.py +0 -0
  32. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test/tests/test_workflows.py +0 -0
  33. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test/workflows/__init__.py +0 -0
  34. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test/workflows/common_tasks.py +0 -0
  35. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test/workflows/end_to_end.py +0 -0
  36. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test/workflows/exercise_numba.py +0 -0
  37. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test/workflows/fail.py +0 -0
  38. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test/workflows/noop.py +0 -0
  39. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test/workflows/resource_queue.py +0 -0
  40. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test/workflows/trial_end_to_end.py +0 -0
  41. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test.egg-info/dependency_links.txt +0 -0
  42. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/dkist_processing_test.egg-info/top_level.txt +0 -0
  43. {dkist_processing_test-1.26.4 → dkist_processing_test-1.26.6rc1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dkist-processing-test
3
- Version: 1.26.4
3
+ Version: 1.26.6rc1
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,10 +12,10 @@ Classifier: Programming Language :: Python :: 3
12
12
  Classifier: Programming Language :: Python :: 3.11
13
13
  Requires-Python: >=3.11
14
14
  Description-Content-Type: text/x-rst
15
- Requires-Dist: dkist-processing-common==10.8.3
15
+ Requires-Dist: dkist-processing-common==10.8.4rc1
16
16
  Requires-Dist: dkist-header-validator==5.2.1
17
17
  Requires-Dist: dkist-service-configuration==2.3.0
18
- Requires-Dist: dkist-fits-specifications==4.16.0
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
21
21
  Requires-Dist: numpy==2.2.5
@@ -63,7 +63,7 @@ Requires-Dist: WTForms==3.2.1; extra == "frozen"
63
63
  Requires-Dist: Werkzeug==2.2.3; extra == "frozen"
64
64
  Requires-Dist: aioftp==0.25.1; extra == "frozen"
65
65
  Requires-Dist: aiohappyeyeballs==2.6.1; extra == "frozen"
66
- Requires-Dist: aiohttp==3.12.2; extra == "frozen"
66
+ Requires-Dist: aiohttp==3.12.6; extra == "frozen"
67
67
  Requires-Dist: aiosignal==1.3.2; extra == "frozen"
68
68
  Requires-Dist: alembic==1.16.1; extra == "frozen"
69
69
  Requires-Dist: amqp==5.3.1; extra == "frozen"
@@ -89,16 +89,16 @@ Requires-Dist: asdf_transform_schemas==0.6.0; extra == "frozen"
89
89
  Requires-Dist: asgiref==3.8.1; extra == "frozen"
90
90
  Requires-Dist: asteval==1.0.6; extra == "frozen"
91
91
  Requires-Dist: astropy==7.0.2; extra == "frozen"
92
- Requires-Dist: astropy-iers-data==0.2025.5.26.0.37.21; extra == "frozen"
92
+ Requires-Dist: astropy-iers-data==0.2025.6.2.0.38.23; extra == "frozen"
93
93
  Requires-Dist: asyncpg==0.30.0; extra == "frozen"
94
94
  Requires-Dist: attrs==25.3.0; extra == "frozen"
95
95
  Requires-Dist: babel==2.17.0; extra == "frozen"
96
96
  Requires-Dist: billiard==4.2.1; extra == "frozen"
97
97
  Requires-Dist: blinker==1.9.0; extra == "frozen"
98
- Requires-Dist: boto3==1.38.24; extra == "frozen"
99
- Requires-Dist: botocore==1.38.24; extra == "frozen"
98
+ Requires-Dist: boto3==1.38.27; extra == "frozen"
99
+ Requires-Dist: botocore==1.38.27; extra == "frozen"
100
100
  Requires-Dist: cachelib==0.13.0; extra == "frozen"
101
- Requires-Dist: celery==5.5.2; extra == "frozen"
101
+ Requires-Dist: celery==5.5.3; extra == "frozen"
102
102
  Requires-Dist: certifi==2025.4.26; extra == "frozen"
103
103
  Requires-Dist: cffi==1.17.1; extra == "frozen"
104
104
  Requires-Dist: charset-normalizer==3.4.2; extra == "frozen"
@@ -119,13 +119,13 @@ Requires-Dist: dacite==1.9.2; extra == "frozen"
119
119
  Requires-Dist: decorator==5.2.1; extra == "frozen"
120
120
  Requires-Dist: dill==0.4.0; extra == "frozen"
121
121
  Requires-Dist: dkist-header-validator==5.2.1; extra == "frozen"
122
- Requires-Dist: dkist-processing-common==10.8.3; extra == "frozen"
122
+ Requires-Dist: dkist-processing-common==10.8.4rc1; extra == "frozen"
123
123
  Requires-Dist: dkist-processing-core==5.1.1; extra == "frozen"
124
124
  Requires-Dist: dkist-processing-pac==3.1.1; extra == "frozen"
125
- Requires-Dist: dkist-processing-test==1.26.4; extra == "frozen"
125
+ Requires-Dist: dkist-processing-test==1.26.6rc1; extra == "frozen"
126
126
  Requires-Dist: dkist-service-configuration==2.3.0; extra == "frozen"
127
127
  Requires-Dist: dkist-spectral-lines==3.0.0; extra == "frozen"
128
- Requires-Dist: dkist_fits_specifications==4.16.0; extra == "frozen"
128
+ Requires-Dist: dkist_fits_specifications==4.17.0; extra == "frozen"
129
129
  Requires-Dist: dnspython==2.7.0; extra == "frozen"
130
130
  Requires-Dist: ecs-logging==2.2.0; extra == "frozen"
131
131
  Requires-Dist: elastic-apm==6.23.0; extra == "frozen"
@@ -139,7 +139,8 @@ Requires-Dist: globus-sdk==3.56.1; extra == "frozen"
139
139
  Requires-Dist: google-re2==1.1.20240702; extra == "frozen"
140
140
  Requires-Dist: googleapis-common-protos==1.70.0; extra == "frozen"
141
141
  Requires-Dist: gqlclient==1.2.3; extra == "frozen"
142
- Requires-Dist: grpcio==1.71.0; extra == "frozen"
142
+ Requires-Dist: greenlet==3.2.2; extra == "frozen"
143
+ Requires-Dist: grpcio==1.72.1; extra == "frozen"
143
144
  Requires-Dist: gunicorn==23.0.0; extra == "frozen"
144
145
  Requires-Dist: h11==0.16.0; extra == "frozen"
145
146
  Requires-Dist: httpcore==1.0.9; extra == "frozen"
@@ -156,7 +157,7 @@ Requires-Dist: jsonschema==4.24.0; extra == "frozen"
156
157
  Requires-Dist: jsonschema-specifications==2025.4.1; extra == "frozen"
157
158
  Requires-Dist: jupyter_core==5.8.1; extra == "frozen"
158
159
  Requires-Dist: kiwisolver==1.4.8; extra == "frozen"
159
- Requires-Dist: kombu==5.5.3; extra == "frozen"
160
+ Requires-Dist: kombu==5.5.4; extra == "frozen"
160
161
  Requires-Dist: lazy-object-proxy==1.11.0; extra == "frozen"
161
162
  Requires-Dist: limits==5.2.0; extra == "frozen"
162
163
  Requires-Dist: linkify-it-py==2.0.3; extra == "frozen"
@@ -200,10 +201,10 @@ Requires-Dist: platformdirs==4.3.8; extra == "frozen"
200
201
  Requires-Dist: pluggy==1.6.0; extra == "frozen"
201
202
  Requires-Dist: prison==0.2.1; extra == "frozen"
202
203
  Requires-Dist: proglog==0.1.12; extra == "frozen"
203
- Requires-Dist: prometheus_client==0.22.0; extra == "frozen"
204
+ Requires-Dist: prometheus_client==0.22.1; extra == "frozen"
204
205
  Requires-Dist: prompt_toolkit==3.0.51; extra == "frozen"
205
206
  Requires-Dist: propcache==0.3.1; extra == "frozen"
206
- Requires-Dist: protobuf==5.29.4; extra == "frozen"
207
+ Requires-Dist: protobuf==5.29.5; extra == "frozen"
207
208
  Requires-Dist: psutil==7.0.0; extra == "frozen"
208
209
  Requires-Dist: psycopg2-binary==2.9.10; extra == "frozen"
209
210
  Requires-Dist: py==1.11.0; extra == "frozen"
@@ -232,7 +233,7 @@ Requires-Dist: s3transfer==0.13.0; extra == "frozen"
232
233
  Requires-Dist: scipy==1.15.3; extra == "frozen"
233
234
  Requires-Dist: semantic-version==2.10.0; extra == "frozen"
234
235
  Requires-Dist: setproctitle==1.3.6; extra == "frozen"
235
- Requires-Dist: setuptools==69.2.0; extra == "frozen"
236
+ Requires-Dist: setuptools==65.5.0; extra == "frozen"
236
237
  Requires-Dist: six==1.17.0; extra == "frozen"
237
238
  Requires-Dist: sniffio==1.3.1; extra == "frozen"
238
239
  Requires-Dist: sqids==0.5.1; extra == "frozen"
@@ -247,7 +248,7 @@ Requires-Dist: tornado==6.5.1; extra == "frozen"
247
248
  Requires-Dist: tqdm==4.67.1; extra == "frozen"
248
249
  Requires-Dist: traitlets==5.14.3; extra == "frozen"
249
250
  Requires-Dist: typing-inspection==0.4.1; extra == "frozen"
250
- Requires-Dist: typing_extensions==4.13.2; extra == "frozen"
251
+ Requires-Dist: typing_extensions==4.14.0; extra == "frozen"
251
252
  Requires-Dist: tzdata==2025.2; extra == "frozen"
252
253
  Requires-Dist: uc-micro-py==1.0.3; extra == "frozen"
253
254
  Requires-Dist: uncertainties==3.2.3; extra == "frozen"
@@ -2,6 +2,8 @@ import json
2
2
  from datetime import datetime
3
3
 
4
4
  import numpy as np
5
+ from dkist_processing_common.codecs.json import json_decoder
6
+ from dkist_processing_common.models.input_dataset import InputDatasetFilePointer
5
7
  from dkist_processing_common.models.parameters import ParameterBase
6
8
  from dkist_processing_common.models.parameters import ParameterWavelengthMixin
7
9
 
@@ -9,6 +11,12 @@ from dkist_processing_common.models.parameters import ParameterWavelengthMixin
9
11
  class TestParameters(ParameterBase, ParameterWavelengthMixin):
10
12
  """Class to test loading parameters from a file."""
11
13
 
14
+ def _load_param_value_from_json_file(self, param_obj: InputDatasetFilePointer) -> np.ndarray:
15
+ """Return the data associated with a tagged parameter file saved with a sting message."""
16
+ tag = param_obj.file_pointer.tag
17
+ param_value = self._read_parameter_file(tag=tag, decoder=json_decoder)
18
+ return param_value
19
+
12
20
  @property
13
21
  def randomness(self) -> (float, float):
14
22
  """A dummy parameter that requires loading a file."""
@@ -44,8 +52,6 @@ class TestParameters(ParameterBase, ParameterWavelengthMixin):
44
52
  def file_message(self) -> str:
45
53
  """A dummy parameter that returns a message from a file."""
46
54
  param_dict = self._find_most_recent_past_value("test_message_file")
47
- file_path = param_dict["param_path"]
48
- with open(file_path, "r") as f:
49
- message = json.load(f)
55
+ message = self._load_param_value_from_json_file(param_dict)
50
56
 
51
57
  return message
@@ -9,7 +9,6 @@ from dkist_processing_common.codecs.fits import fits_hdulist_encoder
9
9
  from dkist_processing_common.codecs.json import json_encoder
10
10
  from dkist_processing_common.models.tags import Tag
11
11
  from dkist_processing_common.tasks import WorkflowTaskBase
12
- from dkist_processing_common.tasks.mixin.input_dataset import InputDatasetMixin
13
12
  from dkist_service_configuration.logging import logger
14
13
 
15
14
  from dkist_processing_test.models.parameters import TestParameters
@@ -17,7 +16,7 @@ from dkist_processing_test.models.parameters import TestParameters
17
16
  __all__ = ["GenerateCalibratedData"]
18
17
 
19
18
 
20
- class GenerateCalibratedData(WorkflowTaskBase, InputDatasetMixin):
19
+ class GenerateCalibratedData(WorkflowTaskBase):
21
20
 
22
21
  record_provenance = True
23
22
 
@@ -33,7 +32,7 @@ class GenerateCalibratedData(WorkflowTaskBase, InputDatasetMixin):
33
32
  workflow_version=workflow_version,
34
33
  )
35
34
  self.parameters = TestParameters(
36
- self.input_dataset_parameters,
35
+ scratch=self.scratch,
37
36
  obs_ip_start_time=self.constants.obs_ip_start_time,
38
37
  wavelength=2.0,
39
38
  )
@@ -16,11 +16,17 @@ from astropy.io import fits
16
16
  from dkist_data_simulator.spec122 import Spec122Dataset
17
17
  from dkist_header_validator import spec122_validator
18
18
  from dkist_processing_common._util.scratch import WorkflowFileSystem
19
+ from dkist_processing_common.codecs.basemodel import basemodel_encoder
19
20
  from dkist_processing_common.codecs.fits import fits_hdu_decoder
20
21
  from dkist_processing_common.codecs.fits import fits_hdulist_encoder
21
22
  from dkist_processing_common.codecs.json import json_encoder
22
23
  from dkist_processing_common.models.constants import BudName
23
24
  from dkist_processing_common.models.constants import ConstantsBase
25
+ from dkist_processing_common.models.input_dataset import InputDatasetFilePointer
26
+ from dkist_processing_common.models.input_dataset import InputDatasetObject
27
+ from dkist_processing_common.models.input_dataset import InputDatasetParameter
28
+ from dkist_processing_common.models.input_dataset import InputDatasetParameterValue
29
+ from dkist_processing_common.models.input_dataset import InputDatasetPartDocumentList
24
30
  from dkist_processing_common.models.tags import Tag
25
31
  from dkist_processing_common.models.task_name import TaskName
26
32
  from dkist_processing_common.tasks import TransferTrialData
@@ -38,10 +44,6 @@ from dkist_processing_test.tasks.noop import NoOpTask
38
44
  from dkist_processing_test.tasks.write_l1 import WriteL1Data
39
45
  from dkist_processing_test.tests.conftest import generate_214_l0_fits_frame
40
46
  from dkist_processing_test.tests.conftest import S122Headers
41
- from dkist_processing_test.tests.parameter_models import MultipleParameterValues
42
- from dkist_processing_test.tests.parameter_models import ParameterValue
43
- from dkist_processing_test.tests.parameter_models import RawFileParameterValue
44
- from dkist_processing_test.tests.parameter_models import TestParameterValues
45
47
 
46
48
 
47
49
  @dataclass
@@ -143,7 +145,7 @@ def generate_calibrated_data_task(
143
145
  )
144
146
 
145
147
  # Write parameter files
146
- hdul = random_parameter_hdulist[0]
148
+ hdul, _, _, _ = random_parameter_hdulist
147
149
  task.write(
148
150
  data=hdul,
149
151
  tags=Tag.parameter(array_parameter_file_object_key),
@@ -171,69 +173,169 @@ def generate_calibrated_data_task(
171
173
 
172
174
 
173
175
  @pytest.fixture(scope="session")
174
- def input_dataset_document_parameters_part_json(
175
- array_parameter_file_object_key,
176
- early_json_parameter_file_object_key,
177
- late_json_parameter_file_object_key,
178
- early_value_message_str,
179
- late_value_message_str,
180
- early_date,
181
- late_date,
176
+ def array_file_parameter(
177
+ random_parameter_hdulist, array_parameter_file_object_key
178
+ ) -> tuple[list[InputDatasetParameterValue], float, float, float]:
179
+ hdul, mu, std, const = random_parameter_hdulist
180
+
181
+ parameter_array_file_values = [
182
+ InputDatasetParameterValue(
183
+ parameterValueId=randint(1000, 2000),
184
+ parameterValue=InputDatasetFilePointer(
185
+ file_pointer=InputDatasetObject(
186
+ objectKey=array_parameter_file_object_key,
187
+ bucket="not_used",
188
+ tag=Tag.parameter(array_parameter_file_object_key),
189
+ )
190
+ ).model_dump_json(),
191
+ parameterValueStartDate=datetime(1946, 11, 20),
192
+ )
193
+ ]
194
+ return parameter_array_file_values, mu, std, const
195
+
196
+
197
+ @pytest.fixture(scope="session")
198
+ def wavelength_parameter() -> list[InputDatasetParameterValue]:
199
+ value = {"wavelength": (1.0, 2.0, 3.0), "values": ("one", "two", "three")}
200
+
201
+ parameter_value = [
202
+ InputDatasetParameterValue(
203
+ parameter_value_id=randint(1000, 2000),
204
+ parameter_value=json.dumps(value),
205
+ parameter_value_start_date=datetime(1946, 11, 20),
206
+ )
207
+ ]
208
+ return parameter_value
209
+
210
+
211
+ @pytest.fixture(scope="session")
212
+ def message_parameters(
213
+ early_value_message_str, late_value_message_str, early_date, late_date
214
+ ) -> list[InputDatasetParameterValue]:
215
+ parameter_values = [
216
+ InputDatasetParameterValue(
217
+ parameterValueId=randint(1000, 2000),
218
+ parameterValue=json.dumps(early_value_message_str),
219
+ parameterValueStartDate=early_date,
220
+ ),
221
+ InputDatasetParameterValue(
222
+ parameterValueId=randint(1000, 2000),
223
+ parameterValue=json.dumps(late_value_message_str),
224
+ parameterValueStartDate=late_date,
225
+ ),
226
+ ]
227
+ return parameter_values
228
+
229
+
230
+ @pytest.fixture(scope="session")
231
+ def message_file_parameters(
232
+ early_json_parameter_file_object_key, late_json_parameter_file_object_key, early_date, late_date
233
+ ) -> list[InputDatasetParameterValue]:
234
+ parameter_values = [
235
+ InputDatasetParameterValue(
236
+ parameterValueId=randint(1000, 2000),
237
+ parameterValue=InputDatasetFilePointer(
238
+ file_pointer=InputDatasetObject(
239
+ objectKey=early_json_parameter_file_object_key,
240
+ bucket="not_used",
241
+ tag=Tag.parameter(early_json_parameter_file_object_key),
242
+ )
243
+ ).model_dump_json(),
244
+ parameterValueStartDate=early_date,
245
+ ),
246
+ InputDatasetParameterValue(
247
+ parameterValueId=randint(1000, 2000),
248
+ parameterValue=InputDatasetFilePointer(
249
+ file_pointer=InputDatasetObject(
250
+ objectKey=late_json_parameter_file_object_key,
251
+ bucket="not_used",
252
+ tag=Tag.parameter(late_json_parameter_file_object_key),
253
+ )
254
+ ).model_dump_json(),
255
+ parameterValueStartDate=late_date,
256
+ ),
257
+ ]
258
+ return parameter_values
259
+
260
+
261
+ @pytest.fixture(scope="session")
262
+ def input_dataset_document_parameters_part_basemodel(
263
+ array_file_parameter,
264
+ wavelength_parameter,
265
+ message_parameters,
266
+ message_file_parameters,
182
267
  ):
268
+ parameter_array_file_values, _, _, _ = array_file_parameter
269
+
270
+ parameter_wavelength_values = wavelength_parameter
271
+
272
+ parameter_message_values = message_parameters
183
273
 
184
- message_file_values = MultipleParameterValues(
185
- parameter_value_list=[
186
- ParameterValue(
187
- parameterValue=RawFileParameterValue(
188
- objectKey=early_json_parameter_file_object_key
189
- ),
190
- parameterValueStartDate=early_date,
274
+ parameter_file_values = message_file_parameters
275
+
276
+ parameters_obj = InputDatasetPartDocumentList(
277
+ doc_list=[
278
+ InputDatasetParameter(
279
+ parameter_name="test_random_data", parameter_values=parameter_array_file_values
191
280
  ),
192
- ParameterValue(
193
- parameterValue=RawFileParameterValue(objectKey=late_json_parameter_file_object_key),
194
- parameterValueStartDate=late_date,
281
+ InputDatasetParameter(
282
+ parameter_name="test_wavelength_category",
283
+ parameter_values=parameter_wavelength_values,
195
284
  ),
196
- ]
197
- )
198
- message_value_values = MultipleParameterValues(
199
- parameter_value_list=[
200
- ParameterValue(
201
- parameterValue=early_value_message_str,
202
- parameterValueStartDate=early_date,
285
+ InputDatasetParameter(
286
+ parameter_name="test_message", parameter_values=parameter_message_values
203
287
  ),
204
- ParameterValue(
205
- parameterValue=late_value_message_str,
206
- parameterValueStartDate=late_date,
288
+ InputDatasetParameter(
289
+ parameter_name="test_message_file", parameter_values=parameter_file_values
207
290
  ),
208
291
  ]
209
292
  )
210
- parameters_obj = TestParameterValues(
211
- test_random_data=RawFileParameterValue(objectKey=array_parameter_file_object_key),
212
- test_message_file=message_file_values,
213
- test_message=message_value_values,
214
- )
215
-
216
- part_json_str = parameters_obj.model_dump_json()
217
293
 
218
- return part_json_str
294
+ return parameters_obj
219
295
 
220
296
 
221
297
  @pytest.fixture(scope="session")
222
298
  def assign_input_dataset_doc_to_task(
223
- input_dataset_document_parameters_part_json,
299
+ input_dataset_document_parameters_part_basemodel,
224
300
  ):
225
301
  def update_task(task, obs_ip_start_time=None):
226
- doc_path = task.scratch.workflow_base_path / "dataset_parameters.json"
227
- with open(doc_path, "w") as f:
228
- f.write(input_dataset_document_parameters_part_json)
229
- task.tag(doc_path, Tag.input_dataset_parameters())
302
+ task.write(
303
+ data=input_dataset_document_parameters_part_basemodel,
304
+ tags=Tag.input_dataset_parameters(),
305
+ encoder=basemodel_encoder,
306
+ )
230
307
  task.parameters = TestParameters(
231
- task.input_dataset_parameters, wavelength=2.0, obs_ip_start_time=obs_ip_start_time
308
+ scratch=task.scratch, wavelength=2.0, obs_ip_start_time=obs_ip_start_time
232
309
  )
233
310
 
234
311
  return update_task
235
312
 
236
313
 
314
+ @pytest.mark.parametrize("early_or_late", [pytest.param("early")])
315
+ def test_generate_calibrated_data_parameters(
316
+ generate_calibrated_data_task,
317
+ array_file_parameter,
318
+ early_file_message_str,
319
+ early_value_message_str,
320
+ early_or_late,
321
+ ):
322
+ """
323
+ Given: A GenerateCalibratedData task
324
+ When: Accessing the task's parameters
325
+ Then: The correct values are returned
326
+ """
327
+ task, _ = generate_calibrated_data_task
328
+ _, mu, std, const = array_file_parameter
329
+
330
+ assert type(task.parameters.randomness) is tuple
331
+ np.testing.assert_allclose(np.array(task.parameters.randomness), np.array([mu, std]), rtol=1)
332
+
333
+ assert task.parameters.constant == const
334
+ assert task.parameters.wavelength_category == "two"
335
+ assert task.parameters.value_message == early_value_message_str
336
+ assert task.parameters.file_message == early_file_message_str
337
+
338
+
237
339
  @pytest.fixture
238
340
  def link_constants_db():
239
341
  return constants_linker
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dkist-processing-test
3
- Version: 1.26.4
3
+ Version: 1.26.6rc1
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,10 +12,10 @@ Classifier: Programming Language :: Python :: 3
12
12
  Classifier: Programming Language :: Python :: 3.11
13
13
  Requires-Python: >=3.11
14
14
  Description-Content-Type: text/x-rst
15
- Requires-Dist: dkist-processing-common==10.8.3
15
+ Requires-Dist: dkist-processing-common==10.8.4rc1
16
16
  Requires-Dist: dkist-header-validator==5.2.1
17
17
  Requires-Dist: dkist-service-configuration==2.3.0
18
- Requires-Dist: dkist-fits-specifications==4.16.0
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
21
21
  Requires-Dist: numpy==2.2.5
@@ -63,7 +63,7 @@ Requires-Dist: WTForms==3.2.1; extra == "frozen"
63
63
  Requires-Dist: Werkzeug==2.2.3; extra == "frozen"
64
64
  Requires-Dist: aioftp==0.25.1; extra == "frozen"
65
65
  Requires-Dist: aiohappyeyeballs==2.6.1; extra == "frozen"
66
- Requires-Dist: aiohttp==3.12.2; extra == "frozen"
66
+ Requires-Dist: aiohttp==3.12.6; extra == "frozen"
67
67
  Requires-Dist: aiosignal==1.3.2; extra == "frozen"
68
68
  Requires-Dist: alembic==1.16.1; extra == "frozen"
69
69
  Requires-Dist: amqp==5.3.1; extra == "frozen"
@@ -89,16 +89,16 @@ Requires-Dist: asdf_transform_schemas==0.6.0; extra == "frozen"
89
89
  Requires-Dist: asgiref==3.8.1; extra == "frozen"
90
90
  Requires-Dist: asteval==1.0.6; extra == "frozen"
91
91
  Requires-Dist: astropy==7.0.2; extra == "frozen"
92
- Requires-Dist: astropy-iers-data==0.2025.5.26.0.37.21; extra == "frozen"
92
+ Requires-Dist: astropy-iers-data==0.2025.6.2.0.38.23; extra == "frozen"
93
93
  Requires-Dist: asyncpg==0.30.0; extra == "frozen"
94
94
  Requires-Dist: attrs==25.3.0; extra == "frozen"
95
95
  Requires-Dist: babel==2.17.0; extra == "frozen"
96
96
  Requires-Dist: billiard==4.2.1; extra == "frozen"
97
97
  Requires-Dist: blinker==1.9.0; extra == "frozen"
98
- Requires-Dist: boto3==1.38.24; extra == "frozen"
99
- Requires-Dist: botocore==1.38.24; extra == "frozen"
98
+ Requires-Dist: boto3==1.38.27; extra == "frozen"
99
+ Requires-Dist: botocore==1.38.27; extra == "frozen"
100
100
  Requires-Dist: cachelib==0.13.0; extra == "frozen"
101
- Requires-Dist: celery==5.5.2; extra == "frozen"
101
+ Requires-Dist: celery==5.5.3; extra == "frozen"
102
102
  Requires-Dist: certifi==2025.4.26; extra == "frozen"
103
103
  Requires-Dist: cffi==1.17.1; extra == "frozen"
104
104
  Requires-Dist: charset-normalizer==3.4.2; extra == "frozen"
@@ -119,13 +119,13 @@ Requires-Dist: dacite==1.9.2; extra == "frozen"
119
119
  Requires-Dist: decorator==5.2.1; extra == "frozen"
120
120
  Requires-Dist: dill==0.4.0; extra == "frozen"
121
121
  Requires-Dist: dkist-header-validator==5.2.1; extra == "frozen"
122
- Requires-Dist: dkist-processing-common==10.8.3; extra == "frozen"
122
+ Requires-Dist: dkist-processing-common==10.8.4rc1; extra == "frozen"
123
123
  Requires-Dist: dkist-processing-core==5.1.1; extra == "frozen"
124
124
  Requires-Dist: dkist-processing-pac==3.1.1; extra == "frozen"
125
- Requires-Dist: dkist-processing-test==1.26.4; extra == "frozen"
125
+ Requires-Dist: dkist-processing-test==1.26.6rc1; extra == "frozen"
126
126
  Requires-Dist: dkist-service-configuration==2.3.0; extra == "frozen"
127
127
  Requires-Dist: dkist-spectral-lines==3.0.0; extra == "frozen"
128
- Requires-Dist: dkist_fits_specifications==4.16.0; extra == "frozen"
128
+ Requires-Dist: dkist_fits_specifications==4.17.0; extra == "frozen"
129
129
  Requires-Dist: dnspython==2.7.0; extra == "frozen"
130
130
  Requires-Dist: ecs-logging==2.2.0; extra == "frozen"
131
131
  Requires-Dist: elastic-apm==6.23.0; extra == "frozen"
@@ -139,7 +139,8 @@ Requires-Dist: globus-sdk==3.56.1; extra == "frozen"
139
139
  Requires-Dist: google-re2==1.1.20240702; extra == "frozen"
140
140
  Requires-Dist: googleapis-common-protos==1.70.0; extra == "frozen"
141
141
  Requires-Dist: gqlclient==1.2.3; extra == "frozen"
142
- Requires-Dist: grpcio==1.71.0; extra == "frozen"
142
+ Requires-Dist: greenlet==3.2.2; extra == "frozen"
143
+ Requires-Dist: grpcio==1.72.1; extra == "frozen"
143
144
  Requires-Dist: gunicorn==23.0.0; extra == "frozen"
144
145
  Requires-Dist: h11==0.16.0; extra == "frozen"
145
146
  Requires-Dist: httpcore==1.0.9; extra == "frozen"
@@ -156,7 +157,7 @@ Requires-Dist: jsonschema==4.24.0; extra == "frozen"
156
157
  Requires-Dist: jsonschema-specifications==2025.4.1; extra == "frozen"
157
158
  Requires-Dist: jupyter_core==5.8.1; extra == "frozen"
158
159
  Requires-Dist: kiwisolver==1.4.8; extra == "frozen"
159
- Requires-Dist: kombu==5.5.3; extra == "frozen"
160
+ Requires-Dist: kombu==5.5.4; extra == "frozen"
160
161
  Requires-Dist: lazy-object-proxy==1.11.0; extra == "frozen"
161
162
  Requires-Dist: limits==5.2.0; extra == "frozen"
162
163
  Requires-Dist: linkify-it-py==2.0.3; extra == "frozen"
@@ -200,10 +201,10 @@ Requires-Dist: platformdirs==4.3.8; extra == "frozen"
200
201
  Requires-Dist: pluggy==1.6.0; extra == "frozen"
201
202
  Requires-Dist: prison==0.2.1; extra == "frozen"
202
203
  Requires-Dist: proglog==0.1.12; extra == "frozen"
203
- Requires-Dist: prometheus_client==0.22.0; extra == "frozen"
204
+ Requires-Dist: prometheus_client==0.22.1; extra == "frozen"
204
205
  Requires-Dist: prompt_toolkit==3.0.51; extra == "frozen"
205
206
  Requires-Dist: propcache==0.3.1; extra == "frozen"
206
- Requires-Dist: protobuf==5.29.4; extra == "frozen"
207
+ Requires-Dist: protobuf==5.29.5; extra == "frozen"
207
208
  Requires-Dist: psutil==7.0.0; extra == "frozen"
208
209
  Requires-Dist: psycopg2-binary==2.9.10; extra == "frozen"
209
210
  Requires-Dist: py==1.11.0; extra == "frozen"
@@ -232,7 +233,7 @@ Requires-Dist: s3transfer==0.13.0; extra == "frozen"
232
233
  Requires-Dist: scipy==1.15.3; extra == "frozen"
233
234
  Requires-Dist: semantic-version==2.10.0; extra == "frozen"
234
235
  Requires-Dist: setproctitle==1.3.6; extra == "frozen"
235
- Requires-Dist: setuptools==69.2.0; extra == "frozen"
236
+ Requires-Dist: setuptools==65.5.0; extra == "frozen"
236
237
  Requires-Dist: six==1.17.0; extra == "frozen"
237
238
  Requires-Dist: sniffio==1.3.1; extra == "frozen"
238
239
  Requires-Dist: sqids==0.5.1; extra == "frozen"
@@ -247,7 +248,7 @@ Requires-Dist: tornado==6.5.1; extra == "frozen"
247
248
  Requires-Dist: tqdm==4.67.1; extra == "frozen"
248
249
  Requires-Dist: traitlets==5.14.3; extra == "frozen"
249
250
  Requires-Dist: typing-inspection==0.4.1; extra == "frozen"
250
- Requires-Dist: typing_extensions==4.13.2; extra == "frozen"
251
+ Requires-Dist: typing_extensions==4.14.0; extra == "frozen"
251
252
  Requires-Dist: tzdata==2025.2; extra == "frozen"
252
253
  Requires-Dist: uc-micro-py==1.0.3; extra == "frozen"
253
254
  Requires-Dist: uncertainties==3.2.3; extra == "frozen"
@@ -27,8 +27,6 @@ dkist_processing_test/tasks/quality.py
27
27
  dkist_processing_test/tasks/write_l1.py
28
28
  dkist_processing_test/tests/__init__.py
29
29
  dkist_processing_test/tests/conftest.py
30
- dkist_processing_test/tests/parameter_models.py
31
- dkist_processing_test/tests/test_parameters.py
32
30
  dkist_processing_test/tests/test_tasks.py
33
31
  dkist_processing_test/tests/test_workflows.py
34
32
  dkist_processing_test/workflows/__init__.py
@@ -1,7 +1,7 @@
1
- dkist-processing-common==10.8.3
1
+ dkist-processing-common==10.8.4rc1
2
2
  dkist-header-validator==5.2.1
3
3
  dkist-service-configuration==2.3.0
4
- dkist-fits-specifications==4.16.0
4
+ dkist-fits-specifications==4.17.0
5
5
  numba==0.61.2
6
6
  astropy==7.0.2
7
7
  numpy==2.2.5
@@ -37,7 +37,7 @@ WTForms==3.2.1
37
37
  Werkzeug==2.2.3
38
38
  aioftp==0.25.1
39
39
  aiohappyeyeballs==2.6.1
40
- aiohttp==3.12.2
40
+ aiohttp==3.12.6
41
41
  aiosignal==1.3.2
42
42
  alembic==1.16.1
43
43
  amqp==5.3.1
@@ -63,16 +63,16 @@ asdf_transform_schemas==0.6.0
63
63
  asgiref==3.8.1
64
64
  asteval==1.0.6
65
65
  astropy==7.0.2
66
- astropy-iers-data==0.2025.5.26.0.37.21
66
+ astropy-iers-data==0.2025.6.2.0.38.23
67
67
  asyncpg==0.30.0
68
68
  attrs==25.3.0
69
69
  babel==2.17.0
70
70
  billiard==4.2.1
71
71
  blinker==1.9.0
72
- boto3==1.38.24
73
- botocore==1.38.24
72
+ boto3==1.38.27
73
+ botocore==1.38.27
74
74
  cachelib==0.13.0
75
- celery==5.5.2
75
+ celery==5.5.3
76
76
  certifi==2025.4.26
77
77
  cffi==1.17.1
78
78
  charset-normalizer==3.4.2
@@ -93,13 +93,13 @@ dacite==1.9.2
93
93
  decorator==5.2.1
94
94
  dill==0.4.0
95
95
  dkist-header-validator==5.2.1
96
- dkist-processing-common==10.8.3
96
+ dkist-processing-common==10.8.4rc1
97
97
  dkist-processing-core==5.1.1
98
98
  dkist-processing-pac==3.1.1
99
- dkist-processing-test==1.26.4
99
+ dkist-processing-test==1.26.6rc1
100
100
  dkist-service-configuration==2.3.0
101
101
  dkist-spectral-lines==3.0.0
102
- dkist_fits_specifications==4.16.0
102
+ dkist_fits_specifications==4.17.0
103
103
  dnspython==2.7.0
104
104
  ecs-logging==2.2.0
105
105
  elastic-apm==6.23.0
@@ -113,7 +113,8 @@ globus-sdk==3.56.1
113
113
  google-re2==1.1.20240702
114
114
  googleapis-common-protos==1.70.0
115
115
  gqlclient==1.2.3
116
- grpcio==1.71.0
116
+ greenlet==3.2.2
117
+ grpcio==1.72.1
117
118
  gunicorn==23.0.0
118
119
  h11==0.16.0
119
120
  httpcore==1.0.9
@@ -130,7 +131,7 @@ jsonschema==4.24.0
130
131
  jsonschema-specifications==2025.4.1
131
132
  jupyter_core==5.8.1
132
133
  kiwisolver==1.4.8
133
- kombu==5.5.3
134
+ kombu==5.5.4
134
135
  lazy-object-proxy==1.11.0
135
136
  limits==5.2.0
136
137
  linkify-it-py==2.0.3
@@ -174,10 +175,10 @@ platformdirs==4.3.8
174
175
  pluggy==1.6.0
175
176
  prison==0.2.1
176
177
  proglog==0.1.12
177
- prometheus_client==0.22.0
178
+ prometheus_client==0.22.1
178
179
  prompt_toolkit==3.0.51
179
180
  propcache==0.3.1
180
- protobuf==5.29.4
181
+ protobuf==5.29.5
181
182
  psutil==7.0.0
182
183
  psycopg2-binary==2.9.10
183
184
  py==1.11.0
@@ -206,7 +207,7 @@ s3transfer==0.13.0
206
207
  scipy==1.15.3
207
208
  semantic-version==2.10.0
208
209
  setproctitle==1.3.6
209
- setuptools==69.2.0
210
+ setuptools==65.5.0
210
211
  six==1.17.0
211
212
  sniffio==1.3.1
212
213
  sqids==0.5.1
@@ -221,7 +222,7 @@ tornado==6.5.1
221
222
  tqdm==4.67.1
222
223
  traitlets==5.14.3
223
224
  typing-inspection==0.4.1
224
- typing_extensions==4.13.2
225
+ typing_extensions==4.14.0
225
226
  tzdata==2025.2
226
227
  uc-micro-py==1.0.3
227
228
  uncertainties==3.2.3
@@ -9,8 +9,8 @@ find = {}
9
9
 
10
10
  [tool.dkist-dev-tools]
11
11
  # Most recently frozen version by dkist-dev-tools
12
- version = "1.26.4"
13
- date = 2025-05-28T16:42:31.518603
12
+ version = "1.26.6rc1"
13
+ date = 2025-06-02T09:48:46.553097
14
14
 
15
15
  [project]
16
16
  dynamic = ["version"]
@@ -26,10 +26,10 @@ classifiers = [
26
26
  "Programming Language :: Python :: 3.11",
27
27
  ]
28
28
  dependencies = [
29
- "dkist-processing-common == 10.8.3",
29
+ "dkist-processing-common == 10.8.4rc1",
30
30
  "dkist-header-validator == 5.2.1",
31
31
  "dkist-service-configuration == 2.3.0",
32
- "dkist-fits-specifications == 4.16.0",
32
+ "dkist-fits-specifications == 4.17.0",
33
33
  "numba == 0.61.2",
34
34
  "astropy == 7.0.2",
35
35
  "numpy == 2.2.5",
@@ -89,7 +89,7 @@ frozen = [
89
89
  "Werkzeug == 2.2.3",
90
90
  "aioftp == 0.25.1",
91
91
  "aiohappyeyeballs == 2.6.1",
92
- "aiohttp == 3.12.2",
92
+ "aiohttp == 3.12.6",
93
93
  "aiosignal == 1.3.2",
94
94
  "alembic == 1.16.1",
95
95
  "amqp == 5.3.1",
@@ -115,16 +115,16 @@ frozen = [
115
115
  "asgiref == 3.8.1",
116
116
  "asteval == 1.0.6",
117
117
  "astropy == 7.0.2",
118
- "astropy-iers-data == 0.2025.5.26.0.37.21",
118
+ "astropy-iers-data == 0.2025.6.2.0.38.23",
119
119
  "asyncpg == 0.30.0",
120
120
  "attrs == 25.3.0",
121
121
  "babel == 2.17.0",
122
122
  "billiard == 4.2.1",
123
123
  "blinker == 1.9.0",
124
- "boto3 == 1.38.24",
125
- "botocore == 1.38.24",
124
+ "boto3 == 1.38.27",
125
+ "botocore == 1.38.27",
126
126
  "cachelib == 0.13.0",
127
- "celery == 5.5.2",
127
+ "celery == 5.5.3",
128
128
  "certifi == 2025.4.26",
129
129
  "cffi == 1.17.1",
130
130
  "charset-normalizer == 3.4.2",
@@ -145,13 +145,13 @@ frozen = [
145
145
  "decorator == 5.2.1",
146
146
  "dill == 0.4.0",
147
147
  "dkist-header-validator == 5.2.1",
148
- "dkist-processing-common == 10.8.3",
148
+ "dkist-processing-common == 10.8.4rc1",
149
149
  "dkist-processing-core == 5.1.1",
150
150
  "dkist-processing-pac == 3.1.1",
151
- "dkist-processing-test == 1.26.4",
151
+ "dkist-processing-test == 1.26.6rc1",
152
152
  "dkist-service-configuration == 2.3.0",
153
153
  "dkist-spectral-lines == 3.0.0",
154
- "dkist_fits_specifications == 4.16.0",
154
+ "dkist_fits_specifications == 4.17.0",
155
155
  "dnspython == 2.7.0",
156
156
  "ecs-logging == 2.2.0",
157
157
  "elastic-apm == 6.23.0",
@@ -165,7 +165,8 @@ frozen = [
165
165
  "google-re2 == 1.1.20240702",
166
166
  "googleapis-common-protos == 1.70.0",
167
167
  "gqlclient == 1.2.3",
168
- "grpcio == 1.71.0",
168
+ "greenlet == 3.2.2",
169
+ "grpcio == 1.72.1",
169
170
  "gunicorn == 23.0.0",
170
171
  "h11 == 0.16.0",
171
172
  "httpcore == 1.0.9",
@@ -182,7 +183,7 @@ frozen = [
182
183
  "jsonschema-specifications == 2025.4.1",
183
184
  "jupyter_core == 5.8.1",
184
185
  "kiwisolver == 1.4.8",
185
- "kombu == 5.5.3",
186
+ "kombu == 5.5.4",
186
187
  "lazy-object-proxy == 1.11.0",
187
188
  "limits == 5.2.0",
188
189
  "linkify-it-py == 2.0.3",
@@ -226,10 +227,10 @@ frozen = [
226
227
  "pluggy == 1.6.0",
227
228
  "prison == 0.2.1",
228
229
  "proglog == 0.1.12",
229
- "prometheus_client == 0.22.0",
230
+ "prometheus_client == 0.22.1",
230
231
  "prompt_toolkit == 3.0.51",
231
232
  "propcache == 0.3.1",
232
- "protobuf == 5.29.4",
233
+ "protobuf == 5.29.5",
233
234
  "psutil == 7.0.0",
234
235
  "psycopg2-binary == 2.9.10",
235
236
  "py == 1.11.0",
@@ -258,7 +259,7 @@ frozen = [
258
259
  "scipy == 1.15.3",
259
260
  "semantic-version == 2.10.0",
260
261
  "setproctitle == 1.3.6",
261
- "setuptools == 69.2.0",
262
+ "setuptools == 65.5.0",
262
263
  "six == 1.17.0",
263
264
  "sniffio == 1.3.1",
264
265
  "sqids == 0.5.1",
@@ -273,7 +274,7 @@ frozen = [
273
274
  "tqdm == 4.67.1",
274
275
  "traitlets == 5.14.3",
275
276
  "typing-inspection == 0.4.1",
276
- "typing_extensions == 4.13.2",
277
+ "typing_extensions == 4.14.0",
277
278
  "tzdata == 2025.2",
278
279
  "uc-micro-py == 1.0.3",
279
280
  "uncertainties == 3.2.3",
@@ -1,130 +0,0 @@
1
- import json
2
- from datetime import datetime
3
- from random import randint
4
- from typing import Any
5
- from typing import Union
6
-
7
- from pydantic import BaseModel
8
- from pydantic import ConfigDict
9
- from pydantic import Field
10
- from pydantic import field_serializer
11
- from pydantic import field_validator
12
- from pydantic import model_serializer
13
-
14
- param_value_type_hint = Union[
15
- int, str, list, tuple, "WavelengthParameterValue", "RawFileParameterValue"
16
- ]
17
- multi_str_type = Union[str, "MultipleParameterValues"]
18
- multi_file_type = Union["RawFileParameterValue", "MultipleParameterValues"]
19
- multi_wave_type = Union["WavelengthParameterValue", "MultipleParameterValues"]
20
-
21
-
22
- class ParameterValue(BaseModel):
23
- """A single parameterValue entry"""
24
-
25
- parameterValue: param_value_type_hint
26
- parameterValueId: int = Field(default_factory=lambda: randint(1000, 2000))
27
- parameterValueStartDate: datetime = datetime(1946, 11, 20)
28
-
29
- @field_serializer("parameterValue")
30
- def json_parameter_value(self, parameter_value: param_value_type_hint) -> str:
31
- """Encode the actual value in a JSON string."""
32
- try:
33
- parameter_value = parameter_value.model_dump()
34
- except:
35
- # If the value is just a basic type (i.e., not a `BaseModel`)
36
- pass
37
- return json.dumps(parameter_value)
38
-
39
- @field_serializer("parameterValueStartDate")
40
- def datetime_iso_format(self, start_datetime: datetime) -> str:
41
- """Encode the start date as an ISO-formatted string."""
42
- return start_datetime.isoformat()
43
-
44
-
45
- class MultipleParameterValues(BaseModel):
46
- """
47
- Container for a list of parameterValues.
48
-
49
- This exists to be different than a raw `list`, which is a valid `parameterValue.parameterValue` type
50
- """
51
-
52
- parameter_value_list: list[ParameterValue]
53
-
54
- @field_validator("parameter_value_list", mode="before")
55
- @classmethod
56
- def ensure_list_of_parameter_values(cls, input_list: list) -> list[ParameterValue]:
57
- """Convert any raw types to `ParameterValue` objects."""
58
- output_list = []
59
- for parameter_value in input_list:
60
- if not isinstance(parameter_value, ParameterValue):
61
- parameter_value = ParameterValue(parameterValue=parameter_value)
62
-
63
- output_list.append(parameter_value)
64
-
65
- return output_list
66
-
67
- @field_validator("parameter_value_list")
68
- @classmethod
69
- def no_repeat_start_dates(
70
- cls, parameter_value_list: list[ParameterValue]
71
- ) -> list[ParameterValue]:
72
- """Fail validation if any of the `ParameterValues` have the same `parameterValueStartDate."""
73
- start_dates = [pv.parameterValueStartDate for pv in parameter_value_list]
74
- if len(set(start_dates)) != len(start_dates):
75
- raise ValueError(
76
- f"parameterValueStartDates must be unique. Got {set(start_dates)} over {len(start_dates)} parameters."
77
- )
78
-
79
- return parameter_value_list
80
-
81
- @model_serializer
82
- def parameter_value_list(self):
83
- """Return just the list of `ParameterValues`."""
84
- return self.parameter_value_list
85
-
86
-
87
- class WavelengthParameterValue(BaseModel):
88
- values: tuple
89
- wavelength: tuple = (1.0, 2.0, 3.0)
90
-
91
-
92
- class RawFileParameterValue(BaseModel):
93
- """
94
- For parameters that are files on disk.
95
-
96
- "Raw" in the sense that it still has the `__file__`-level dictionary.
97
- """
98
-
99
- objectKey: str
100
- bucket: str = "doesn't_matter"
101
-
102
- @model_serializer
103
- def file_dict(self) -> dict:
104
- """Wrap the input values in a `__file__` dict."""
105
- return {"__file__": dict(self)}
106
-
107
-
108
- class TestParameterValues(BaseModel):
109
- test_random_data: multi_file_type = RawFileParameterValue(objectKey="")
110
- test_wavelength_category: multi_wave_type = WavelengthParameterValue(
111
- values=("one", "two", "three")
112
- )
113
- test_message: multi_str_type = "Weird?"
114
- test_message_file: multi_file_type = RawFileParameterValue(objectKey="")
115
-
116
- model_config = ConfigDict(validate_default=True)
117
-
118
- @field_validator("*")
119
- @classmethod
120
- def ensure_parameter_value_lists(cls, parameter: Any) -> MultipleParameterValues:
121
- """Convert all values to `MultipleParameterValues`, if they aren't already."""
122
- if not isinstance(parameter, MultipleParameterValues):
123
- return MultipleParameterValues(parameter_value_list=[parameter])
124
-
125
- return parameter
126
-
127
- @model_serializer
128
- def input_dataset_document_parameters_part(self) -> list:
129
- """Place all parameters into higher-level dictionaries required by the input dataset document."""
130
- return [{"parameterName": f, "parameterValues": v} for f, v in self]
@@ -1,151 +0,0 @@
1
- import json
2
- from datetime import datetime
3
-
4
- import numpy as np
5
- import pytest
6
- from dkist_processing_common.tasks import WorkflowTaskBase
7
- from dkist_processing_common.tasks.mixin.input_dataset import InputDatasetParameterValue
8
-
9
- from dkist_processing_test.models.parameters import TestParameters
10
-
11
-
12
- @pytest.fixture(scope="session")
13
- def array_file_parameter(
14
- tmp_path_factory, random_parameter_hdulist, array_parameter_file_object_key
15
- ) -> tuple[InputDatasetParameterValue, float, float, float]:
16
- hdul, mu, std, const = random_parameter_hdulist
17
- file_path = tmp_path_factory.mktemp("parameters") / array_parameter_file_object_key
18
- hdul.writeto(file_path)
19
-
20
- value = {
21
- "bucket": "raw",
22
- "objectKey": array_parameter_file_object_key,
23
- "param_path": file_path,
24
- "is_file": True,
25
- }
26
-
27
- parameter_value = InputDatasetParameterValue(
28
- parameter_value_id=1,
29
- parameter_value=value,
30
- parameter_value_start_date=datetime(1946, 11, 20),
31
- )
32
- return parameter_value, mu, std, const
33
-
34
-
35
- @pytest.fixture(scope="session")
36
- def message_file_parameter(
37
- tmp_path_factory, early_file_message_str, early_json_parameter_file_object_key
38
- ):
39
-
40
- file_path = tmp_path_factory.mktemp("parameters") / early_json_parameter_file_object_key
41
- with open(file_path, "w") as f:
42
- json.dump(early_file_message_str, f)
43
-
44
- value = {
45
- "bucket": "raw",
46
- "objectKey": early_json_parameter_file_object_key,
47
- "param_path": file_path,
48
- "is_file": True,
49
- }
50
-
51
- parameter_value = InputDatasetParameterValue(
52
- parameter_value_id=2,
53
- parameter_value=value,
54
- parameter_value_start_date=datetime(1946, 11, 20),
55
- )
56
- return parameter_value
57
-
58
-
59
- @pytest.fixture(scope="session")
60
- def message_parameter(early_value_message_str):
61
-
62
- parameter_value = InputDatasetParameterValue(
63
- parameter_value_id=3,
64
- parameter_value=early_value_message_str,
65
- parameter_value_start_date=datetime(1946, 11, 20),
66
- )
67
-
68
- return parameter_value
69
-
70
-
71
- @pytest.fixture(scope="session")
72
- def wavelength_parameter() -> InputDatasetParameterValue:
73
- value = {"wavelength": [1.0, 2.0, 3.0], "values": ["one", "two", "three"]}
74
-
75
- parameter_value = InputDatasetParameterValue(
76
- parameter_value_id=4,
77
- parameter_value=value,
78
- parameter_value_start_date=datetime(1946, 11, 20),
79
- )
80
- return parameter_value
81
-
82
-
83
- @pytest.fixture(scope="session")
84
- def parameter_dict_with_path(
85
- array_file_parameter, message_file_parameter, message_parameter, wavelength_parameter
86
- ):
87
- """Enough of an input dataset parameters part to exercise file loading parameters."""
88
- file_parameter_value, _, _, _ = array_file_parameter
89
-
90
- param_dict = {
91
- "test_random_data": [file_parameter_value],
92
- "test_message": [message_parameter],
93
- "test_message_file": [message_file_parameter],
94
- "test_wavelength_category": [wavelength_parameter],
95
- }
96
-
97
- return param_dict
98
-
99
-
100
- @pytest.fixture(scope="session")
101
- def task_with_parameters(parameter_dict_with_path):
102
- class TaskWithParameters(WorkflowTaskBase):
103
- def __init__(
104
- self,
105
- recipe_run_id: int,
106
- workflow_name: str,
107
- workflow_version: str,
108
- ):
109
- super().__init__(
110
- recipe_run_id=recipe_run_id,
111
- workflow_name=workflow_name,
112
- workflow_version=workflow_version,
113
- )
114
- self.parameters = TestParameters(
115
- parameter_dict_with_path, wavelength=2.0, obs_ip_start_time="2024-06-11T12:00:00"
116
- )
117
-
118
- def run(self):
119
- """Do stuff."""
120
- pass
121
-
122
- task = TaskWithParameters(
123
- recipe_run_id=0,
124
- workflow_name="do_stuff",
125
- workflow_version="VX.Y",
126
- )
127
-
128
- return task
129
-
130
-
131
- def test_parameter(
132
- task_with_parameters,
133
- array_file_parameter,
134
- early_file_message_str,
135
- early_value_message_str,
136
- ):
137
- """
138
- Given: A task with parameters that depend on files
139
- When: Accessing those parameters
140
- Then: The correct values are returned
141
- """
142
- task = task_with_parameters
143
- _, mu, std, const = array_file_parameter
144
-
145
- assert type(task.parameters.randomness) is tuple
146
- np.testing.assert_allclose(np.array(task.parameters.randomness), np.array([mu, std]), rtol=1)
147
-
148
- assert task.parameters.constant == const
149
- assert task.parameters.wavelength_category == "two"
150
- assert task.parameters.value_message == early_value_message_str
151
- assert task.parameters.file_message == early_file_message_str