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

Jim Fulton cvs-admin at zope.org
Thu Oct 23 09:02:54 EDT 2003


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

Added Files:
      Tag: zodb33-devel-branch
	_MethodObject.c __init__.py setup.py tests.py 
Log Message:
Ported MethodObject to new-style extension class.
The only code change was to make this a package rather than
a pure extension module.


=== Added File Zope/lib/python/MethodObject/_MethodObject.c ===
/*****************************************************************************

  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: _MethodObject.c,v 1.1.2.1 2003/10/23 13:02:53 jim Exp $\n",
		     (PyObject*)NULL,PYTHON_API_VERSION);

  d = PyModule_GetDict(m);
  PyExtensionClass_Export(d,"Method",MethodType);
}



=== Added File Zope/lib/python/MethodObject/__init__.py ===
from _MethodObject import *


=== Added File Zope/lib/python/MethodObject/setup.py ===
##############################################################################
#
# 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']),
         ])



=== Added File Zope/lib/python/MethodObject/tests.py ===
##############################################################################
#
# 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: tests.py,v 1.1.2.1 2003/10/23 13:02:53 jim Exp $
"""
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