Skip to content
Snippets Groups Projects
Commit 5b9cc7f7 authored by attwad's avatar attwad Committed by GitHub
Browse files

Merge pull request #37 from Nagasaki45/issue36

Better type inference using isinstance instead of builting type equality check in OscMessageBuilder.add_arg
parents 188a33f3 faf7946a
Branches
No related tags found
No related merge requests found
"""Build OSC messages for client applications.""" """Build OSC messages for client applications."""
try:
import builtins
except ImportError:
# for python 2.x
import __builtin__ as builtins
from pythonosc import osc_message from pythonosc import osc_message
from pythonosc.parsing import osc_types from pythonosc.parsing import osc_types
...@@ -65,19 +59,20 @@ class OscMessageBuilder(object): ...@@ -65,19 +59,20 @@ class OscMessageBuilder(object):
raise ValueError( raise ValueError(
'arg_type must be one of {}'.format(self._SUPPORTED_ARG_TYPES)) 'arg_type must be one of {}'.format(self._SUPPORTED_ARG_TYPES))
if not arg_type: if not arg_type:
builtin_type = type(arg_value) if isinstance(arg_value, str):
if builtin_type == builtins.str:
arg_type = self.ARG_TYPE_STRING arg_type = self.ARG_TYPE_STRING
elif builtin_type == builtins.bytes: elif isinstance(arg_value, bytes):
arg_type = self.ARG_TYPE_BLOB arg_type = self.ARG_TYPE_BLOB
elif builtin_type == builtins.int: elif isinstance(arg_value, int):
arg_type = self.ARG_TYPE_INT arg_type = self.ARG_TYPE_INT
elif builtin_type == builtins.float: elif isinstance(arg_value, float):
arg_type = self.ARG_TYPE_FLOAT arg_type = self.ARG_TYPE_FLOAT
elif builtin_type == builtins.bool and arg_value: elif arg_value == True:
arg_type = self.ARG_TYPE_TRUE arg_type = self.ARG_TYPE_TRUE
elif builtin_type == builtins.bool and not arg_value: elif arg_value == False:
arg_type = self.ARG_TYPE_FALSE arg_type = self.ARG_TYPE_FALSE
else:
raise ValueError('Infered arg_value type is not supported')
self._args.append((arg_type, arg_value)) self._args.append((arg_type, arg_value))
def build(self): def build(self):
......
...@@ -20,6 +20,10 @@ class TestOscMessageBuilder(unittest.TestCase): ...@@ -20,6 +20,10 @@ class TestOscMessageBuilder(unittest.TestCase):
builder = osc_message_builder.OscMessageBuilder("") builder = osc_message_builder.OscMessageBuilder("")
self.assertRaises(ValueError, builder.add_arg, "what?", 1) self.assertRaises(ValueError, builder.add_arg, "what?", 1)
def test_add_arg_invalid_infered_type(self):
builder = osc_message_builder.OscMessageBuilder('')
self.assertRaises(ValueError, builder.add_arg, {'name': 'John'})
def test_all_param_types(self): def test_all_param_types(self):
builder = osc_message_builder.OscMessageBuilder(address="/SYNC") builder = osc_message_builder.OscMessageBuilder(address="/SYNC")
builder.add_arg(4.0) builder.add_arg(4.0)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment