From: Nick Coghlan Date: Mon, 29 May 2006 12:43:05 +0000 (+0000) Subject: Apply modified version of Collin Winter's patch #1478788 X-Git-Tag: v2.5b1~367 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c649ec5b69bd864914e02a2a9ec73c23bd307448;p=python Apply modified version of Collin Winter's patch #1478788 Renames functional extension module to _functools and adds a Python functools module so that utility functions like update_wrapper can be added easily. --- diff --git a/Doc/Makefile.deps b/Doc/Makefile.deps index 11c6de0414..2fc3250ce4 100644 --- a/Doc/Makefile.deps +++ b/Doc/Makefile.deps @@ -262,6 +262,7 @@ LIBFILES= $(MANSTYLES) $(INDEXSTYLES) $(COMMONTEX) \ lib/libsimplexmlrpc.tex \ lib/libdocxmlrpc.tex \ lib/libpyexpat.tex \ + lib/libfunctools.tex \ lib/xmldom.tex \ lib/xmldomminidom.tex \ lib/xmldompulldom.tex \ diff --git a/Doc/lib/lib.tex b/Doc/lib/lib.tex index cf657c3d1b..0691179acb 100644 --- a/Doc/lib/lib.tex +++ b/Doc/lib/lib.tex @@ -129,8 +129,8 @@ and how to embed it in other applications. % Functions, Functional, Generators and Iterators % XXX intro functional \input{libitertools} -\input{libfunctional} -\input{liboperator} % from runtime - better with itertools and functional +\input{libfunctools} +\input{liboperator} % from runtime - better with itertools and functools % ============= diff --git a/Doc/lib/libfunctional.tex b/Doc/lib/libfunctools.tex similarity index 92% rename from Doc/lib/libfunctional.tex rename to Doc/lib/libfunctools.tex index 9218454fe3..a25a23a4b8 100644 --- a/Doc/lib/libfunctional.tex +++ b/Doc/lib/libfunctools.tex @@ -1,7 +1,7 @@ -\section{\module{functional} --- +\section{\module{functools} --- Higher order functions and operations on callable objects.} -\declaremodule{standard}{functional} % standard library, in Python +\declaremodule{standard}{functools} % standard library, in Python \moduleauthor{Peter Harris}{scav@blueyonder.co.uk} \moduleauthor{Raymond Hettinger}{python@rcn.com} @@ -11,12 +11,12 @@ \versionadded{2.5} -The \module{functional} module is for higher-order functions: functions +The \module{functools} module is for higher-order functions: functions that act on or return other functions. In general, any callable object can be treated as a function for the purposes of this module. -The \module{functional} module defines the following function: +The \module{functools} module defines the following function: \begin{funcdesc}{partial}{func\optional{,*args}\optional{, **keywords}} Return a new \class{partial} object which when called will behave like diff --git a/Lib/test/test_functional.py b/Lib/test/test_functools.py similarity index 98% rename from Lib/test/test_functional.py rename to Lib/test/test_functools.py index 5078a2e94f..609e8f463d 100644 --- a/Lib/test/test_functional.py +++ b/Lib/test/test_functools.py @@ -1,4 +1,4 @@ -import functional +import functools import unittest from test import test_support from weakref import proxy @@ -21,7 +21,7 @@ def capture(*args, **kw): class TestPartial(unittest.TestCase): - thetype = functional.partial + thetype = functools.partial def test_basic_examples(self): p = self.thetype(capture, 1, 2, a=10, b=20) @@ -140,7 +140,7 @@ class TestPartial(unittest.TestCase): join = self.thetype(''.join) self.assertEqual(join(data), '0123456789') -class PartialSubclass(functional.partial): +class PartialSubclass(functools.partial): pass class TestPartialSubclass(TestPartial): diff --git a/Misc/NEWS b/Misc/NEWS index 90407d6386..24eb83571e 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -4,10 +4,10 @@ Python News (editors: check NEWS.help for information about editing NEWS using ReST.) -What's New in Python 2.5 alpha 3? +What's New in Python 2.5 beta 1? ================================= -*Release date: XX-MAY-2006* +*Release date: XX-JUN-2006* Core and builtins ----------------- @@ -62,6 +62,11 @@ Core and builtins Extension Modules ----------------- +- Patch #1478788 (modified version): The functional extension module has + been renamed to _functools and a functools Python wrapper module added. + This provides a home for additional function related utilities that are + not specifically about functional programming. See PEP 309. + - Patch #1493701: performance enhancements for struct module. - Patch #1490224: time.altzone is now set correctly on Cygwin. @@ -82,6 +87,7 @@ Extension Modules - Calling Tk_Init twice is refused if the first call failed as that may deadlock. + Library ------- @@ -142,6 +148,8 @@ Tools Documentation ------------- + + What's New in Python 2.5 alpha 2? ================================= diff --git a/Modules/functionalmodule.c b/Modules/_functoolsmodule.c similarity index 95% rename from Modules/functionalmodule.c rename to Modules/_functoolsmodule.c index 38ef43a719..54abb89d81 100644 --- a/Modules/functionalmodule.c +++ b/Modules/_functoolsmodule.c @@ -2,10 +2,10 @@ #include "Python.h" #include "structmember.h" -/* Functional module written and maintained +/* _functools module written and maintained by Hye-Shik Chang with adaptations by Raymond Hettinger - Copyright (c) 2004, 2005 Python Software Foundation. + Copyright (c) 2004, 2005, 2006 Python Software Foundation. All rights reserved. */ @@ -199,7 +199,7 @@ static PyGetSetDef partial_getsetlist[] = { static PyTypeObject partial_type = { PyObject_HEAD_INIT(NULL) 0, /* ob_size */ - "functional.partial", /* tp_name */ + "functools.partial", /* tp_name */ sizeof(partialobject), /* tp_basicsize */ 0, /* tp_itemsize */ /* methods */ @@ -245,14 +245,14 @@ static PyTypeObject partial_type = { /* module level code ********************************************************/ PyDoc_STRVAR(module_doc, -"Tools for functional programming."); +"Tools that operate on functions."); static PyMethodDef module_methods[] = { {NULL, NULL} /* sentinel */ }; PyMODINIT_FUNC -initfunctional(void) +init_functools(void) { int i; PyObject *m; @@ -262,7 +262,7 @@ initfunctional(void) NULL }; - m = Py_InitModule3("functional", module_methods, module_doc); + m = Py_InitModule3("_functools", module_methods, module_doc); if (m == NULL) return; diff --git a/PC/VC6/pythoncore.dsp b/PC/VC6/pythoncore.dsp index cf3200c9ce..ec2ec3ea1d 100644 --- a/PC/VC6/pythoncore.dsp +++ b/PC/VC6/pythoncore.dsp @@ -313,7 +313,7 @@ SOURCE=..\..\Objects\funcobject.c # End Source File # Begin Source File -SOURCE=..\..\Modules\functionalmodule.c +SOURCE=..\..\Modules\_functoolsmodule.c # End Source File # Begin Source File diff --git a/PC/config.c b/PC/config.c index be11d3f8dc..b832d7c64f 100644 --- a/PC/config.c +++ b/PC/config.c @@ -54,7 +54,7 @@ extern void initparser(void); extern void init_winreg(void); extern void init_struct(void); extern void initdatetime(void); -extern void initfunctional(void); +extern void init_functools(void); extern void initzlib(void); extern void init_multibytecodec(void); @@ -132,7 +132,7 @@ struct _inittab _PyImport_Inittab[] = { {"_winreg", init_winreg}, {"_struct", init_struct}, {"datetime", initdatetime}, - {"functional", initfunctional}, + {"_functools", init_functools}, {"xxsubtype", initxxsubtype}, {"zipimport", initzipimport}, diff --git a/PCbuild/pythoncore.vcproj b/PCbuild/pythoncore.vcproj index c37e9b933d..bb9f7af1b7 100644 --- a/PCbuild/pythoncore.vcproj +++ b/PCbuild/pythoncore.vcproj @@ -515,10 +515,7 @@ RelativePath="..\Objects\funcobject.c"> - - + RelativePath="..\Modules\_functoolsmodule.c"> diff --git a/setup.py b/setup.py index 0abafd94d4..9b2fac4b61 100644 --- a/setup.py +++ b/setup.py @@ -377,8 +377,8 @@ class PyBuildExt(build_ext): exts.append( Extension("_heapq", ["_heapqmodule.c"]) ) # operator.add() and similar goodies exts.append( Extension('operator', ['operator.c']) ) - # functional - exts.append( Extension("functional", ["functionalmodule.c"]) ) + # _functools + exts.append( Extension("_functools", ["_functoolsmodule.c"]) ) # Python C API test module exts.append( Extension('_testcapi', ['_testcapimodule.c']) ) # profilers (_lsprof is for cProfile.py)