[Python-checkins] r59026 - in sandbox/trunk/pep362: pep362.py tests/test_pep362.py

brett.cannon python-checkins at python.org
Sat Nov 17 04:26:42 CET 2007


Author: brett.cannon
Date: Sat Nov 17 04:26:42 2007
New Revision: 59026

Modified:
   sandbox/trunk/pep362/pep362.py
   sandbox/trunk/pep362/tests/test_pep362.py
Log:
Remove has_* methods.  Also rename Signature.annotation to return_annotation.


Modified: sandbox/trunk/pep362/pep362.py
==============================================================================
--- sandbox/trunk/pep362/pep362.py	(original)
+++ sandbox/trunk/pep362/pep362.py	Sat Nov 17 04:26:42 2007
@@ -19,12 +19,12 @@
         variable position argument.
     * keyword_only
         True if the parameter is keyword-only.
-    * has_annotation
-        True if the parameter has an annotation.  If it does, the 'annotation'
-        attribute will store the annotation.
-    * has_default
-        True if the parameter has a default value.  If it does, the
-        'default_value' attribute will store the default value.
+    
+    And the following optoinal attributes:
+    * default_value
+        The default value for the parameter, if one exists.
+    * annotation
+        The annoation for the parameter, if one exists.
 
     """
 
@@ -38,16 +38,10 @@
         """
         self.name = name
         self.position = position
-        if not has_default:
-            self.has_default = False
-        else:
-            self.has_default = True
+        if has_default:
             self.default_value = default_value
         self.keyword_only = keyword_only
-        if not has_annotation:
-            self.has_annotation = False
-        else:
-            self.has_annotation = True
+        if has_annotation:
             self.annotation = annotation
 
 
@@ -69,6 +63,12 @@
         annotation for the parameter.  If an annotation does not exist for a
         parameter, the key does not exist.
 
+    Optional attributes:
+    * return_annotation
+        The annotation for the return value.
+
+
+
     """
 
     def __init__(self, func):
@@ -171,11 +171,9 @@
         self.parameters = tuple(parameters)
 
         # Return annotation.
-        self.has_annotation = False
         if hasattr(func, '__annotations__'):
             if 'return' in func.__annotations__:
-                self.has_annotation = True
-                self.annotation = func.__annotations__['return']
+                self.return_annotation = func.__annotations__['return']
 
     def _find_annotation(self, func, name):
         """Return True if an annotation exists for the named parameter along
@@ -242,7 +240,7 @@
                     except KeyError:
                         raise BindError("%r unbound" % param_name)
                 else:
-                    if positional_param.has_default:
+                    if hasattr(positional_param, 'default_value'):
                         self._tuple_bind(bindings, param_name,
                                             positional_param.default_value)
                     else:
@@ -271,7 +269,7 @@
         # Keyword-only default values.
         else:
             for name, param in keyword_only.items():
