iii-sdk 0.13.0.dev1__tar.gz → 0.14.0.dev2__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.
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/PKG-INFO +1 -1
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/pyproject.toml +1 -1
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/src/iii/iii.py +17 -0
- iii_sdk-0.14.0.dev2/tests/test_trigger_registration_error.py +57 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/.gitignore +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/README.md +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/src/iii/__init__.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/src/iii/baggage_span_processor.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/src/iii/channels.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/src/iii/errors.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/src/iii/format_utils.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/src/iii/iii_constants.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/src/iii/iii_types.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/src/iii/logger.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/src/iii/otel_worker_gauges.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/src/iii/payload.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/src/iii/span_ops.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/src/iii/state.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/src/iii/stream.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/src/iii/telemetry.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/src/iii/telemetry_exporters.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/src/iii/telemetry_types.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/src/iii/triggers.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/src/iii/types.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/src/iii/utils.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/src/iii/worker_metrics.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/conftest.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_api_triggers.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_async_api.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_baggage_span_processor.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_bridge.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_channel_close_delay.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_context_propagation.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_data_channels.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_errors.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_format_utils.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_healthcheck.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_hold_process.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_http_external_functions_integration.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_iii_registration_dedup.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_init_api.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_invocation_exception.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_logger_function_ids.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_logger_otel.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_middleware.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_payload.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_pubsub.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_queue_integration.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_rbac_workers.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_register_function_args.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_span_ops.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_state.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_stream_models.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_streams.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_streams_runtime_annotations.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_sync_api.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_telemetry.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_telemetry_exporters.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_telemetry_types.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_trace_helpers.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_trigger_metadata.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_utils.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_worker_metadata.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_worker_metrics.py +0 -0
- {iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/uv.lock +0 -0
|
@@ -438,6 +438,8 @@ class III:
|
|
|
438
438
|
)
|
|
439
439
|
elif msg_type == MessageType.REGISTER_TRIGGER.value:
|
|
440
440
|
asyncio.create_task(self._handle_trigger_registration(data))
|
|
441
|
+
elif msg_type == MessageType.TRIGGER_REGISTRATION_RESULT.value:
|
|
442
|
+
self._handle_trigger_registration_result(data)
|
|
441
443
|
elif msg_type == MessageType.WORKER_REGISTERED.value:
|
|
442
444
|
worker_id = data.get("worker_id", "")
|
|
443
445
|
self._worker_id = worker_id
|
|
@@ -701,6 +703,21 @@ class III:
|
|
|
701
703
|
}
|
|
702
704
|
)
|
|
703
705
|
|
|
706
|
+
def _handle_trigger_registration_result(self, data: dict[str, Any]) -> None:
|
|
707
|
+
error = data.get("error")
|
|
708
|
+
if not error:
|
|
709
|
+
return
|
|
710
|
+
|
|
711
|
+
trigger_id = data.get("id", "")
|
|
712
|
+
trigger_type = data.get("trigger_type", "")
|
|
713
|
+
message = error.get("message", "")
|
|
714
|
+
log.error(
|
|
715
|
+
"[iii] Trigger registration failed for %r (%s): %s",
|
|
716
|
+
trigger_id,
|
|
717
|
+
trigger_type,
|
|
718
|
+
message,
|
|
719
|
+
)
|
|
720
|
+
|
|
704
721
|
# Connection state management
|
|
705
722
|
|
|
706
723
|
def _set_connection_state(self, state: IIIConnectionState) -> None:
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"""Tests for engine-reported trigger registration errors."""
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
|
|
5
|
+
from unittest.mock import AsyncMock, patch
|
|
6
|
+
|
|
7
|
+
from iii.iii import III, InitOptions
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def _send_message(client: III, payload: dict) -> None:
|
|
11
|
+
with patch.object(client, "_send", new_callable=AsyncMock):
|
|
12
|
+
client._run_on_loop(client._handle_message(json.dumps(payload)))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def test_trigger_registration_result_error_is_logged(caplog):
|
|
16
|
+
client = III(address="ws://localhost:9999", options=InitOptions(worker_name="test"))
|
|
17
|
+
caplog.set_level("ERROR", logger="iii")
|
|
18
|
+
|
|
19
|
+
_send_message(
|
|
20
|
+
client,
|
|
21
|
+
{
|
|
22
|
+
"type": "triggerregistrationresult",
|
|
23
|
+
"id": "trig-1",
|
|
24
|
+
"trigger_type": "http",
|
|
25
|
+
"function_id": "fn-1",
|
|
26
|
+
"error": {
|
|
27
|
+
"code": "trigger_type_not_found",
|
|
28
|
+
"message": 'Trigger type "http" not found — worker iii-http is missing. Run: iii worker add iii-http',
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
messages = [record.getMessage() for record in caplog.records]
|
|
34
|
+
assert any("iii worker add iii-http" in m for m in messages), messages
|
|
35
|
+
assert any("trig-1" in m for m in messages), messages
|
|
36
|
+
|
|
37
|
+
client.shutdown()
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def test_trigger_registration_result_success_does_not_log(caplog):
|
|
41
|
+
client = III(address="ws://localhost:9999", options=InitOptions(worker_name="test"))
|
|
42
|
+
caplog.set_level("ERROR", logger="iii")
|
|
43
|
+
|
|
44
|
+
_send_message(
|
|
45
|
+
client,
|
|
46
|
+
{
|
|
47
|
+
"type": "triggerregistrationresult",
|
|
48
|
+
"id": "trig-2",
|
|
49
|
+
"trigger_type": "http",
|
|
50
|
+
"function_id": "fn-2",
|
|
51
|
+
},
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
messages = [record.getMessage() for record in caplog.records]
|
|
55
|
+
assert not any("Trigger registration" in m for m in messages), messages
|
|
56
|
+
|
|
57
|
+
client.shutdown()
|
|
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
|
|
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
|
|
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
|
{iii_sdk-0.13.0.dev1 → iii_sdk-0.14.0.dev2}/tests/test_http_external_functions_integration.py
RENAMED
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|