utf-queue-client 1.16.0__tar.gz → 1.17.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/PKG-INFO +1 -1
  2. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/setup.py +1 -1
  3. utf-queue-client-1.17.0/test/test_rail_data_producer_tests.py +64 -0
  4. utf-queue-client-1.17.0/utf_queue_client/clients/test_rail_data_producer.py +95 -0
  5. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client.egg-info/PKG-INFO +1 -1
  6. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client.egg-info/SOURCES.txt +2 -0
  7. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/README.md +0 -0
  8. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/setup.cfg +0 -0
  9. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_amqp_connections.py +0 -0
  10. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_async_consumer.py +0 -0
  11. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_connection_retry.py +0 -0
  12. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_data_lake_data_producer.py +0 -0
  13. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_http_producer.py +0 -0
  14. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_legacy_base_model.py +0 -0
  15. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_models.py +0 -0
  16. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_opentelemetry_data_producer.py +0 -0
  17. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_publish_release_info.py +0 -0
  18. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_publish_test_results.py +0 -0
  19. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_sqa_test_result_producer.py +0 -0
  20. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_ubai_copy.py +0 -0
  21. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_ubai_search.py +0 -0
  22. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_ubai_update_retention.py +0 -0
  23. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_ubai_upload.py +0 -0
  24. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/test/test_utils.py +0 -0
  25. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/__init__.py +0 -0
  26. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/clients/__init__.py +0 -0
  27. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/clients/async_consumer.py +0 -0
  28. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/clients/base_producer.py +0 -0
  29. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/clients/data_lake_data_producer.py +0 -0
  30. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/clients/http_producer.py +0 -0
  31. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/clients/opentelemetry_data_producer.py +0 -0
  32. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/clients/sqa_test_result_producer.py +0 -0
  33. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/clients/ubai_artifact_upload_request_producer.py +0 -0
  34. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/exceptions/__init__.py +0 -0
  35. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/models/__init__.py +0 -0
  36. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/models/base_model.py +0 -0
  37. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/models/model_factory.py +0 -0
  38. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/models/schemas/__init__.py +0 -0
  39. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/scripts/__init__.py +0 -0
  40. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/scripts/publish_release_info_cli.py +0 -0
  41. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/scripts/publish_test_results_cli.py +0 -0
  42. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/scripts/ubai_copy_cli.py +0 -0
  43. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/scripts/ubai_search_cli.py +0 -0
  44. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/scripts/ubai_update_retention_cli.py +0 -0
  45. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/scripts/ubai_upload_cli.py +0 -0
  46. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/utils/__init__.py +0 -0
  47. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/utils/queue_metrics_exporter.py +0 -0
  48. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client/utils/queue_span_exporter.py +0 -0
  49. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client.egg-info/dependency_links.txt +0 -0
  50. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client.egg-info/entry_points.txt +0 -0
  51. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client.egg-info/requires.txt +0 -0
  52. {utf-queue-client-1.16.0 → utf-queue-client-1.17.0}/utf_queue_client.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.2
2
2
  Name: utf-queue-client
3
- Version: 1.16.0
3
+ Version: 1.17.0
4
4
  Summary: UNKNOWN
5
5
  Home-page: UNKNOWN
6
6
  Author: Joe Savage
@@ -6,7 +6,7 @@
6
6
  from setuptools import setup, find_packages # noqa: H301
7
7
 
8
8
  NAME = "utf-queue-client"
9
- VERSION = "1.16.0"
9
+ VERSION = "1.17.0"
10
10
  # To install the library, run the following
11
11
  #
12
12
  # python setup.py install
