[Python-checkins] r53908 - sandbox/trunk/pep362/pep362.py sandbox/trunk/pep362/pep362_py3k_fodder.py sandbox/trunk/pep362/test_pep362.py
brett.cannon
python-checkins at python.org
Sun Feb 25 17:30:45 CET 2007
Author: brett.cannon
Date: Sun Feb 25 17:30:40 2007
New Revision: 53908
Modified:
sandbox/trunk/pep362/pep362.py
sandbox/trunk/pep362/pep362_py3k_fodder.py
sandbox/trunk/pep362/test_pep362.py
Log:
Add annotations for variable parameters.
Also add a worse-case Py3K test.
Modified: sandbox/trunk/pep362/pep362.py
==============================================================================
--- sandbox/trunk/pep362/pep362.py (original)
+++ sandbox/trunk/pep362/pep362.py Sun Feb 25 17:30:40 2007
@@ -90,6 +90,10 @@
# Variable parameters.
self.var_args = argspec[1] if (argspec[1] is not None) else ''
self.var_kw_args = argspec[2] if (argspec[2] is not None) else ''
+ self.var_annotations = {}
+ for var_arg in (self.var_args, self.var_kw_args):
+ if var_arg in func.func_annotations:
+ self.var_annotations[var_arg] = func.func_annotations[var_arg]
# Non-keyword-only arguments.
arg_count = len(argspec[0])
Modified: sandbox/trunk/pep362/pep362_py3k_fodder.py
==============================================================================
--- sandbox/trunk/pep362/pep362_py3k_fodder.py (original)
+++ sandbox/trunk/pep362/pep362_py3k_fodder.py Sun Feb 25 17:30:40 2007
@@ -10,8 +10,14 @@
def arg_annotation_default(a:int=42):
pass
+def arg_annotation_var(*args:int, **kwargs:int):
+ pass
+
def arg_annotation_keyword_only(*, a:int):
pass
def return_annotation() -> int:
pass
+
+def all_args(a:int, (b, (c,)), *args:int, d, e, **kwargs) -> int:
+ pass
Modified: sandbox/trunk/pep362/test_pep362.py
==============================================================================
--- sandbox/trunk/pep362/test_pep362.py (original)
+++ sandbox/trunk/pep362/test_pep362.py Sun Feb 25 17:30:40 2007
@@ -189,10 +189,18 @@
@py3k_test
def test_return_annotation(self):
+ # The return value annotation.
sig = pep362.Signature(pep362_py3k_fodder.return_annotation)
self.failUnless(sig.has_annotation)
self.failUnlessEqual(sig.annotation, int)
+ @py3k_test
+ def test_var_annotations(self):
+ # Annotation on variable arguments (*args & **kwargs).
+ sig = pep362.Signature(pep362_py3k_fodder.arg_annotation_var)
+ self.failUnlessEqual(sig.var_annotations[sig.var_args], int)
+ self.failUnlessEqual(sig.var_annotations[sig.var_kw_args], int)
+
def test_signature(self):
def fresh_func():
pass
@@ -302,13 +310,6 @@
sig = pep362.Signature(pep362_fodder.no_default_args)
self.failUnlessRaises(pep362.BindError, sig.bind, 1, a=1)
- def XXX_test_do_not_consume_iterators(self):
- def gen():
- yield 0
- yield (1,)
- sig = pep362.Signature(pep362_fodder.tuple_args)
- self.failUnlessRaises(pep362.BindError, sig.bind, gen())
-
def test_main():
test_support.run_unittest(ParameterObjectTests,
More information about the Python-checkins
mailing list