dt-extensions-sdk 1.1.20__tar.gz → 1.1.22__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 (80) hide show
  1. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/PKG-INFO +1 -1
  2. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/dynatrace_extension/__about__.py +1 -1
  3. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/dynatrace_extension/sdk/communication.py +5 -1
  4. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/tests/sdk/test_communication.py +20 -3
  5. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/.github/workflows/gh-pages-docs.yml +0 -0
  6. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/.github/workflows/publish.yml +0 -0
  7. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/.gitignore +0 -0
  8. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/LICENSE.txt +0 -0
  9. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/README.md +0 -0
  10. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/_static/dt-sdk-header.png +0 -0
  11. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/_static/dt-sdk-logo.png +0 -0
  12. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/_static/favicon.ico +0 -0
  13. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/_static/img/migrate-01-new-extension.png +0 -0
  14. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/_static/img/migrate-02-type.png +0 -0
  15. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/_static/img/migrate-03-import.png +0 -0
  16. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/_static/img/migrate-04-import-remote.png +0 -0
  17. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/_static/img/migrate-05-activation.png +0 -0
  18. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/_static/img/migrate-06-activation-config.png +0 -0
  19. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/api/events/event_severity.rst +0 -0
  20. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/api/events/event_type.rst +0 -0
  21. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/api/events/index.rst +0 -0
  22. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/api/extension.rst +0 -0
  23. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/api/metrics/index.rst +0 -0
  24. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/api/metrics/metric.rst +0 -0
  25. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/api/metrics/metric_type.rst +0 -0
  26. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/cli/assemble.rst +0 -0
  27. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/cli/build.rst +0 -0
  28. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/cli/create.rst +0 -0
  29. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/cli/gencerts.rst +0 -0
  30. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/cli/help.rst +0 -0
  31. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/cli/run.rst +0 -0
  32. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/cli/sign.rst +0 -0
  33. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/cli/upload.rst +0 -0
  34. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/cli/wheel.rst +0 -0
  35. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/conf.py +0 -0
  36. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/guides/building.rst +0 -0
  37. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/guides/extension_structure.rst +0 -0
  38. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/guides/installation.rst +0 -0
  39. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/guides/migration.rst +0 -0
  40. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/index.rst +0 -0
  41. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/docs/requirements.txt +0 -0
  42. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/dynatrace_extension/__init__.py +0 -0
  43. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/dynatrace_extension/cli/__init__.py +0 -0
  44. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/dynatrace_extension/cli/create/__init__.py +0 -0
  45. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/dynatrace_extension/cli/create/create.py +0 -0
  46. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/dynatrace_extension/cli/create/extension_template/.gitignore.template +0 -0
  47. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/dynatrace_extension/cli/create/extension_template/README.md.template +0 -0
  48. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/dynatrace_extension/cli/create/extension_template/activation.json.template +0 -0
  49. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/dynatrace_extension/cli/create/extension_template/extension/activationSchema.json.template +0 -0
  50. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/dynatrace_extension/cli/create/extension_template/extension/extension.yaml.template +0 -0
  51. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/dynatrace_extension/cli/create/extension_template/extension_name/__init__.py.template +0 -0
  52. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/dynatrace_extension/cli/create/extension_template/extension_name/__main__.py.template +0 -0
  53. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/dynatrace_extension/cli/create/extension_template/setup.py.template +0 -0
  54. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/dynatrace_extension/cli/main.py +0 -0
  55. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/dynatrace_extension/cli/schema.py +0 -0
  56. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/dynatrace_extension/sdk/__init__.py +0 -0
  57. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/dynatrace_extension/sdk/activation.py +0 -0
  58. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/dynatrace_extension/sdk/callback.py +0 -0
  59. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/dynatrace_extension/sdk/event.py +0 -0
  60. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/dynatrace_extension/sdk/extension.py +0 -0
  61. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/dynatrace_extension/sdk/helper.py +0 -0
  62. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/dynatrace_extension/sdk/metric.py +0 -0
  63. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/dynatrace_extension/sdk/runtime.py +0 -0
  64. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/dynatrace_extension/sdk/vendor/__init__.py +0 -0
  65. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/dynatrace_extension/sdk/vendor/mureq/LICENSE +0 -0
  66. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/dynatrace_extension/sdk/vendor/mureq/__init__.py +0 -0
  67. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/dynatrace_extension/sdk/vendor/mureq/mureq.py +0 -0
  68. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/pyproject.toml +0 -0
  69. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/tests/__init__.py +0 -0
  70. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/tests/cli/__init__.py +0 -0
  71. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/tests/cli/test_dt_sdk.py +0 -0
  72. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/tests/cli/test_templates.py +0 -0
  73. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/tests/cli/test_types.py +0 -0
  74. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/tests/sdk/__init__.py +0 -0
  75. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/tests/sdk/test_activation.py +0 -0
  76. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/tests/sdk/test_callback.py +0 -0
  77. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/tests/sdk/test_extension.py +0 -0
  78. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/tests/sdk/test_metric.py +0 -0
  79. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/tests/sdk/test_runtime_properties.py +0 -0
  80. {dt_extensions_sdk-1.1.20 → dt_extensions_sdk-1.1.22}/tests/sdk/test_status.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: dt-extensions-sdk
