[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