types: fixing type casts.

This commit is contained in:
Romain Dorgueil
2018-07-28 12:33:37 +01:00
parent 4e2cb29fc2
commit 99cb02364a
2 changed files with 24 additions and 7 deletions

View File

@ -257,12 +257,11 @@ class NodeExecutionContext(BaseContext, WithStatistics):
:param mixed value: message :param mixed value: message
""" """
for message in messages: for message in messages:
if isinstance(message, Token): if not isinstance(message, Token):
self.input.put(message) message = ensure_tuple(message, cls=self._input_type, length=self._input_length)
elif self._input_type: if self._input_length is None:
self.input.put(ensure_tuple(message, cls=self._input_type)) self._input_length = len(message)
else: self.input.put(message)
self.input.put(ensure_tuple(message))
def write_sync(self, *messages): def write_sync(self, *messages):
self.write(BEGIN, *messages, END) self.write(BEGIN, *messages, END)

View File

@ -7,7 +7,23 @@ class sortedlist(list):
bisect.insort(self, x) bisect.insort(self, x)
def ensure_tuple(tuple_or_mixed, *, cls=tuple): def _with_length_check(f):
@functools.wraps(f)
def _wrapped(*args, length=None, **kwargs):
nonlocal f
result = f(*args, **kwargs)
if length is not None:
if length != len(result):
raise TypeError(
'Length check failed, expected {} fields but got {}: {!r}.'.format(length, len(result), result)
)
return result
return _wrapped
@_with_length_check
def ensure_tuple(tuple_or_mixed, *, cls=None):
""" """
If it's not a tuple, let's make a tuple of one item. If it's not a tuple, let's make a tuple of one item.
Otherwise, not changed. Otherwise, not changed.
@ -16,6 +32,8 @@ def ensure_tuple(tuple_or_mixed, *, cls=tuple):
:return: tuple :return: tuple
""" """
if cls is None:
cls = tuple
if isinstance(tuple_or_mixed, cls): if isinstance(tuple_or_mixed, cls):
return tuple_or_mixed return tuple_or_mixed