3
- Version: 1.1.20
3
+ Version: 1.1.22
4
4
  Project-URL: Documentation, https://github.com/dynatrace-extensions/dt-extensions-python-sdk#readme
5
5
  Project-URL: Issues, https://github.com/dynatrace-extensions/dt-extensions-python-sdk/issues
6
6
  Project-URL: Source, https://github.com/dynatrace-extensions/dt-extensions-python-sdk
@@ -2,4 +2,4 @@
2
2
  #
3
3
  # SPDX-License-Identifier: MIT
4
4
 
5
- __version__ = "1.1.20"
5
+ __version__ = "1.1.22"
@@ -415,6 +415,8 @@ class DebugClient(CommunicationClient):
415
415
 
416
416
  def send_events(self, events: dict | list[dict], eec_enrichment: bool = True) -> list[dict | None]:
417
417
  self.logger.info(f"send_events (enrichment = {eec_enrichment}): {len(events)} events")
418
+ if isinstance(events, dict):
419
+ events = [events]
418
420
  if self.print_metrics:
419
421
  for event in events:
420
422
  self.logger.info(f"send_event: {event}")
@@ -444,7 +446,9 @@ def divide_into_batches(items: Sequence[dict | str], max_size_bytes: int, join_w
444
446
 
445
447
  if join_with is not None:
446
448
  items = join_with.join(items)
447
- encoded = f"{items}".encode(errors="replace")
449
+ encoded = f"{items}".encode(errors="replace")
450
+ else:
451
+ encoded = json.dumps(items).encode(errors="replace")
448
452
  size = len(encoded)
449
453
  if size <= max_size_bytes:
450
454
  yield encoded
@@ -1,3 +1,4 @@
1
+ import json
1
2
  import unittest
2
3
  from unittest.mock import MagicMock, mock_open, patch
3
4
 
@@ -53,13 +54,13 @@ class TestCommunication(unittest.TestCase):
53
54
 
54
55
  def test_large_metric_chunk(self):
55
56
 
56
- metrics = ['my.metric,dim="dim" 10'] * 500 * 100 # 1_300_000 bytes, but becomes 1_149_999 with the newlines
57
+ metrics = ['my.metric,dim="dim" 10'] * 500 * 100
57
58
 
58
59
  # it needs to be divided into 2 lists, each with 650_000 bytes
59
60
  chunks = list(divide_into_batches(metrics, MAX_METRIC_REQUEST_SIZE, "\n"))
60
61
  self.assertEqual(len(chunks), 2)
61
- self.assertEqual(len(chunks[0]), 574999)
62
- self.assertEqual(len(chunks[1]), 575000)
62
+ self.assertEqual(len(chunks[0]), 650000)
63
+ self.assertEqual(len(chunks[1]), 650002)
63
64
 
64
65
  def test_small_metric_chunk(self):
65
66
  metrics = ['my.metric,dim="dim" 10'] * 100
@@ -73,3 +74,19 @@ class TestCommunication(unittest.TestCase):
73
74
 
74
75
  chunks = list(divide_into_batches(metrics, MAX_METRIC_REQUEST_SIZE, "\n"))
75
76
  self.assertEqual(len(chunks), 0)
77
+
78
+ def test_large_log_chunk_valid_json(self):
79
+
80
+ events = []
81
+ for i in range(5000):
82
+ attributes = {}
83
+ for j in range(150):
84
+ attributes[f"attribute{j}"] = j
85
+ events.append(attributes)
86
+
87
+ # it needs to be divided into 4 lists, each with 3_665_000 bytes
88
+ chunks = list(divide_into_batches(events, MAX_LOG_REQUEST_SIZE))
89
+ self.assertEqual(len(chunks), 4)
90
+
91
+ for chunk in chunks:
92
+ json.loads(chunk)