From 7abd07f66ed3a35dc6abc3e010caab3ae0967299 Mon Sep 17 00:00:00 2001 From: Rouven Bauer Date: Tue, 17 May 2022 09:49:47 +0200 Subject: [PATCH 1/2] Cache socket port number in bolt class --- neo4j/io/__init__.py | 6 +----- neo4j/io/_bolt3.py | 7 ------- neo4j/io/_bolt4.py | 7 ------- neo4j/io/_common.py | 3 ++- 4 files changed, 3 insertions(+), 20 deletions(-) diff --git a/neo4j/io/__init__.py b/neo4j/io/__init__.py index d7ed2323a..cef82cc2d 100644 --- a/neo4j/io/__init__.py +++ b/neo4j/io/__init__.py @@ -149,6 +149,7 @@ class Bolt(abc.ABC): def __init__(self, unresolved_address, sock, max_connection_lifetime, *, auth=None, user_agent=None, routing_context=None): self.unresolved_address = unresolved_address self.socket = sock + self.local_port = self.socket.getsockname()[1] self.server_info = ServerInfo(Address(sock.getpeername()), self.PROTOCOL_VERSION) # so far `connection.recv_timeout_seconds` is the only available # configuration hint that exists. Therefore, all hints can be stored at @@ -373,11 +374,6 @@ def encrypted(self): def der_encoded_server_certificate(self): pass - @property - @abc.abstractmethod - def local_port(self): - pass - @abc.abstractmethod def hello(self): """ Appends a HELLO message to the outgoing queue, sends it and consumes diff --git a/neo4j/io/_bolt3.py b/neo4j/io/_bolt3.py index 704d8740b..2fe88363b 100644 --- a/neo4j/io/_bolt3.py +++ b/neo4j/io/_bolt3.py @@ -140,13 +140,6 @@ def encrypted(self): def der_encoded_server_certificate(self): return self.socket.getpeercert(binary_form=True) - @property - def local_port(self): - try: - return self.socket.getsockname()[1] - except OSError: - return 0 - def get_base_headers(self): return { "user_agent": self.user_agent, diff --git a/neo4j/io/_bolt4.py b/neo4j/io/_bolt4.py index 3bb90ab69..1acc8ab92 100644 --- a/neo4j/io/_bolt4.py +++ b/neo4j/io/_bolt4.py @@ -98,13 +98,6 @@ def encrypted(self): def der_encoded_server_certificate(self): return self.socket.getpeercert(binary_form=True) - @property - def local_port(self): - try: - return self.socket.getsockname()[1] - except OSError: - return 0 - def get_base_headers(self): return { "user_agent": self.user_agent, diff --git a/neo4j/io/_common.py b/neo4j/io/_common.py index 8fa25ee84..c974462f5 100644 --- a/neo4j/io/_common.py +++ b/neo4j/io/_common.py @@ -41,6 +41,7 @@ class MessageInbox: def __init__(self, s, on_error): self.on_error = on_error + self._local_port = s.getsockname()[1] self._messages = self._yield_messages(s) def _yield_messages(self, sock): @@ -55,7 +56,7 @@ def _yield_messages(self, sock): buffer.receive(sock, 2) chunk_size = buffer.pop_u16() if chunk_size == 0: - log.debug("[#%04X] S: ", sock.getsockname()[1]) + log.debug("[#%04X] S: ", self._local_port) buffer.receive(sock, chunk_size + 2) chunk_size = buffer.pop_u16() From f71a945d1668bad2f3622114b7e8954c7bb8ed46 Mon Sep 17 00:00:00 2001 From: Rouven Bauer Date: Tue, 17 May 2022 11:34:12 +0200 Subject: [PATCH 2/2] Adjust mock for unit tests --- tests/unit/work/_fake_connection.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/unit/work/_fake_connection.py b/tests/unit/work/_fake_connection.py index fef0b580a..c1f78a192 100644 --- a/tests/unit/work/_fake_connection.py +++ b/tests/unit/work/_fake_connection.py @@ -30,6 +30,7 @@ class FakeConnection(mock.NonCallableMagicMock): callbacks = [] server_info = ServerInfo("127.0.0.1", (4, 3)) + local_port = 1234 def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs)