Skip to content
Snippets Groups Projects
Commit b30a8544 authored by Piotr Maślanka's avatar Piotr Maślanka
Browse files

.

parent e934c4e9
No related branches found
No related tags found
No related merge requests found
...@@ -322,7 +322,6 @@ def _do_if_not_type(var, type_, fun='default'): ...@@ -322,7 +322,6 @@ def _do_if_not_type(var, type_, fun='default'):
if not istype(var, type_): if not istype(var, type_):
if fun == 'default': if fun == 'default':
print(type_)
if type_[0] == type(None): if type_[0] == type(None):
return None return None
else: else:
...@@ -428,21 +427,20 @@ def coerce(*t_args, **t_kwargs): ...@@ -428,21 +427,20 @@ def coerce(*t_args, **t_kwargs):
return outer return outer
def checked_coerce(*t_args, **t_kwargs): def checked_coerce(*t_args, **t_kwargs):
"""#todo banana banana banana""" """#todo banana banana banana"""
def ptc(item): def ptc(item, pt=list):
if item is None: if item is None:
return None, None return None, None
elif isinstance(item, tuple): elif isinstance(item, pt):
if len(item) == 2: if len(item) == 2:
return item[0], item[1] return item[0], item[1]
return item, None return item, None
def sselector(q, z, operator=None): def sselector(q, z, operator=None, pt=list):
print(q, z) s = ptc(q, pt=pt)[z]
s = ptc(q)[z]
print(s, z)
if s is None and operator is None: if s is None and operator is None:
return None return None
return __typeinfo_to_tuple_of_types(s, operator=operator) return __typeinfo_to_tuple_of_types(s, operator=operator)
...@@ -455,10 +453,8 @@ def checked_coerce(*t_args, **t_kwargs): ...@@ -455,10 +453,8 @@ def checked_coerce(*t_args, **t_kwargs):
for argument, typedescr in six.moves.zip_longest(args, t_args_c)] for argument, typedescr in six.moves.zip_longest(args, t_args_c)]
t_retarg = t_kwargs.get('returns', None) t_retarg = t_kwargs.get('returns', None)
t_retarg_t = sselector(t_retarg, 0) t_retarg_t = sselector(t_retarg, 0, pt=tuple)
t_retarg_c = sselector(t_retarg, 1, operator=__NOP) t_retarg_c = sselector(t_retarg, 1, operator=__NOP, pt=tuple)
print('t_args_t=%s, t_args_c=%s, t_retarg_t=%s t_retarg_c=%s' % (t_args_t, t_args_c, t_retarg_t, t_retarg_c))
def outer(fun): def outer(fun):
@functools.wraps(fun) @functools.wraps(fun)
...@@ -471,11 +467,10 @@ def checked_coerce(*t_args, **t_kwargs): ...@@ -471,11 +467,10 @@ def checked_coerce(*t_args, **t_kwargs):
type(argument), typedescr)) type(argument), typedescr))
rt = fun(*argify(args), **kwargs) rt = fun(*argify(args), **kwargs)
print(t_retarg_t) if not istype(rt, t_retarg_t):
# if not istype(rt, t_retarg_t): raise TypeError('Returned %s, expected %s' % (
# raise TypeError('Returned %s, expected %s' % ( type(rt), t_retarg_t))
# type(rt), t_retarg_t))
#
return _do_if_not_type(rt, t_retarg_c) return _do_if_not_type(rt, t_retarg_c)
return inner return inner
return outer return outer
......
[metadata] [metadata]
name = satella name = satella
version = 2.0.19rc2 version = 2.0.19rc3
description-file = README.md description-file = README.md
author = Piotr Maślanka author = Piotr Maślanka
author_email = piotrm@smok.co author_email = piotrm@smok.co
......
...@@ -26,13 +26,23 @@ class TestTypecheck(unittest.TestCase): ...@@ -26,13 +26,23 @@ class TestTypecheck(unittest.TestCase):
self.assertRaises(TypeError, lambda: Lol().zomg('a')) self.assertRaises(TypeError, lambda: Lol().zomg('a'))
Lol().lel([], {}, (), set([1]), lambda a: None) Lol().lel([], {}, (), set([1]), lambda a: None)
def test_che_co2(self):
@checked_coerce((int, None))
def p(a):
return a
p(5)
p(None)
self.assertRaises(TypeError, lambda: p(5.0))
def test_checked_coerce(self): def test_checked_coerce(self):
@checked_coerce(((str, int), int), returns=(int, float)) @checked_coerce([(str, int), int], returns=(int, float))
def testa(a): def testa(a):
return a return a
self.assertRaises(TypeError, lambda: testa(5.0)) self.assertRaises(TypeError, lambda: testa(5.0))
self.assertEqual(testa('5'), 5.0) self.assertEqual(testa('5'), 5.0)
self.assertEqual(testa(5), 5.0) self.assertEqual(testa(5), 5.0)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment