[Zope-Checkins] CVS: Zope/lib/python/MethodObject - _MethodObject.c:1.2 __init__.py:1.2 setup.py:1.2 tests.py:1.2

Jim Fulton cvs-admin at zope.org
Fri Nov 28 11:45:06 EST 2003


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

Added Files:
	_MethodObject.c __init__.py setup.py tests.py 
Log Message:
Reimplemented method objects to use new-style extension classes.


=== Zope/lib/python/MethodObject/_MethodObject.c 1.1 => 1.2 ===
--- /dev/null	Fri Nov 28 11:45:06 2003
+++ Zope/lib/python/MethodObject/_MethodObject.c	Fri Nov 28 11:45:06 2003
@@ -0,0 +1,58 @@
+/*****************************************************************************
+
+  Copyright (c) 1996-2002 Zope Corporation and Contributors.
+  All Rights Reserved.
+
+  This software is subject to the provisions of the Zope Public License,
+  Version 2.0 (ZPL).  A copy of the ZPL should accompany this distribution.
+  THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+  WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+  WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+  FOR A PARTICULAR PURPOSE
+
+ ****************************************************************************/
+
+#include "ExtensionClass.h"
+
+static PyObject *
+of(PyObject *self, PyObject *args)
+{
+  PyObject *inst;
+
+  if(PyArg_Parse(args,"O",&inst)) return PyECMethod_New(self,inst);
+  else return NULL;
+}
+
+struct PyMethodDef Method_methods[] = {
+  {"__of__",(PyCFunction)of,0,""},  
+  {NULL,		NULL}		/* sentinel */
+};
+
+static struct PyMethodDef methods[] = {{NULL,	NULL}};
+
+void
+init_MethodObject(void)
+{
+  PyObject *m, *d;
+  PURE_MIXIN_CLASS(Method,
+	"Base class for objects that want to be treated as methods\n"
+	"\n"
+	"The method class provides a method, __of__, that\n"
+	"binds an object to an instance.  If a method is a subobject\n"
+	"of an extension-class instance, the the method will be bound\n"
+	"to the instance and when the resulting object is called, it\n"
+	"will call the method and pass the instance in addition to\n"
+	"other arguments.  It is the responsibility of Method objects\n"
+	"to implement (or inherit) a __call__ method.\n",
+	Method_methods);
+
+  /* Create the module and add the functions */
+  m = Py_InitModule4("_MethodObject", methods,
+		     "Method-object mix-in class module\n\n"
+		     "$Id$\n",
+		     (PyObject*)NULL,PYTHON_API_VERSION);
+
+  d = PyModule_GetDict(m);
+  PyExtensionClass_Export(d,"Method",MethodType);
+}
+


=== Zope/lib/python/MethodObject/__init__.py 1.1 => 1.2 ===
--- /dev/null	Fri Nov 28 11:45:06 2003
+++ Zope/lib/python/MethodObject/__init__.py	Fri Nov 28 11:45:06 2003
@@ -0,0 +1 @@
+from _MethodObject import *


=== Zope/lib/python/MethodObject/setup.py 1.1 => 1.2 ===
--- /dev/null	Fri Nov 28 11:45:06 2003
+++ Zope/lib/python/MethodObject/setup.py	Fri Nov 28 11:45:06 2003
@@ -0,0 +1,22 @@
+##############################################################################
+#
+# Copyright (c) 2003 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.0 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+
+from distutils.core import setup, Extension
+setup(name="_MethodObject", version="2.0",
+      ext_modules=[
+         Extension("_MethodObject", ["_MethodObject.c"],
+                   include_dirs = ['.', '../ExtensionClass'],
+                   depends = ['../ExtensionClass/ExtensionClass.h']),
+         ])
+


=== Zope/lib/python/MethodObject/tests.py 1.1 => 1.2 ===
--- /dev/null	Fri Nov 28 11:45:06 2003
+++ Zope/lib/python/MethodObject/tests.py	Fri Nov 28 11:45:06 2003
@@ -0,0 +1,47 @@
+##############################################################################
+#
+# Copyright (c) 2003 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.0 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""XXX short summary goes here.
+
+$Id$
+"""
+import unittest
+from doctest import DocTestSuite
+
+def test_xxx():
+    """
+    >>> from ExtensionClass import Base
+    >>> from MethodObject import Method
+
+    >>> class foo(Method):
+    ...     def __call__(self, ob, *args, **kw):
+    ...         print 'called', ob, args, kw
+
+    >>> class bar(Base):
+    ...     def __repr__(self):
+    ...         return "bar()"
+    ...     hi = foo()
+
+    >>> x = bar()
+    >>> hi = x.hi
+    >>> hi(1,2,3,name='spam')
+    called bar() (1, 2, 3) {'name': 'spam'}
+    
+    """
+
+def test_suite():
+    return unittest.TestSuite((
+        DocTestSuite(),
+        ))
+
+if __name__ == '__main__': unittest.main()




More information about the Zope-Checkins mailing list