nominal 1.104.0__tar.gz → 1.104.2__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 (111) hide show
  1. {nominal-1.104.0 → nominal-1.104.2}/CHANGELOG.md +14 -0
  2. {nominal-1.104.0 → nominal-1.104.2}/PKG-INFO +2 -1
  3. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/data_review.py +79 -5
  4. {nominal-1.104.0 → nominal-1.104.2}/pyproject.toml +3 -5
  5. {nominal-1.104.0 → nominal-1.104.2}/.gitignore +0 -0
  6. {nominal-1.104.0 → nominal-1.104.2}/LICENSE +0 -0
  7. {nominal-1.104.0 → nominal-1.104.2}/README.md +0 -0
  8. {nominal-1.104.0 → nominal-1.104.2}/nominal/__init__.py +0 -0
  9. {nominal-1.104.0 → nominal-1.104.2}/nominal/__main__.py +0 -0
  10. {nominal-1.104.0 → nominal-1.104.2}/nominal/_utils/README.md +0 -0
  11. {nominal-1.104.0 → nominal-1.104.2}/nominal/_utils/__init__.py +0 -0
  12. {nominal-1.104.0 → nominal-1.104.2}/nominal/_utils/dataclass_tools.py +0 -0
  13. {nominal-1.104.0 → nominal-1.104.2}/nominal/_utils/deprecation_tools.py +0 -0
  14. {nominal-1.104.0 → nominal-1.104.2}/nominal/_utils/iterator_tools.py +0 -0
  15. {nominal-1.104.0 → nominal-1.104.2}/nominal/_utils/streaming_tools.py +0 -0
  16. {nominal-1.104.0 → nominal-1.104.2}/nominal/_utils/timing_tools.py +0 -0
  17. {nominal-1.104.0 → nominal-1.104.2}/nominal/cli/__init__.py +0 -0
  18. {nominal-1.104.0 → nominal-1.104.2}/nominal/cli/__main__.py +0 -0
  19. {nominal-1.104.0 → nominal-1.104.2}/nominal/cli/attachment.py +0 -0
  20. {nominal-1.104.0 → nominal-1.104.2}/nominal/cli/auth.py +0 -0
  21. {nominal-1.104.0 → nominal-1.104.2}/nominal/cli/config.py +0 -0
  22. {nominal-1.104.0 → nominal-1.104.2}/nominal/cli/dataset.py +0 -0
  23. {nominal-1.104.0 → nominal-1.104.2}/nominal/cli/download.py +0 -0
  24. {nominal-1.104.0 → nominal-1.104.2}/nominal/cli/mis.py +0 -0
  25. {nominal-1.104.0 → nominal-1.104.2}/nominal/cli/run.py +0 -0
  26. {nominal-1.104.0 → nominal-1.104.2}/nominal/cli/util/__init__.py +0 -0
  27. {nominal-1.104.0 → nominal-1.104.2}/nominal/cli/util/click_log_handler.py +0 -0
  28. {nominal-1.104.0 → nominal-1.104.2}/nominal/cli/util/global_decorators.py +0 -0
  29. {nominal-1.104.0 → nominal-1.104.2}/nominal/cli/util/verify_connection.py +0 -0
  30. {nominal-1.104.0 → nominal-1.104.2}/nominal/config/__init__.py +0 -0
  31. {nominal-1.104.0 → nominal-1.104.2}/nominal/config/_config.py +0 -0
  32. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/__init__.py +0 -0
  33. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/_clientsbunch.py +0 -0
  34. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/_constants.py +0 -0
  35. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/_event_types.py +0 -0
  36. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/_stream/__init__.py +0 -0
  37. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/_stream/batch_processor.py +0 -0
  38. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/_stream/batch_processor_proto.py +0 -0
  39. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/_stream/write_stream.py +0 -0
  40. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/_stream/write_stream_base.py +0 -0
  41. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/_types.py +0 -0
  42. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/_utils/README.md +0 -0
  43. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/_utils/__init__.py +0 -0
  44. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/_utils/api_tools.py +0 -0
  45. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/_utils/multipart.py +0 -0
  46. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/_utils/multipart_downloader.py +0 -0
  47. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/_utils/networking.py +0 -0
  48. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/_utils/pagination_tools.py +0 -0
  49. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/_utils/query_tools.py +0 -0
  50. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/_utils/queueing.py +0 -0
  51. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/asset.py +0 -0
  52. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/attachment.py +0 -0
  53. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/bounds.py +0 -0
  54. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/channel.py +0 -0
  55. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/checklist.py +0 -0
  56. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/client.py +0 -0
  57. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/connection.py +0 -0
  58. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/containerized_extractors.py +0 -0
  59. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/dataset.py +0 -0
  60. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/dataset_file.py +0 -0
  61. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/datasource.py +0 -0
  62. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/event.py +0 -0
  63. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/exceptions.py +0 -0
  64. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/filetype.py +0 -0
  65. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/log.py +0 -0
  66. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/run.py +0 -0
  67. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/secret.py +0 -0
  68. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/unit.py +0 -0
  69. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/user.py +0 -0
  70. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/video.py +0 -0
  71. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/video_file.py +0 -0
  72. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/workbook.py +0 -0
  73. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/workbook_template.py +0 -0
  74. {nominal-1.104.0 → nominal-1.104.2}/nominal/core/workspace.py +0 -0
  75. {nominal-1.104.0 → nominal-1.104.2}/nominal/exceptions/__init__.py +0 -0
  76. {nominal-1.104.0 → nominal-1.104.2}/nominal/experimental/__init__.py +0 -0
  77. {nominal-1.104.0 → nominal-1.104.2}/nominal/experimental/compute/README.md +0 -0
  78. {nominal-1.104.0 → nominal-1.104.2}/nominal/experimental/compute/__init__.py +0 -0
  79. {nominal-1.104.0 → nominal-1.104.2}/nominal/experimental/compute/_buckets.py +0 -0
  80. {nominal-1.104.0 → nominal-1.104.2}/nominal/experimental/compute/dsl/__init__.py +0 -0
  81. {nominal-1.104.0 → nominal-1.104.2}/nominal/experimental/compute/dsl/_enum_expr_impls.py +0 -0
  82. {nominal-1.104.0 → nominal-1.104.2}/nominal/experimental/compute/dsl/_numeric_expr_impls.py +0 -0
  83. {nominal-1.104.0 → nominal-1.104.2}/nominal/experimental/compute/dsl/_range_expr_impls.py +0 -0
  84. {nominal-1.104.0 → nominal-1.104.2}/nominal/experimental/compute/dsl/exprs.py +0 -0
  85. {nominal-1.104.0 → nominal-1.104.2}/nominal/experimental/compute/dsl/params.py +0 -0
  86. {nominal-1.104.0 → nominal-1.104.2}/nominal/experimental/logging/__init__.py +0 -0
  87. {nominal-1.104.0 → nominal-1.104.2}/nominal/experimental/logging/click_log_handler.py +0 -0
  88. {nominal-1.104.0 → nominal-1.104.2}/nominal/experimental/logging/nominal_log_handler.py +0 -0
  89. {nominal-1.104.0 → nominal-1.104.2}/nominal/experimental/logging/rich_log_handler.py +0 -0
  90. {nominal-1.104.0 → nominal-1.104.2}/nominal/experimental/migration/__init__.py +0 -0
  91. {nominal-1.104.0 → nominal-1.104.2}/nominal/experimental/migration/migration_utils.py +0 -0
  92. {nominal-1.104.0 → nominal-1.104.2}/nominal/experimental/rust_streaming/__init__.py +0 -0
  93. {nominal-1.104.0 → nominal-1.104.2}/nominal/experimental/rust_streaming/rust_write_stream.py +0 -0
  94. {nominal-1.104.0 → nominal-1.104.2}/nominal/experimental/stream_v2/__init__.py +0 -0
  95. {nominal-1.104.0 → nominal-1.104.2}/nominal/experimental/stream_v2/_serializer.py +0 -0
  96. {nominal-1.104.0 → nominal-1.104.2}/nominal/experimental/stream_v2/_write_stream.py +0 -0
  97. {nominal-1.104.0 → nominal-1.104.2}/nominal/experimental/video_processing/__init__.py +0 -0
  98. {nominal-1.104.0 → nominal-1.104.2}/nominal/experimental/video_processing/resolution.py +0 -0
  99. {nominal-1.104.0 → nominal-1.104.2}/nominal/experimental/video_processing/video_conversion.py +0 -0
  100. {nominal-1.104.0 → nominal-1.104.2}/nominal/nominal.py +0 -0
  101. {nominal-1.104.0 → nominal-1.104.2}/nominal/py.typed +0 -0
  102. {nominal-1.104.0 → nominal-1.104.2}/nominal/thirdparty/__init__.py +0 -0
  103. {nominal-1.104.0 → nominal-1.104.2}/nominal/thirdparty/matlab/__init__.py +0 -0
  104. {nominal-1.104.0 → nominal-1.104.2}/nominal/thirdparty/matlab/_matlab.py +0 -0
  105. {nominal-1.104.0 → nominal-1.104.2}/nominal/thirdparty/pandas/__init__.py +0 -0
  106. {nominal-1.104.0 → nominal-1.104.2}/nominal/thirdparty/pandas/_pandas.py +0 -0
  107. {nominal-1.104.0 → nominal-1.104.2}/nominal/thirdparty/polars/__init__.py +0 -0
  108. {nominal-1.104.0 → nominal-1.104.2}/nominal/thirdparty/polars/polars_export_handler.py +0 -0
  109. {nominal-1.104.0 → nominal-1.104.2}/nominal/thirdparty/tdms/__init__.py +0 -0
  110. {nominal-1.104.0 → nominal-1.104.2}/nominal/thirdparty/tdms/_tdms.py +0 -0
  111. {nominal-1.104.0 → nominal-1.104.2}/nominal/ts/__init__.py +0 -0
