This is an automated email from the ASF dual-hosted git repository.

github-merge-queue[bot] pushed a commit to branch 
gh-readonly-queue/main/pr-8264-74c23f1f317b867db89ca96118485fd5628990da
in repository https://gitbox.apache.org/repos/asf/texera.git

commit 64818bc0012fd779875c3e9f6861a1cf1d9a6ab0
Author: carloea2 <[email protected]>
AuthorDate: Wed Oct 14 23:16:45 2026 +0000

    feat(pyamber): resolve unset input port zero (#8264)
    
    ### What changes were proposed in this PR?
    
    Normalize unset protobuf port fields before the dictionary lookup,
    keeping lookup O(1). This lets an unset port-zero identity find the
    registered port and preserves a clear KeyError for unknown ports.
    
    ### Any related issues, documentation, discussions?
    
    Closes #8263
    
    ### How was this PR tested?
    
    The untouched live probe showed equal port-zero identities with
    different hashes and raised `KeyError`. After the fix it reported
    `lookup_succeeded=True` with the hashes still different.
    
    `C:\Users\carlo\texera\texera\.venv312\Scripts\python.exe -c "import
    sys,pytest;
    
sys.path[:0]=[r'C:\Users\carlo\texera\texera-worktrees\investigate-bug68\amber\src\main\python',r'C:\Users\carlo\texera\texera\amber\src\main\python'];
    raise
    
SystemExit(pytest.main([r'amber/src/test/python/core/architecture/packaging/test_input_manager.py','-q','-p','no:cacheprovider']))"`
    
    `C:\Users\carlo\texera\texera\.venv312\Scripts\ruff.exe check
    amber/src/main/python amber/src/test/python`
    
    `C:\Users\carlo\texera\texera\.venv312\Scripts\ruff.exe format --check
    amber/src/main/python/core/architecture/packaging/input_manager.py
    amber/src/test/python/core/architecture/packaging/test_input_manager.py`
    
    ### Was this PR authored or co-authored using generative AI tooling?
    
    Generated-by: Codex
---
 .../src/main/python/core/architecture/packaging/input_manager.py | 9 ++++++++-
 .../python/core/architecture/packaging/test_input_manager.py     | 8 ++++++++
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/amber/src/main/python/core/architecture/packaging/input_manager.py 
b/amber/src/main/python/core/architecture/packaging/input_manager.py
index 22b7fe0286..5c72abca93 100644
--- a/amber/src/main/python/core/architecture/packaging/input_manager.py
+++ b/amber/src/main/python/core/architecture/packaging/input_manager.py
@@ -139,7 +139,14 @@ class InputManager:
         return self._channels[channel_id].port_id
 
     def get_port(self, port_id: PortIdentity) -> WorkerPort:
-        return self._ports[port_id]
+        if port_id.id is None:
+            port_id.id = 0
+        if port_id.internal is None:
+            port_id.internal = False
+        try:
+            return self._ports[port_id]
+        except KeyError as error:
+            raise KeyError(f"unknown input port {port_id}") from error
 
     def register_input(
         self, channel_id: ChannelIdentity, port_id: PortIdentity
diff --git 
a/amber/src/test/python/core/architecture/packaging/test_input_manager.py 
b/amber/src/test/python/core/architecture/packaging/test_input_manager.py
index 643f16ddcb..2a23e96c1f 100644
--- a/amber/src/test/python/core/architecture/packaging/test_input_manager.py
+++ b/amber/src/test/python/core/architecture/packaging/test_input_manager.py
@@ -73,6 +73,14 @@ class TestPortIdentityDefaults:
         # PortIdentity(0, False) resolves to the very same port.
         assert manager.get_port(PortIdentity(0, False)).get_schema() == schema
 
+    def test_get_port_resolves_unset_zero_identity(self, manager):
+        schema = Schema(raw_schema={"x": "INTEGER"})
+        manager.add_input_port(PortIdentity(0, False), schema, [], [])
+
+        assert manager.get_port(PortIdentity()).get_schema() == schema
+        with pytest.raises(KeyError, match="unknown input port"):
+            manager.get_port(PortIdentity(1, False))
+
     def test_register_input_defaults_unset_fields(self, manager):
         canonical = PortIdentity(0, False)
         manager.add_input_port(canonical, Schema(raw_schema={"x": "INTEGER"}), 
[], [])

Reply via email to