diff options
author | Nick Coghlan <ncoghlan@gmail.com> | 2006-05-29 12:43:05 (GMT) |
---|---|---|
committer | Nick Coghlan <ncoghlan@gmail.com> | 2006-05-29 12:43:05 (GMT) |
commit | c649ec5b69bd864914e02a2a9ec73c23bd307448 (patch) | |
tree | 795bb943ec4b6a13501e55aaa6a8efe9b86d0305 | |
parent | c7c51147c73984137410ec03026b77e4a76ab61e (diff) | |
download | cpython-c649ec5b69bd864914e02a2a9ec73c23bd307448.zip cpython-c649ec5b69bd864914e02a2a9ec73c23bd307448.tar.gz cpython-c649ec5b69bd864914e02a2a9ec73c23bd307448.tar.bz2 |
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.
-rw-r--r-- | Doc/Makefile.deps | 1 | ||||
-rw-r--r-- | Doc/lib/lib.tex | 4 | ||||
-rw-r--r-- | Doc/lib/libfunctools.tex (renamed from Doc/lib/libfunctional.tex) | 8 | ||||
-rw-r--r-- | Lib/test/test_functools.py (renamed from Lib/test/test_functional.py) | 6 | ||||
-rw-r--r-- | Misc/NEWS | 12 | ||||
-rw-r--r-- | Modules/_functoolsmodule.c (renamed from Modules/functionalmodule.c) | 12 | ||||
-rw-r--r-- | PC/VC6/pythoncore.dsp | 2 | ||||
-rw-r--r-- | PC/config.c | 4 | ||||
-rw-r--r-- | PCbuild/pythoncore.vcproj | 5 | ||||
-rw-r--r-- | setup.py | 4 |
10 files changed, 32 insertions, 26 deletions
diff --git a/Doc/Makefile.deps b/Doc/Makefile.deps index 11c6de0..2fc3250 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 cf657c3..0691179 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 index 9218454..a25a23a 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 index 5078a2e..609e8f4 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): @@ -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 index 38ef43a..54abb89 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 <perky@FreeBSD.org> with adaptations by Raymond Hettinger <python@rcn.com> - 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 cf3200c..ec2ec3e 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 be11d3f..b832d7c 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 c37e9b9..bb9f7af 100644 --- a/PCbuild/pythoncore.vcproj +++ b/PCbuild/pythoncore.vcproj @@ -515,10 +515,7 @@ RelativePath="..\Objects\funcobject.c"> </File> <File - RelativePath="..\Modules\functionalmodule.c"> - </File> - <File - RelativePath="..\Modules\functionalmodule.c"> + RelativePath="..\Modules\_functoolsmodule.c"> </File> <File RelativePath="..\Python\future.c"> @@ -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) |