@@ -1,5 +1,19 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.104.2](https://github.com/nominal-io/nominal-client/compare/v1.104.1...v1.104.2) (2026-01-08)
4
+
5
+
6
+ ### Bug Fixes
7
+
8
+ * explicitly pin version of urllib to fix CVE ([#571](https://github.com/nominal-io/nominal-client/issues/571)) ([2014e51](https://github.com/nominal-io/nominal-client/commit/2014e51d95e8cf804b1dce269402b2671f5153f8))
9
+
10
+ ## [1.104.1](https://github.com/nominal-io/nominal-client/compare/v1.104.0...v1.104.1) (2026-01-08)
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * add asset_rid to data_review request ([#508](https://github.com/nominal-io/nominal-client/issues/508)) ([b1baf4f](https://github.com/nominal-io/nominal-client/commit/b1baf4f3745ee8a485ff0407a53ad9ee1ee9b0fc))
16
+
3
17
  ## [1.104.0](https://github.com/nominal-io/nominal-client/compare/v1.103.0...v1.104.0) (2026-01-08)
4
18
 
5
19
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nominal
3
- Version: 1.104.0
3
+ Version: 1.104.2
4
4
  Summary: Automate Nominal workflows in Python
5
5
  Project-URL: Homepage, https://nominal.io
6
6
  Project-URL: Documentation, https://docs.nominal.io
@@ -33,6 +33,7 @@ Requires-Dist: tabulate<0.10,>=0.9.0
33
33
  Requires-Dist: truststore>=0.10.4
34
34
  Requires-Dist: types-cachetools>=6.0.0.20250525
35
35
  Requires-Dist: typing-extensions<5,>=4
36
+ Requires-Dist: urllib3==2.6.3
36
37
  Provides-Extra: protos
37
38
  Requires-Dist: nominal-api-protos>=0.949.2; extra == 'protos'
38
39
  Provides-Extra: tdms
@@ -20,8 +20,10 @@ from typing_extensions import Self, deprecated
20
20
 
21
21
  from nominal.core import checklist, event
22
22
  from nominal.core._clientsbunch import HasScoutParams
23
- from nominal.core._utils.api_tools import HasRid
23
+ from nominal.core._utils.api_tools import HasRid, rid_from_instance_or_string
24
+ from nominal.core.asset import Asset
24
25
  from nominal.core.exceptions import NominalMethodRemovedError
26
+ from nominal.core.run import Run
25
27
  from nominal.ts import IntegralNanosecondsUTC, _SecondsNanos
26
28
 
27
29
 
@@ -162,8 +164,81 @@ class DataReviewBuilder:
162
164
  self._integration_rids.append(integration_rid)
163
165
  return self
164
166
 
165
- def add_request(self, run_rid: str, checklist_rid: str, commit: str) -> DataReviewBuilder:
166
- self._requests.append(scout_datareview_api.CreateDataReviewRequest(checklist_rid, run_rid, commit))
167
+ @deprecated(
168
+ "`DataReviewBuilder.add_request` is deprecated and will be removed in a future release of the Nominal SDK. "
169
+ "Please use `DataReviewBuilder.execute_checklist` instead."
170
+ )
171
+ def add_request(
172
+ self,
173
+ run_rid: str,
174
+ checklist_rid: str,
175
+ commit: str | None = None,
176
+ *,
177
+ asset_rid: str | None = None,
178
+ ) -> DataReviewBuilder:
179
+ """Add a request to create a data review for the given checklist and run.
180
+
181
+ Args:
182
+ run_rid: RID of the Run to run the Checklist on
183
+ checklist_rid: RID of the checklist to execute on the Run
184
+ commit: Commit hash of the version of the checklist to run, or the latest version if None is provided
185
+ asset_rid: RID of the asset to run the checklist on within the Run (only required for multi-asset runs)
186
+
187
+ Returns:
188
+ DataReviewBuilder instance to continue building a data review with
189
+ """
190
+ return self.execute_checklist(run_rid, checklist_rid, commit=commit, asset=asset_rid)
191
+
192
+ def execute_checklist(
193
+ self,
194
+ run: str | Run,
195
+ checklist: str | checklist.Checklist,
196
+ *,
197
+ commit: str | None = None,
198
+ asset: str | Asset | None = None,
199
+ ) -> Self:
200
+ """Add a request to create a data review for the given checklist and run.
201
+
202
+ Args:
203
+ run: Instance or rid of the Run to run the Checklist on
204
+ checklist: Instance or rid of the checklist to execute on the Run
205
+ commit: Commit hash of the version of the checklist to run, or the latest version if None is provided
206
+ asset: Instance or rid of the asset to run the checklist on within the Run
207
+ NOTE: only required for multi-asset runs
208
+
209
+ Returns:
210
+ DataReviewBuilder instance to continue building a data review with
211
+
212
+ Raises:
213
+ ValueError: If the given run has multiple associated assets and no asset was specified, or
214
+ if the run has an asset that differs from the provided asset.
215
+ """
216
+ checklist_rid = rid_from_instance_or_string(checklist)
217
+ run_rid = rid_from_instance_or_string(run)
218
+ asset_rid = None if asset is None else rid_from_instance_or_string(asset)
219
+
220
+ raw_run = self._clients.run.get_run(self._clients.auth_header, run_rid)
221
+ if len(raw_run.assets) > 1 and asset is None:
222
+ raise ValueError(
223
+ f"Cannot run data review on checklist {checklist_rid} and {run_rid} without specifying `asset_rid`: "
224
+ f"run has {len(raw_run.assets)} assets!"
225
+ )
226
+ elif len(raw_run.assets) == 1 and asset_rid is not None:
227
+ raw_asset_rid = raw_run.assets[0]
228
+ if raw_asset_rid != asset_rid:
229
+ raise ValueError(
230
+ f"Cannot run data review on checklist {checklist_rid} and {run_rid} with asset {asset_rid}: "
231
+ f"run has a different asset {raw_asset_rid}!"
232
+ )
233
+
234
+ self._requests.append(
235
+ scout_datareview_api.CreateDataReviewRequest(
236
+ checklist_rid=checklist_rid,
237
+ run_rid=run_rid,
238
+ asset_rid=asset_rid,
239
+ commit=commit,
240
+ )
241
+ )
167
242
  return self
168
243
 
169
244
  def add_tags(self, tags: list[str]) -> DataReviewBuilder:
@@ -174,8 +249,7 @@ class DataReviewBuilder:
174
249
  """Initiates a batch data review process.
175
250
 
176
251
  Args:
177
- wait_for_completion (bool): If True, waits for the data review process to complete before returning.
178
- Default is True.
252
+ wait_for_completion: If True, waits for the data review process to complete before returning.
179
253
  """
180
254
  request = scout_datareview_api.BatchInitiateDataReviewRequest(
181
255
  notification_configurations=[
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "nominal"
3
- version = "1.104.0"
3
+ version = "1.104.2"
4
4
  description = "Automate Nominal workflows in Python"
5
5
  authors = [
6
6
  { name = "Alexander Reynolds", email = "alex.reynolds@nominal.io" },
@@ -49,6 +49,8 @@ dependencies = [
49
49
  # list only the exact platforms supported
50
50
  # TODO(drake): support more architectures and clean up dependency markers.
51
51
  "nominal-streaming==0.5.8; platform_python_implementation=='CPython' and python_version>='3.10' and ((sys_platform=='win32' and platform_machine=='AMD64') or (sys_platform=='darwin' and platform_machine=='arm64') or (sys_platform=='linux' and (platform_machine=='x86_64' or platform_machine=='armv7l')))",
52
+ # Explicitly specifying urllib3 version to handle CVE present in earlier versions
53
+ "urllib3==2.6.3",
52
54
  ]
53
55
 
54
56
 
@@ -173,10 +175,6 @@ disable_error_code = ["no-untyped-def"]
173
175
  [tool.pytest.ini_options]
174
176
  filterwarnings = [
175
177
  "error", # transform all warnings into errors, except ignore: ones.
176
- # DeprecationWarning: The 'strict' parameter is no longer needed on Python 3+. This will raise an error in urllib3 v2.1.0.
177
- # from conjure-python-client, in conjure_python_client/_http/requests_client.py,
178
- # TransportAdapter.init_poolmanager() uses urllib3.poolmanager.PoolManager(..., strict=True) which is deprecated.
179
- "ignore:The 'strict' parameter is no longer needed on Python 3+.",
180
178
  ]
181
179
  testpaths = ["tests"]
182
180
  # make tests/e2e opt-in (they require a Nominal instance)
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes