utf-queue-client 1.19.4b11__tar.gz → 1.20.1b1__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 (87) hide show
  1. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/PKG-INFO +1 -1
  2. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/pyproject.toml +1 -1
  3. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/test/test_publish_test_results.py +55 -2
  4. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client/models/schemas/utf_queue_models/models/python/generated_models_pydantic_v1.py +9 -3
  5. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client/models/schemas/utf_queue_models/models/python/generated_models_pydantic_v2.py +9 -3
  6. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client/models/schemas/utf_queue_models/schema/queue_message.json +4 -18
  7. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client/scripts/publish_test_results_cli.py +2 -4
  8. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client/scripts/ubai_upload_cli.py +3 -4
  9. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client.egg-info/PKG-INFO +1 -1
  10. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/.gitignore +0 -0
  11. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/.gitmodules +0 -0
  12. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/.idea/.gitignore +0 -0
  13. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/.idea/modules.xml +0 -0
  14. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/.idea/utf_queue_client_python.iml +0 -0
  15. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/.idea/vcs.xml +0 -0
  16. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/.pre-commit-config.yaml +0 -0
  17. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/Jenkinsfile +0 -0
  18. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/README.md +0 -0
  19. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/examples/example_async_consumer.py +0 -0
  20. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/requirements.txt +0 -0
  21. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/setup.cfg +0 -0
  22. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/sonar-project.properties +0 -0
  23. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/test/.gitattributes +0 -0
  24. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/test/Dockerfile.script_test +0 -0
  25. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/test/conftest.py +0 -0
  26. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/test/pytest.ini +0 -0
  27. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/test/script_test.groovy +0 -0
  28. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/test/stopwatch.py +0 -0
  29. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/test/test.hex +0 -0
  30. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/test/test_amqp_connections.py +0 -0
  31. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/test/test_async_consumer.py +0 -0
  32. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/test/test_connection_retry.py +0 -0
  33. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/test/test_data_lake_data_producer.py +0 -0
  34. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/test/test_http_producer.py +0 -0
  35. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/test/test_models.py +0 -0
  36. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/test/test_opentelemetry_data_producer.py +0 -0
  37. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/test/test_publish_release_info.py +0 -0
  38. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/test/test_rail_data_producer_tests.py +0 -0
  39. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/test/test_sqa_test_result_producer.py +0 -0
  40. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/test/test_ubai_copy.py +0 -0
  41. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/test/test_ubai_search.py +0 -0
  42. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/test/test_ubai_update_retention.py +0 -0
  43. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/test/test_ubai_upload.py +0 -0
  44. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/test/test_utils.py +0 -0
  45. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/test/test_xray_data_producer.py +0 -0
  46. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/test-requirements-pydantic-v1.txt +0 -0
  47. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/test-requirements.txt +0 -0
  48. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/tools/build_dist.bat +0 -0
  49. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/tools/setup_venv.bat +0 -0
  50. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/tools/silabs-net.pem +0 -0
  51. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/tools/silabs.pem +0 -0
  52. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/tools/update_schema.bat +0 -0
  53. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/tools/upload_to_nexus.bat +0 -0
  54. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/tools/upload_to_pypi.bat +0 -0
  55. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/tools/upload_to_testpypi.bat +0 -0
  56. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/tox.ini +0 -0
  57. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client/__init__.py +0 -0
  58. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client/clients/__init__.py +0 -0
  59. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client/clients/async_consumer.py +0 -0
  60. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client/clients/base_producer.py +0 -0
  61. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client/clients/data_lake_data_producer.py +0 -0
  62. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client/clients/http_producer.py +0 -0
  63. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client/clients/opentelemetry_data_producer.py +0 -0
  64. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client/clients/sqa_test_result_producer.py +0 -0
  65. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client/clients/test_rail_data_producer.py +0 -0
  66. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client/clients/ubai_artifact_upload_request_producer.py +0 -0
  67. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client/clients/xray_data_producer.py +0 -0
  68. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client/exceptions/__init__.py +0 -0
  69. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client/models/__init__.py +0 -0
  70. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client/models/base_model.py +0 -0
  71. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client/models/model_factory.py +0 -0
  72. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client/models/schemas/__init__.py +0 -0
  73. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client/models/schemas/utf_queue_models/models/python/__init__.py +0 -0
  74. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client/models/schemas/utf_queue_models/models/python/generated_models.py +0 -0
  75. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client/scripts/__init__.py +0 -0
  76. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client/scripts/publish_release_info_cli.py +0 -0
  77. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client/scripts/ubai_copy_cli.py +0 -0
  78. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client/scripts/ubai_search_cli.py +0 -0
  79. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client/scripts/ubai_update_retention_cli.py +0 -0
  80. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client/utils/__init__.py +0 -0
  81. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client/utils/queue_metrics_exporter.py +0 -0
  82. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client/utils/queue_span_exporter.py +0 -0
  83. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client.egg-info/SOURCES.txt +0 -0
  84. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client.egg-info/dependency_links.txt +0 -0
  85. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client.egg-info/entry_points.txt +0 -0
  86. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client.egg-info/requires.txt +0 -0
  87. {utf_queue_client-1.19.4b11 → utf_queue_client-1.20.1b1}/utf_queue_client.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: utf-queue-client
