[Zope-Checkins] CVS: Zope/lib/python/Interface - Method.py:1.7.138.1

Tres Seaver tseaver@zope.com
Tue, 12 Mar 2002 19:55:00 -0500


Update of /cvs-repository/Zope/lib/python/Interface
In directory cvs.zope.org:/tmp/cvs-serv6675/lib/python/Interface

Modified Files:
      Tag: Zope-2_5-branch
	Method.py 
Log Message:
 - Merge scarecrow fixes ('death to self') from branch.

=== Zope/lib/python/Interface/Method.py 1.7 => 1.7.138.1 ===
 class MethodClass:
 
-    def fromFunction(self, func, interface=''):
+    def fromFunction(self, func, interface='', strip_first=0):
         m=Method(func.__name__, func.__doc__)
         defaults=func.func_defaults or ()
         c=func.func_code
@@ -18,15 +18,17 @@
         names=c.co_varnames
         d={}
         nr=na-len(defaults)
-        if nr==0:
+
+        if strip_first and nr==0: # 'strip_first' implies method, has 'self'
             defaults=defaults[1:]
             nr=1
         
         for i in range(len(defaults)):
             d[names[i+nr]]=defaults[i]
 
-        m.positional=names[1:na]
-        m.required=names[1:nr]
+        start_index = strip_first and 1 or 0
+        m.positional=names[start_index:na]
+        m.required=names[start_index:nr]
         m.optional=d
 
         argno = na
@@ -45,7 +47,7 @@
 
     def fromMethod(self, meth, interface=''):
         func = meth.im_func
-        return self.fromFunction(func, interface)
+        return self.fromFunction(func, interface, strip_first=1)
 
 class Method(Attribute):
     """Method interfaces