@@ -0,0 +1,64 @@
1
+ from unittest.mock import MagicMock
2
+
3
+ from utf_queue_client.clients.test_rail_data_producer import (
4
+ TestRailDataProducer,
5
+ TestRailDataProducerFactory,
6
+ DummyTestRailDataProducer,
7
+ LocalTestRailDataProducer,
8
+ )
9
+ import pytest
10
+ import os
11
+
12
+
13
+ def test_result_producer_empty_url():
14
+ with pytest.raises(RuntimeError):
15
+ _ = TestRailDataProducer()
16
+
17
+
18
+ @pytest.mark.parametrize("queue_consumer", [60, 120], indirect=True)
19
+ def test_result_producer_central_queue(
20
+ request,
21
+ test_rail_add_test_result,
22
+ amqp_url,
23
+ queue_consumer,
24
+ ):
25
+ os.environ["UTF_PRODUCER_APP_ID"] = request.node.name
26
+ producer = TestRailDataProducerFactory.create_producer()
27
+ producer.publish_add_test_result(test_rail_add_test_result)
28
+ queue_consumer.expect_messages(1)
29
+
30
+
31
+ def test_dummy_producer(test_rail_add_test_result):
32
+ producer = DummyTestRailDataProducer()
33
+ producer.publish_add_test_result(test_rail_add_test_result)
34
+
35
+
36
+ def test_local_test_rail_producer(test_rail_add_test_result, mocker):
37
+ mocker.patch(
38
+ "utf_queue_client.clients.base_producer.BlockingProducer.__init__",
39
+ return_value=None,
40
+ )
41
+ mocker.patch(
42
+ "utf_queue_client.clients.base_producer.BlockingProducer.queue_declare"
43
+ )
44
+ mock_producer_publish = mocker.patch(
45
+ "utf_queue_client.clients.base_producer.BlockingProducer.publish"
46
+ )
47
+ producer = LocalTestRailDataProducer()
48
+ producer.producer_app_id = "DUMMY"
49
+ producer.publish_add_test_result(test_rail_add_test_result)
50
+ assert mock_producer_publish.called
51
+ kwargs = mock_producer_publish.call_args.kwargs
52
+ payload = kwargs.get("payload")
53
+ assert payload.get("recordType") == "TEST_RAIL_EVENT"
54
+ assert payload.get("recordSubType") == "TEST_RESULT"
55
+ assert payload.get("tenantKey") == "DUMMY"
56
+ payload_data = payload.get("payload")
57
+ assert payload_data.get("version") == "v1"
58
+ assert payload_data.get("comment") == "testing"
59
+ assert payload_data.get("status") == "pass"
60
+ assert payload_data.get("run_id") == 1234
61
+ assert payload_data.get("id") == "C123"
62
+ custom_props = payload_data.get("custom_props")
63
+ assert custom_props.get("custom_interface_type") == "gcc"
64
+ assert custom_props.get("custom_evk_version") == "v2"
@@ -0,0 +1,95 @@
1
+ import os
2
+ from .base_producer import BlockingProducer as AMQPBlockingProducer, ConnectionError
3
+ from .http_producer import CompositeHTTPProducer
4
+ from ..models import TestRailResult
5
+ from ..models import QueueMessage
6
+ from . import Loggable
7
+ from socket import gethostname
8
+ from datetime import datetime
9
+ from abc import ABC, abstractmethod
10
+ from otel_extensions import instrumented
11
+ from typing import Optional
12
+
13
+
14
+ __all__ = [
15
+ "TestRailDataProducer",
16
+ "DummyTestRailDataProducer",
17
+ "ConnectionError",
18
+ "TestRailDataProducerFactory",
19
+ ]
20
+
21
+
22
+ class BaseTestRailDataProducer(ABC):
23
+ @abstractmethod
24
+ def publish_add_test_result(self, test_result: TestRailResult):
25
+ """publish a test result object"""
26
+
27
+
28
+ class TestRailDataProducer(BaseTestRailDataProducer):
29
+ RECORD_TYPE = "TEST_RAIL_EVENT"
30
+
31
+ def __init__(
32
+ self,
33
+ url=None,
34
+ producer_app_id: str = None,
35
+ producer_class: Optional[type] = None,
36
+ ):
37
+ if producer_class is None:
38
+ producer_class = AMQPBlockingProducer
39
+ self.queue_name = "default"
40
+ self.__producer_client = producer_class(url, producer_app_id)
41
+ self.__producer_client.queue_declare(queue=self.queue_name, durable=True)
42
+ self.producer_app_id = producer_app_id
43
+
44
+ @instrumented
45
+ def publish_add_test_result(self, test_result: TestRailResult):
46
+ queue_message = QueueMessage(
47
+ payload=test_result,
48
+ recordType=self.RECORD_TYPE,
49
+ recordSubType="TEST_RESULT",
50
+ tenantKey=self.producer_app_id,
51
+ recordTimestamp=datetime.now().isoformat(),
52
+ )
53
+ queue_message.validate_schema()
54
+ self.__producer_client.publish(
55
+ exchange="",
56
+ routing_key=self.queue_name,
57
+ payload=queue_message.as_dict(),
58
+ persistent=True,
59
+ )
60
+
61
+
62
+ class LocalTestRailDataProducer(TestRailDataProducer):
63
+ def __init__(self):
64
+ super().__init__(
65
+ "amqp://guest:guest@localhost:5672/%2f",
66
+ os.environ.get(
67
+ "UTF_PRODUCER_APP_ID", f"LocalTestRailDataProducer at {gethostname()}"
68
+ ),
69
+ )
70
+
71
+
72
+ class DummyTestRailDataProducer(BaseTestRailDataProducer):
73
+ def publish_add_test_result(self, test_result: TestRailResult):
74
+ # noqa
75
+ pass
76
+
77
+
78
+ class TestRailDataProducerFactory(Loggable):
79
+ @classmethod
80
+ def create_producer(cls, raise_on_connection_error=False):
81
+ try:
82
+ queue_server_url = os.environ.get("UTF_QUEUE_SERVER_URL")
83
+ if queue_server_url is not None:
84
+ return TestRailDataProducer(
85
+ url=queue_server_url,
86
+ producer_app_id=os.environ.get("UTF_PRODUCER_APP_ID"),
87
+ producer_class=CompositeHTTPProducer,
88
+ )
89
+ else:
90
+ return LocalTestRailDataProducer()
91
+ except ConnectionError as e:
92
+ cls.logger.warning(f"Unable to connect to queue server: {repr(e)}")
93
+ if raise_on_connection_error:
94
+ raise
95
+ return DummyTestRailDataProducer()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.2
2
2
  Name: utf-queue-client
3
- Version: 1.16.0
3
+ Version: 1.17.0
4
4
  Summary: UNKNOWN
5
5
  Home-page: UNKNOWN
6
6
  Author: Joe Savage
@@ -11,6 +11,7 @@ test/test_models.py
11
11
  test/test_opentelemetry_data_producer.py
12
12
  test/test_publish_release_info.py
13
13
  test/test_publish_test_results.py
14
+ test/test_rail_data_producer_tests.py
14
15
  test/test_sqa_test_result_producer.py
15
16
  test/test_ubai_copy.py
16
17
  test/test_ubai_search.py
@@ -31,6 +32,7 @@ utf_queue_client/clients/data_lake_data_producer.py
31
32
  utf_queue_client/clients/http_producer.py
32
33
  utf_queue_client/clients/opentelemetry_data_producer.py
33
34
  utf_queue_client/clients/sqa_test_result_producer.py
35
+ utf_queue_client/clients/test_rail_data_producer.py
34
36
  utf_queue_client/clients/ubai_artifact_upload_request_producer.py
35
37
  utf_queue_client/exceptions/__init__.py
36
38
  utf_queue_client/models/__init__.py