-                if param.has_default:
+                if hasattr(param, 'default_value'):
                     bindings[name] = param.default_value
                 else:
                     raise BindError("%s parameter lacking a default value" %

Modified: sandbox/trunk/pep362/tests/test_pep362.py
==============================================================================
--- sandbox/trunk/pep362/tests/test_pep362.py	(original)
+++ sandbox/trunk/pep362/tests/test_pep362.py	Sat Nov 17 04:26:42 2007
@@ -40,15 +40,12 @@
         self.failUnlessEqual(param.position, pos)
 
     def test_default_values(self):
-        # Test the 'has_default' attribute.
         # Testing that 'default_value' is not set is handled in the testing of
         # that attribute.
         default_value = 42
         param = pep362.Parameter('_', 0, True, default_value)
-        self.failUnlessEqual(param.has_default, True)
         self.failUnlessEqual(param.default_value, default_value)
         param = pep362.Parameter('_', 0, False)
-        self.failUnlessEqual(param.has_default, False)
         self.failUnless(not hasattr(param, 'default_value'))
 
     def test_keyword_only(self):
@@ -60,12 +57,10 @@
     def test_annotations(self):
         # If has_annotation is False then 'annotation' should not exist.
         param = pep362.Parameter('_', 0, has_annotation=False)
-        self.failUnlessEqual(param.has_annotation, False)
         self.failUnless(not hasattr(param, 'annotation'))
         annotation = 42
         param = pep362.Parameter('_', 0, has_annotation=True,
                                     annotation=annotation)
-        self.failUnlessEqual(param.has_annotation, True)
         self.failUnlessEqual(param.annotation, annotation)
 
 
@@ -103,7 +98,6 @@
         param = sig.parameters[0]
         self.failUnlessEqual('a', param.name)
         self.failUnlessEqual(0, param.position)
-        self.failUnless(not param.has_default)
         self.failUnless(not hasattr(param, 'default_value'))
 
     def test_parameter_default(self):
@@ -113,7 +107,6 @@
         param = sig.parameters[0]
         self.failUnlessEqual('a', param.name)
         self.failUnlessEqual(0, param.position)
-        self.failUnless(param.has_default)
         self.failUnlessEqual(42, param.default_value)
 
     @version_specific(2)
@@ -125,7 +118,6 @@
         self.failUnless(isinstance(param.name, tuple))
         self.failUnlessEqual(('a', ('b',)), param.name)
         self.failUnlessEqual(0, param.position)
-        self.failUnless(not param.has_default)
         self.failUnless(not hasattr(param, 'default_value'))
 
     @version_specific(2)
@@ -136,7 +128,6 @@
         param = sig.parameters[0]
         self.failUnlessEqual(('a', ('b',)), param.name)
         self.failUnlessEqual(0, param.position)
-        self.failUnless(param.has_default)
         self.failUnlessEqual((1, (2,)), param.default_value)
 
     @version_specific(3)
@@ -156,7 +147,6 @@
         self.failUnlessEqual(param.name, 'a')
         self.failUnless(param.keyword_only)
         self.failUnlessEqual(param.position, 0)
-        self.failUnless(param.has_default)
         self.failUnlessEqual(param.default_value, 42)
 
     @version_specific(3)
@@ -165,7 +155,6 @@
         sig = pep362.Signature(pep362_py3k_fodder.arg_annotation)
         param = sig.parameters[0]
         self.failUnlessEqual(param.name, 'a')
-        self.failUnless(param.has_annotation)
         self.failUnlessEqual(param.annotation, int)
 
     @version_specific(3)
@@ -174,9 +163,7 @@
         sig = pep362.Signature(pep362_py3k_fodder.arg_annotation_default)
         param = sig.parameters[0]
         self.failUnlessEqual(param.name, 'a')
-        self.failUnless(param.has_annotation)
         self.failUnlessEqual(param.annotation, int)
-        self.failUnless(param.has_default)
         self.failUnlessEqual(param.default_value, 42)
 
     @version_specific(3)
@@ -185,7 +172,6 @@
         sig = pep362.Signature(pep362_py3k_fodder.arg_annotation_keyword_only)
         param = sig.parameters[0]
         self.failUnlessEqual(param.name, 'a')
-        self.failUnless(param.has_annotation)
         self.failUnlessEqual(param.annotation, int)
         self.failUnless(param.keyword_only)
 
@@ -193,8 +179,7 @@
     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)
+        self.failUnlessEqual(sig.return_annotation, int)
 
     @version_specific(3)
     def test_var_annotations(self):
@@ -300,13 +285,10 @@
             self.failUnlessEqual(param.name, name)
             self.failUnlessEqual(param.position, pos)
             if has_default:
-                self.failUnless(param.has_default)
                 self.failUnlessEqual(param.default_value, default_value)
             else:
-                self.failUnless(not param.has_default)
                 self.failUnless(not hasattr(param, 'default_value'))
             self.failUnless(not param.keyword_only)
-            self.failUnless(not param.has_annotation)
             self.failUnless(not hasattr(param, 'annotation'))
         self.failUnlessEqual(sig.var_args, 'g')
         self.failUnlessEqual(sig.var_kw_args, 'h')
@@ -335,7 +317,7 @@
 
     @version_specific(3)
     def test_all_py3k_args(self):
-        # a, (b, (c,)), d=0, (e, (f,))=(0, (0,)), *args, g, h=8, **kwargs
+        # a:int, d=0, *args:int, g:int, h:int=8, **kwargs:int) -> int
         sig = pep362.Signature(pep362_py3k_fodder.all_args)
         # name, position, kw only, has_default, default, has anno, anno
         expected = (('a', 0, False, False, None, True, int),
@@ -355,16 +337,12 @@
             else:
                 self.failUnless(not param.keyword_only)
             if has_default:
-                self.failUnless(param.has_default)
                 self.failUnlessEqual(param.default_value, default)
             else:
-                self.failUnless(not param.has_default)
                 self.failUnless(not hasattr(param, 'default_value'))
             if has_anno:
-                self.failUnless(param.has_annotation)
                 self.failUnlessEqual(param.annotation, anno)
             else:
-                self.failUnless(not param.has_annotation)
                 self.failUnless(not hasattr(param, 'annotation'))
         self.failUnlessEqual(sig.var_args, 'args')
         self.failUnless(sig.var_args in sig.var_annotations)
@@ -372,6 +350,7 @@
         self.failUnlessEqual(sig.var_kw_args, 'kwargs')
         self.failUnless(sig.var_kw_args in sig.var_annotations)
         self.failUnlessEqual(sig.var_annotations[sig.var_kw_args], int)
+        self.failUnlessEqual(sig.return_annotation, int)
         binding = sig.bind(0, 3, 6, g=7, i=9)
         expected = {'a':0, 'd':3, 'g':7, 'h':8, 'args':(6,), 'kwargs':{'i':9}}
         self.failUnlessEqual(binding, expected)


More information about the Python-checkins mailing list