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 11c6de0..2fc3250 100644
--- a/Doc/Makefile.deps
+++ b/Doc/Makefile.deps
@@ -262,6 +262,7 @@
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 @@
% 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 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
similarity index 97%
rename from Lib/test/test_functional.py
rename to 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 @@
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 @@
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 90407d6..24eb835 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -4,10 +4,10 @@
(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 @@
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 @@
- Calling Tk_Init twice is refused if the first call failed as that
may deadlock.
+
Library
-------
@@ -142,6 +148,8 @@
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 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 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 @@
/* 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 @@
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 @@
# 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 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 @@
{"_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">
diff --git a/setup.py b/setup.py
index 0abafd9..9b2fac4 100644
--- a/setup.py
+++ b/setup.py
@@ -377,8 +377,8 @@
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)