3
- Version: 1.19.4b11
3
+ Version: 1.20.1b1
4
4
  Summary: No description provided
5
5
  Author-email: Joe Savage <joe.savage@silabs.com>
6
6
  Keywords: UTF
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "utf-queue-client"
7
- version = "1.19.4b11"
7
+ version = "1.20.1b1"
8
8
  description = "No description provided"
9
9
  authors = [
10
10
  { name = "Joe Savage", email = "joe.savage@silabs.com" }
@@ -3,12 +3,16 @@ import os
3
3
  import subprocess
4
4
  import sys
5
5
  from datetime import datetime
6
+ from unittest import mock
6
7
  from uuid import UUID, uuid4
7
8
 
8
9
  import pytest
9
10
  from otel_extensions import inject_context_to_env, instrumented
10
11
 
11
- from utf_queue_client.scripts.publish_test_results_cli import normalize_to_json
12
+ from utf_queue_client.scripts.publish_test_results_cli import (
13
+ normalize_to_json,
14
+ publish_test_results_through_queue,
15
+ )
12
16
 
13
17
 
14
18
  @pytest.fixture
@@ -197,7 +201,56 @@ def test_app_build_results_data(request, app_build_results_data):
197
201
 
198
202
 
199
203
  def test_normalize_json():
200
- package_info = '{"name": "cypher", "ref": "gcc"}'
204
+ package_info = '{"dependency":{"security_sxsymcrypt":"test"},"version":2}'
201
205
  parsed = normalize_to_json(raw=package_info)
202
206
  parsed_json_lock = json.loads(parsed)
203
207
  assert parsed_json_lock["version"] == 2
208
+
209
+
210
+ @pytest.mark.parametrize(
211
+ "package_info, expected_pacakge_info",
212
+ [('{"foo": "bar"}', '{"foo": "bar"}'), ("", "{}")],
213
+ )
214
+ @mock.patch(
215
+ "utf_queue_client.scripts.publish_test_results_cli.SqaTestResultProducerFactory"
216
+ )
217
+ def test_publish_build_result_with_package_info(
218
+ mock_factory, app_build_results_data, package_info, expected_pacakge_info
219
+ ):
220
+ mock_producer = mock.Mock()
221
+ mock_factory.create_producer.return_value = mock_producer
222
+ url = "amqp://test"
223
+ data_type = "BUILD_RESULT"
224
+ data_dict = {
225
+ "session_pk_id": "A464578D-E940-4541-B666-DE164654CABC",
226
+ "package_info": package_info,
227
+ }
228
+ for k, v in app_build_results_data:
229
+ data_dict[k] = v
230
+ publish_test_results_through_queue(url, data_type, data_dict)
231
+ assert os.environ["UTF_QUEUE_SERVER_URL"] == url
232
+ assert os.environ["UTF_PRODUCER_APP_ID"]
233
+ mock_producer.publish_app_build_result.assert_called_once()
234
+ args, kwargs = mock_producer.publish_app_build_result.call_args
235
+ assert args[0].app_name == "queue_client"
236
+ assert args[0].package_info == expected_pacakge_info
237
+
238
+
239
+ @mock.patch(
240
+ "utf_queue_client.scripts.publish_test_results_cli.SqaTestResultProducerFactory"
241
+ )
242
+ def test_publish_build_result_with_invalid_package_info(
243
+ mock_factory, app_build_results_data
244
+ ):
245
+ mock_producer = mock.Mock()
246
+ mock_factory.create_producer.return_value = mock_producer
247
+ url = "amqp://test"
248
+ data_type = "BUILD_RESULT"
249
+ data_dict = {
250
+ "session_pk_id": "A464578D-E940-4541-B666-DE164654CABC",
251
+ "package_info": "not a json",
252
+ }
253
+ for k, v in app_build_results_data:
254
+ data_dict[k] = v
255
+ with pytest.raises(RuntimeError, match="Package info is not a valid JSON"):
256
+ publish_test_results_through_queue(url, data_type, data_dict)
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: queue_message.json
3
- # timestamp: 2025-08-07T19:36:24+00:00
3
+ # timestamp: 2025-09-03T08:25:25+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -263,7 +263,10 @@ class XrayIteration(BaseModel):
263
263
  name: Optional[str] = None
264
264
  id: Optional[int] = None
265
265
  parameters: List[XrayParameter]
266
- status: Literal["ABORTED", "BLOCK", "EXECUTING", "FAIL", "PASS", "SKIP", "TODO"]
266
+ status: constr(regex=r"^[A-Z_]+$") = Field(
267
+ ...,
268
+ description="Status for the iteration (examples: PASS, FAIL, SKIP, BLOCK, BROKEN, REGRESSION)",
269
+ )
267
270
 
268
271
 
269
272
  class XrayTestInfo(BaseModel):
@@ -278,7 +281,10 @@ class XrayTestInfo(BaseModel):
278
281
 
279
282
  class XrayTestExecUpdate(BaseModel):
280
283
  test_key: str
281
- status: Literal["ABORTED", "BLOCK", "EXECUTING", "FAIL", "PASS", "SKIP", "TODO"]
284
+ status: constr(regex=r"^[A-Z_]+$") = Field(
285
+ ...,
286
+ description="Test run status (examples: PASS, FAIL, SKIP, BLOCK, BROKEN, REGRESSION)",
287
+ )
282
288
  test_info: Optional[XrayTestInfo] = None
283
289
  test_version: Optional[str] = None
284
290
  start: Optional[str] = None
@@ -1,6 +1,6 @@
1
1
  # generated by datamodel-codegen:
2
2
  # filename: queue_message.json
3
- # timestamp: 2025-08-07T19:36:24+00:00
3
+ # timestamp: 2025-09-03T08:25:26+00:00
4
4
 
5
5
  from __future__ import annotations
6
6
 
@@ -260,7 +260,10 @@ class XrayIteration(BaseModel):
260
260
  name: Optional[str] = None
261
261
  id: Optional[int] = None
262
262
  parameters: List[XrayParameter]
263
- status: Literal["ABORTED", "BLOCK", "EXECUTING", "FAIL", "PASS", "SKIP", "TODO"]
263
+ status: constr(pattern=r"^[A-Z_]+$") = Field(
264
+ ...,
265
+ description="Status for the iteration (examples: PASS, FAIL, SKIP, BLOCK, BROKEN, REGRESSION)",
266
+ )
264
267
 
265
268
 
266
269
  class XrayTestInfo(BaseModel):
@@ -275,7 +278,10 @@ class XrayTestInfo(BaseModel):
275
278
 
276
279
  class XrayTestExecUpdate(BaseModel):
277
280
  test_key: str
278
- status: Literal["ABORTED", "BLOCK", "EXECUTING", "FAIL", "PASS", "SKIP", "TODO"]
281
+ status: constr(pattern=r"^[A-Z_]+$") = Field(
282
+ ...,
283
+ description="Test run status (examples: PASS, FAIL, SKIP, BLOCK, BROKEN, REGRESSION)",
284
+ )
279
285
  test_info: Optional[XrayTestInfo] = None
280
286
  test_version: Optional[str] = None
281
287
  start: Optional[str] = None
@@ -794,15 +794,8 @@
794
794
  }
