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
"""
for message in messages:
if isinstance(message, Token):
self.input.put(message)
elif self._input_type:
self.input.put(ensure_tuple(message, cls=self._input_type))
else:
self.input.put(ensure_tuple(message))
if not isinstance(message, Token):
message = ensure_tuple(message, cls=self._input_type, length=self._input_length)
if self._input_length is None:
self._input_length = len(message)
self.input.put(message)
def write_sync(self, *messages):
self.write(BEGIN, *messages, END)

View File

@ -7,7 +7,23 @@ class sortedlist(list):
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.
Otherwise, not changed.
@ -16,6 +32,8 @@ def ensure_tuple(tuple_or_mixed, *, cls=tuple):
:return: tuple
"""
if cls is None:
cls = tuple
if isinstance(tuple_or_mixed, cls):
return tuple_or_mixed