From d7b1acf65604a6b7fdff047d9579ac4365e72ace Mon Sep 17 00:00:00 2001 From: Daniel Jones Date: Mon, 14 Nov 2022 22:42:30 +0000 Subject: [PATCH 1/4] Add support for arguments with Nil type --- pythonosc/osc_message.py | 2 ++ pythonosc/test/test_osc_message.py | 14 ++++++++------ pythonosc/test/test_osc_message_builder.py | 2 +- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/pythonosc/osc_message.py b/pythonosc/osc_message.py index 4918cb2..55b0a0e 100644 --- a/pythonosc/osc_message.py +++ b/pythonosc/osc_message.py @@ -61,6 +61,8 @@ def _parse_datagram(self) -> None: val = True elif param == "F": # False. val = False + elif param == "N": # Nil. + val = None elif param == "[": # Array start. array = [] # type: List[Any] param_stack[-1].append(array) diff --git a/pythonosc/test/test_osc_message.py b/pythonosc/test/test_osc_message.py index 9ac2607..2268fb6 100644 --- a/pythonosc/test/test_osc_message.py +++ b/pythonosc/test/test_osc_message.py @@ -34,7 +34,8 @@ b"/SYNC\x00\x00\x00" b"T" # True b"F" # False - b"[]th\x00\x00" # Empty array + b"N" # Nil + b"[]th\x00" # Empty array b"\x00\x00\x00\x00\x00\x00\x00\x00" b"\x00\x00\x00\xe8\xd4\xa5\x10\x00" # 1000000000000 ) @@ -100,13 +101,14 @@ def test_all_non_standard_params(self): msg = osc_message.OscMessage(_DGRAM_ALL_NON_STANDARD_TYPES_OF_PARAMS) self.assertEqual("/SYNC", msg.address) - self.assertEqual(5, len(msg.params)) + self.assertEqual(6, len(msg.params)) self.assertEqual(True, msg.params[0]) self.assertEqual(False, msg.params[1]) - self.assertEqual([], msg.params[2]) - self.assertEqual((datetime(1900, 1, 1, 0, 0, 0), 0), msg.params[3]) - self.assertEqual(1000000000000, msg.params[4]) - self.assertEqual(5, len(list(msg))) + self.assertEqual(None, msg.params[2]) + self.assertEqual([], msg.params[3]) + self.assertEqual((datetime(1900, 1, 1, 0, 0, 0), 0), msg.params[4]) + self.assertEqual(1000000000000, msg.params[5]) + self.assertEqual(6, len(list(msg))) def test_complex_array_params(self): msg = osc_message.OscMessage(_DGRAM_COMPLEX_ARRAY_PARAMS) diff --git a/pythonosc/test/test_osc_message_builder.py b/pythonosc/test/test_osc_message_builder.py index b2d7296..5208ad9 100644 --- a/pythonosc/test/test_osc_message_builder.py +++ b/pythonosc/test/test_osc_message_builder.py @@ -53,7 +53,7 @@ def test_all_param_types(self): msg = builder.build() self.assertEqual("/SEEK", msg.address) self.assertSequenceEqual( - [4.0, 2, 1099511627776, "value", True, False, b"\x01\x02\x03", [1, ["abc"]]] * 2 + + [4.0, 2, 1099511627776, "value", True, False, b"\x01\x02\x03", [1, ["abc"]], None] * 2 + [4278255360, (1, 145, 36, 125), 1e-9], msg.params) From b65cf64a9fd7d6c1b61eed45b669656dc287fcfa Mon Sep 17 00:00:00 2001 From: Daniel Jones Date: Tue, 15 Nov 2022 09:23:54 +0000 Subject: [PATCH 2/4] Fix mypy typing errors --- pythonosc/osc_message_builder.py | 7 ++----- pythonosc/osc_server.py | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/pythonosc/osc_message_builder.py b/pythonosc/osc_message_builder.py index b874a29..3864ef5 100644 --- a/pythonosc/osc_message_builder.py +++ b/pythonosc/osc_message_builder.py @@ -5,14 +5,11 @@ from typing import List, Tuple, Union, Any, Optional - ArgValue = Union[str, bytes, bool, int, float, osc_types.MidiPacket, list] - class BuildError(Exception): """Error raised when an incomplete message is trying to be built.""" - class OscMessageBuilder(object): """Builds arbitrary OscMessage instances.""" @@ -35,7 +32,7 @@ class OscMessageBuilder(object): ARG_TYPE_FLOAT, ARG_TYPE_DOUBLE, ARG_TYPE_INT, ARG_TYPE_INT64, ARG_TYPE_BLOB, ARG_TYPE_STRING, ARG_TYPE_RGBA, ARG_TYPE_MIDI, ARG_TYPE_TRUE, ARG_TYPE_FALSE, ARG_TYPE_NIL) - def __init__(self, address: str=None) -> None: + def __init__(self, address: Optional[str] = None) -> None: """Initialize a new builder for a message. Args: @@ -69,7 +66,7 @@ def _valid_type(self, arg_type: str) -> bool: return True return False - def add_arg(self, arg_value: ArgValue, arg_type: str=None) -> None: + def add_arg(self, arg_value: ArgValue, arg_type: Optional[str] = None) -> None: """Add a typed argument to this message. Args: diff --git a/pythonosc/osc_server.py b/pythonosc/osc_server.py index e8951ed..9af8890 100644 --- a/pythonosc/osc_server.py +++ b/pythonosc/osc_server.py @@ -57,7 +57,7 @@ def __init__(self, server_address: Tuple[str, int], dispatcher: Dispatcher, bind dispatcher: Dispatcher this server will use (optional) bind_and_activate: default=True defines if the server has to start on call of constructor """ - super().__init__(server_address, _UDPHandler, bind_and_activate) # type: ignore[call-arg] # https://github.com/python/typeshed/pull/8542 + super().__init__(server_address, _UDPHandler, bind_and_activate) self._dispatcher = dispatcher def verify_request(self, request: _RequestType, client_address: _AddressType) -> bool: From 11e1b9df31b3dd200c98d1400bf305825277d34d Mon Sep 17 00:00:00 2001 From: Daniel Jones Date: Tue, 15 Nov 2022 11:40:24 +0000 Subject: [PATCH 3/4] Restore typeshed bug fix --- pythonosc/osc_server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pythonosc/osc_server.py b/pythonosc/osc_server.py index 9af8890..11e9f45 100644 --- a/pythonosc/osc_server.py +++ b/pythonosc/osc_server.py @@ -49,7 +49,7 @@ def _is_valid_request(request: _RequestType) -> bool: class OSCUDPServer(socketserver.UDPServer): """Superclass for different flavors of OSC UDP servers""" - def __init__(self, server_address: Tuple[str, int], dispatcher: Dispatcher, bind_and_activate: bool = True) -> None: + def __init__(self, server_address: Tuple[str, int], dispatcher: Dispatcher, bind_and_activate: bool = True) -> None: # type: ignore[call-arg] # https://github.com/python/typeshed/pull/8542 """Initialize Args: From 092596c2a54bab8a3b963e8eb8c4059fc675a9b5 Mon Sep 17 00:00:00 2001 From: Daniel Jones Date: Thu, 17 Nov 2022 22:27:10 +0000 Subject: [PATCH 4/4] Remove type hint --- pythonosc/osc_server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pythonosc/osc_server.py b/pythonosc/osc_server.py index 11e9f45..9af8890 100644 --- a/pythonosc/osc_server.py +++ b/pythonosc/osc_server.py @@ -49,7 +49,7 @@ def _is_valid_request(request: _RequestType) -> bool: class OSCUDPServer(socketserver.UDPServer): """Superclass for different flavors of OSC UDP servers""" - def __init__(self, server_address: Tuple[str, int], dispatcher: Dispatcher, bind_and_activate: bool = True) -> None: # type: ignore[call-arg] # https://github.com/python/typeshed/pull/8542 + def __init__(self, server_address: Tuple[str, int], dispatcher: Dispatcher, bind_and_activate: bool = True) -> None: """Initialize Args: