Skip to content

Commit 791ea4a

Browse files
committed
use a context manager to automatically close the socket of UDPClient. Closes #193
1 parent f1e3e31 commit 791ea4a

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

pythonosc/test/test_udp_client.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,5 +48,21 @@ def test_send_message_calls_add_arg_multiple_times_with_list(self):
4848
self.assertEqual(self.builder.add_arg.call_count, 3)
4949

5050

51+
class TestUdpClientClose(unittest.TestCase):
52+
@mock.patch("socket.socket")
53+
def test_close(self, mock_socket_ctor):
54+
mock_socket = mock_socket_ctor.return_value
55+
client = udp_client.UDPClient("::1", 31337)
56+
client.close()
57+
self.assertTrue(mock_socket.close.called)
58+
59+
@mock.patch("socket.socket")
60+
def test_context_manager(self, mock_socket_ctor):
61+
mock_socket = mock_socket_ctor.return_value
62+
with udp_client.UDPClient("::1", 31337) as client:
63+
self.assertIsInstance(client, udp_client.UDPClient)
64+
self.assertTrue(mock_socket.close.called)
65+
66+
5167
if __name__ == "__main__":
5268
unittest.main()

pythonosc/udp_client.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,16 @@ def __init__(
5555
self._address = address
5656
self._port = port
5757

58+
def __enter__(self) -> "UDPClient":
59+
return self
60+
61+
def __exit__(self, exc_type, exc_val, exc_tb) -> None:
62+
self.close()
63+
64+
def close(self) -> None:
65+
"""Close the socket"""
66+
self._sock.close()
67+
5868
def send(self, content: Union[OscMessage, OscBundle]) -> None:
5969
"""Sends an :class:`OscMessage` or :class:`OscBundle` via UDP
6070

0 commit comments

Comments
 (0)