[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