795
795
  },
796
796
  "status": {
797
- "enum": [
798
- "ABORTED",
799
- "BLOCK",
800
- "EXECUTING",
801
- "FAIL",
802
- "PASS",
803
- "SKIP",
804
- "TODO"
805
- ],
797
+ "description": "Status for the iteration (examples: PASS, FAIL, SKIP, BLOCK, BROKEN, REGRESSION)",
798
+ "pattern": "^[A-Z_]+$",
806
799
  "type": "string"
807
800
  }
808
801
  },
@@ -856,15 +849,8 @@
856
849
  "type": "string"
857
850
  },
858
851
  "status": {
859
- "enum": [
860
- "ABORTED",
861
- "BLOCK",
862
- "EXECUTING",
863
- "FAIL",
864
- "PASS",
865
- "SKIP",
866
- "TODO"
867
- ],
852
+ "description": "Test run status (examples: PASS, FAIL, SKIP, BLOCK, BROKEN, REGRESSION)",
853
+ "pattern": "^[A-Z_]+$",
868
854
  "type": "string"
869
855
  },
870
856
  "test_info": {
@@ -1,7 +1,5 @@
1
1
  import json
2
2
  import os
3
- import base64
4
-
5
3
  from typing import Iterable, Tuple
6
4
 
7
5
  import click
@@ -136,8 +134,8 @@ def normalize_to_json(raw: str) -> str:
136
134
  try:
137
135
  json_obj = json.loads(raw)
138
136
  return json.dumps(json_obj)
139
- except json.JSONDecodeError:
140
- raise ValueError(f"Package info is not a valid JSON")
137
+ except json.JSONDecodeError as e:
138
+ raise RuntimeError("Package info is not a valid JSON") from e
141
139
 
142
140
 
143
141
  def prepare_session_data(data_dict: dict):
@@ -53,7 +53,7 @@ def cli_entrypoint(
53
53
  retries: int,
54
54
  queue: bool,
55
55
  ):
56
- return cli(file_path, metadata, username, password, client_id, retries, queue)
56
+ cli(file_path, metadata, username, password, client_id, retries, queue)
57
57
 
58
58
 
59
59
  def cli(
@@ -79,9 +79,9 @@ def cli(
79
79
  if queue:
80
80
  upload_artifact_through_queue(url, client_id, file_path, metadata_dict)
81
81
  else:
82
- return upload_artifact_direct(file_path, metadata_dict)
82
+ upload_artifact_direct(file_path, metadata_dict)
83
83
 
84
- return retry_wrapper()
84
+ retry_wrapper()
85
85
 
86
86
 
87
87
  @instrumented
@@ -122,7 +122,6 @@ def upload_artifact_direct(file_path, metadata_dict):
122
122
  )
123
123
  if resp.status_code != 200 and resp.status_code != 201:
124
124
  raise RuntimeError(resp.content)
125
- return resp.json().get("id")
126
125
  else:
127
126
  span.set_attribute("multipart_upload", False)
128
127
  UbaiArtifactUploadRequestProducer.upload_artifact_direct(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: utf-queue-client
3
- Version: 1.19.4b11
3
+ Version: 1.20.1b1
4
4
  Summary: No description provided
5
5
  Author-email: Joe Savage <joe.savage@silabs.com>
6
6
  Keywords: UTF