Merged revisions 60124-60142 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r60131 | georg.brandl | 2008-01-20 12:13:29 +0100 (Sun, 20 Jan 2008) | 3 lines

  #1351692: in pprint, always call format() for dict and list items to enable
  custom formatting of contents via subclassing PrettyPrinter.
........
  r60133 | georg.brandl | 2008-01-20 12:43:03 +0100 (Sun, 20 Jan 2008) | 2 lines

  #1178141: add addinfourl.code to get http status code from urllib.
........
  r60134 | georg.brandl | 2008-01-20 13:05:43 +0100 (Sun, 20 Jan 2008) | 4 lines

  #856047: respect the ``no_proxy`` env var when checking for proxies
  in urllib and using the other ``_proxy`` env vars.
  Original patch by Donovan Baarda.
........
  r60135 | georg.brandl | 2008-01-20 13:18:17 +0100 (Sun, 20 Jan 2008) | 4 lines

  #1664522: in urllib, don't read non-existing directories in ftp mode,
  returning a 0-byte file -- raise an IOError instead.
  Original patch from Phil Knirsch.
........
  r60136 | georg.brandl | 2008-01-20 13:57:47 +0100 (Sun, 20 Jan 2008) | 2 lines

  #799369: document possible sys.platform values.
........
  r60137 | georg.brandl | 2008-01-20 14:08:37 +0100 (Sun, 20 Jan 2008) | 2 lines

  #652749: document the constants added to the builtins by site.py.
........
  r60138 | georg.brandl | 2008-01-20 14:59:46 +0100 (Sun, 20 Jan 2008) | 2 lines

  #1648: add sys.gettrace() and sys.getprofile().
........
  r60139 | georg.brandl | 2008-01-20 15:17:42 +0100 (Sun, 20 Jan 2008) | 2 lines

  #1669: don't allow shutil.rmtree() to be called on a symlink.
........
  r60140 | georg.brandl | 2008-01-20 15:20:02 +0100 (Sun, 20 Jan 2008) | 2 lines

  Fix test_pyclbr after urllib change.
........
  r60141 | christian.heimes | 2008-01-20 15:28:28 +0100 (Sun, 20 Jan 2008) | 1 line

  Fixed a wrong assumption in configure.in and Include/pyport.h. The is finite function is not called isfinite() but finite(). Sorry, my fault. :)
........
  r60142 | georg.brandl | 2008-01-20 15:31:27 +0100 (Sun, 20 Jan 2008) | 2 lines

  #1876: fix typos in test_operator.
........
This commit is contained in:
Christian Heimes 2008-01-20 15:14:11 +00:00
parent 78b11870a4
commit 9bd667ad03
20 changed files with 317 additions and 48 deletions

View File

@ -1,4 +1,3 @@
Built-in Constants Built-in Constants
================== ==================
@ -52,3 +51,28 @@ A small number of constants live in the built-in namespace. They are:
This constant is true if Python was not started with an :option:`-O` option. This constant is true if Python was not started with an :option:`-O` option.
Assignments to :const:`__debug__` are illegal and raise a :exc:`SyntaxError`. Assignments to :const:`__debug__` are illegal and raise a :exc:`SyntaxError`.
See also the :keyword:`assert` statement. See also the :keyword:`assert` statement.
Constants added by the :mod:`site` module
-----------------------------------------
The :mod:`site` module (which is imported automatically during startup, except
if the :option:`-S` command-line option is given) adds several constants to the
built-in namespace. They are useful for the interactive interpreter shell and
should not be used in programs.
.. data:: quit([code=None])
exit([code=None])
Objects that when printed, print a message like "Use quit() or Ctrl-D
(i.e. EOF) to exit", and when called, raise :exc:`SystemExit` with the
specified exit code, and when .
.. data:: copyright
license
credits
Objects that when printed, print a message like "Type license() to see the
full license text", and when called, display the corresponding text in a
pager-like fashion (one screen at a time).

View File

@ -526,6 +526,8 @@ available. They are listed here in alphabetical order.
topic, and a help page is printed on the console. If the argument is any other topic, and a help page is printed on the console. If the argument is any other
kind of object, a help page on the object is generated. kind of object, a help page on the object is generated.
This function is added to the built-in namespace by the :mod:`site` module.
.. function:: hex(x) .. function:: hex(x)

View File

@ -93,18 +93,24 @@ copying and removal. For operations on individual files, see also the
.. index:: single: directory; deleting .. index:: single: directory; deleting
Delete an entire directory tree (*path* must point to a directory). If Delete an entire directory tree; *path* must point to a directory (but not a
*ignore_errors* is true, errors resulting from failed removals will be ignored; symbolic link to a directory). If *ignore_errors* is true, errors resulting
if false or omitted, such errors are handled by calling a handler specified by from failed removals will be ignored; if false or omitted, such errors are
*onerror* or, if that is omitted, they raise an exception. handled by calling a handler specified by *onerror* or, if that is omitted,
they raise an exception.
If *onerror* is provided, it must be a callable that accepts three parameters: If *onerror* is provided, it must be a callable that accepts three
*function*, *path*, and *excinfo*. The first parameter, *function*, is the parameters: *function*, *path*, and *excinfo*. The first parameter,
function which raised the exception; it will be :func:`os.listdir`, *function*, is the function which raised the exception; it will be
:func:`os.remove` or :func:`os.rmdir`. The second parameter, *path*, will be :func:`os.path.islink`, :func:`os.listdir`, :func:`os.remove` or
the path name passed to *function*. The third parameter, *excinfo*, will be the :func:`os.rmdir`. The second parameter, *path*, will be the path name passed
exception information return by :func:`sys.exc_info`. Exceptions raised by to *function*. The third parameter, *excinfo*, will be the exception
*onerror* will not be caught. information return by :func:`sys.exc_info`. Exceptions raised by *onerror*
will not be caught.
.. versionchanged:: 2.6
Explicitly check for *path* being a symbolic link and raise :exc:`OSError`
in that case.
.. function:: move(src, dst) .. function:: move(src, dst)

View File

@ -326,6 +326,35 @@ always available.
This function should be used for internal and specialized purposes only. This function should be used for internal and specialized purposes only.
.. function:: getprofile()
.. index::
single: profile function
single: profiler
Get the profiler function as set by :func:`setprofile`.
.. versionadded:: 2.6
.. function:: gettrace()
.. index::
single: trace function
single: debugger
Get the trace function as set by :func:`settrace`.
.. note::
The :func:`gettrace` function is intended only for implementing debuggers,
profilers, coverage tools and the like. Its behavior is part of the
implementation platform, rather than part of the language definition,
and thus may not be available in all Python implementations.
.. versionadded:: 2.6
.. function:: getwindowsversion() .. function:: getwindowsversion()
Return a tuple containing five components, describing the Windows version Return a tuple containing five components, describing the Windows version
@ -444,9 +473,26 @@ always available.
.. data:: platform .. data:: platform
This string contains a platform identifier, e.g. ``'sunos5'`` or ``'linux1'``. This string contains a platform identifier that can be used to append
This can be used to append platform-specific components to ``path``, for platform-specific components to :data:`sys.path`, for instance.
instance.
For Unix systems, this is the lowercased OS name as returned by ``uname -s``
with the first part of the version as returned by ``uname -r`` appended,
e.g. ``'sunos5'`` or ``'linux2'``, *at the time when Python was built*.
For other systems, the values are:
================ ===========================
System :data:`platform` value
================ ===========================
Windows ``'win32'``
Windows/Cygwin ``'cygwin'``
MacOS X ``'darwin'``
MacOS 9 ``'mac'``
OS/2 ``'os2'``
OS/2 EMX ``'os2emx'``
RiscOS ``'riscos'``
AtheOS ``'atheos'``
================ ===========================
.. data:: prefix .. data:: prefix

View File

@ -27,16 +27,17 @@ High-level interface
a server somewhere on the network. If the connection cannot be made the a server somewhere on the network. If the connection cannot be made the
:exc:`IOError` exception is raised. If all went well, a file-like object is :exc:`IOError` exception is raised. If all went well, a file-like object is
returned. This supports the following methods: :meth:`read`, :meth:`readline`, returned. This supports the following methods: :meth:`read`, :meth:`readline`,
:meth:`readlines`, :meth:`fileno`, :meth:`close`, :meth:`info` and :meth:`readlines`, :meth:`fileno`, :meth:`close`, :meth:`info`, :meth:`getcode` and
:meth:`geturl`. It also has proper support for the :term:`iterator` protocol. One :meth:`geturl`. It also has proper support for the :term:`iterator` protocol. One
caveat: the :meth:`read` method, if the size argument is omitted or negative, caveat: the :meth:`read` method, if the size argument is omitted or negative,
may not read until the end of the data stream; there is no good way to determine may not read until the end of the data stream; there is no good way to determine
that the entire stream from a socket has been read in the general case. that the entire stream from a socket has been read in the general case.
Except for the :meth:`info` and :meth:`geturl` methods, these methods have the Except for the :meth:`info`, :meth:`getcode` and :meth:`geturl` methods,
same interface as for file objects --- see section :ref:`bltin-file-objects` in these methods have the same interface as for file objects --- see section
this manual. (It is not a built-in file object, however, so it can't be used at :ref:`bltin-file-objects` in this manual. (It is not a built-in file object,
those few places where a true built-in file object is required.) however, so it can't be used at those few places where a true built-in file
object is required.)
.. index:: module: mimetools .. index:: module: mimetools
@ -58,6 +59,9 @@ High-level interface
the client was redirected to. The :meth:`geturl` method can be used to get at the client was redirected to. The :meth:`geturl` method can be used to get at
this redirected URL. this redirected URL.
The :meth:`getcode` method returns the HTTP status code that was sent with the
response, or ``None`` if the URL is no HTTP URL.
If the *url* uses the :file:`http:` scheme identifier, the optional *data* If the *url* uses the :file:`http:` scheme identifier, the optional *data*
argument may be given to specify a ``POST`` request (normally the request type argument may be given to specify a ``POST`` request (normally the request type
is ``GET``). The *data* argument must be in standard is ``GET``). The *data* argument must be in standard
@ -75,6 +79,11 @@ High-level interface
% python % python
... ...
The :envvar:`no_proxy` environment variable can be used to specify hosts which
shouldn't be reached via proxy; if set, it should be a comma-separated list
of hostname suffixes, optionally with ``:port`` appended, for example
``cern.ch,ncsa.uiuc.edu,some.host:8080``.
In a Windows environment, if no proxy environment variables are set, proxy In a Windows environment, if no proxy environment variables are set, proxy
settings are obtained from the registry's Internet Settings section. settings are obtained from the registry's Internet Settings section.

View File

@ -388,8 +388,8 @@ extern "C" {
* macro for this particular test is useful * macro for this particular test is useful
*/ */
#ifndef Py_IS_FINITE #ifndef Py_IS_FINITE
#ifdef HAVE_ISFINITE #ifdef HAVE_FINITE
#define Py_IS_FINITE(X) isfinite #define Py_IS_FINITE(X) finite
#else #else
#define Py_IS_FINITE(X) (!Py_IS_INFINITY(X) && !Py_IS_NAN(X)) #define Py_IS_FINITE(X) (!Py_IS_INFINITY(X) && !Py_IS_NAN(X))
#endif #endif

View File

@ -156,6 +156,14 @@ def rmtree(path, ignore_errors=False, onerror=None):
elif onerror is None: elif onerror is None:
def onerror(*args): def onerror(*args):
raise raise
try:
if os.path.islink(path):
# symlinks to directories are forbidden, see bug #1669
raise OSError("Cannot call rmtree on a symbolic link")
except OSError:
onerror(os.path.islink, path, sys.exc_info())
# can't continue even if onerror hook returns
return
names = [] names = []
try: try:
names = os.listdir(path) names = os.listdir(path)

View File

@ -364,9 +364,9 @@ class OperatorTestCase(unittest.TestCase):
self.assertRaises(TypeError, operator.attrgetter('x', (), 'y'), record) self.assertRaises(TypeError, operator.attrgetter('x', (), 'y'), record)
class C(object): class C(object):
def __getattr(self, name): def __getattr__(self, name):
raise SyntaxError raise SyntaxError
self.failUnlessRaises(AttributeError, operator.attrgetter('foo'), C()) self.failUnlessRaises(SyntaxError, operator.attrgetter('foo'), C())
def test_itemgetter(self): def test_itemgetter(self):
a = 'ABCDE' a = 'ABCDE'
@ -376,9 +376,9 @@ class OperatorTestCase(unittest.TestCase):
self.assertRaises(IndexError, f, a) self.assertRaises(IndexError, f, a)
class C(object): class C(object):
def __getitem(self, name): def __getitem__(self, name):
raise SyntaxError raise SyntaxError
self.failUnlessRaises(TypeError, operator.itemgetter(42), C()) self.failUnlessRaises(SyntaxError, operator.itemgetter(42), C())
f = operator.itemgetter('name') f = operator.itemgetter('name')
self.assertRaises(TypeError, f, a) self.assertRaises(TypeError, f, a)

View File

@ -4,6 +4,22 @@ import unittest
from test import test_support from test import test_support
class TestGetProfile(unittest.TestCase):
def setUp(self):
sys.setprofile(None)
def tearDown(self):
sys.setprofile(None)
def test_empty(self):
assert sys.getprofile() == None
def test_setget(self):
def fn(*args):
pass
sys.setprofile(fn)
assert sys.getprofile() == fn
class HookWatcher: class HookWatcher:
def __init__(self): def __init__(self):
@ -359,6 +375,7 @@ def show_events(callable):
def test_main(): def test_main():
test_support.run_unittest( test_support.run_unittest(
TestGetProfile,
ProfileHookTestCase, ProfileHookTestCase,
ProfileSimulatorTestCase ProfileSimulatorTestCase
) )

View File

@ -158,6 +158,7 @@ class PyclbrTest(TestCase):
cm('cgi', ignore=('log',)) # set with = in module cm('cgi', ignore=('log',)) # set with = in module
cm('mhlib') cm('mhlib')
cm('urllib', ignore=('getproxies_registry', cm('urllib', ignore=('getproxies_registry',
'proxy_bypass_registry',
'open_https', 'open_https',
'_https_connection', '_https_connection',
'getproxies_internetconfig',)) # not on all platforms 'getproxies_internetconfig',)) # not on all platforms

View File

@ -149,6 +149,20 @@ class TestShutil(unittest.TestCase):
except OSError: except OSError:
pass pass
def test_rmtree_on_symlink(self):
# bug 1669.
os.mkdir(TESTFN)
try:
src = os.path.join(TESTFN, 'cheese')
dst = os.path.join(TESTFN, 'shop')
os.mkdir(src)
os.symlink(src, dst)
self.assertRaises(OSError, shutil.rmtree, dst)
finally:
shutil.rmtree(TESTFN, ignore_errors=True)
def test_main(): def test_main():
test_support.run_unittest(TestShutil) test_support.run_unittest(TestShutil)

View File

@ -268,6 +268,20 @@ class TraceTestCase(unittest.TestCase):
self.compare_events(func.__code__.co_firstlineno, self.compare_events(func.__code__.co_firstlineno,
tracer.events, func.events) tracer.events, func.events)
def set_and_retrieve_none(self):
sys.settrace(None)
assert sys.gettrace() is None
def set_and_retrieve_func(self):
def fn(*args):
pass
sys.settrace(fn)
try:
assert sys.gettrace() is fn
finally:
sys.settrace(None)
def test_01_basic(self): def test_01_basic(self):
self.run_test(basic) self.run_test(basic)
def test_02_arigo(self): def test_02_arigo(self):

View File

@ -47,7 +47,7 @@ class urlopen_FileTests(unittest.TestCase):
def test_interface(self): def test_interface(self):
# Make sure object returned by urlopen() has the specified methods # Make sure object returned by urlopen() has the specified methods
for attr in ("read", "readline", "readlines", "fileno", for attr in ("read", "readline", "readlines", "fileno",
"close", "info", "geturl", "__iter__"): "close", "info", "geturl", "getcode", "__iter__"):
self.assert_(hasattr(self.returned_obj, attr), self.assert_(hasattr(self.returned_obj, attr),
"object returned by urlopen() lacks %s attribute" % "object returned by urlopen() lacks %s attribute" %
attr) attr)
@ -87,6 +87,9 @@ class urlopen_FileTests(unittest.TestCase):
def test_geturl(self): def test_geturl(self):
self.assertEqual(self.returned_obj.geturl(), self.pathname) self.assertEqual(self.returned_obj.geturl(), self.pathname)
def test_getcode(self):
self.assertEqual(self.returned_obj.getcode(), None)
def test_iter(self): def test_iter(self):
# Test iterator # Test iterator
# Don't need to count number of iterations since test would fail the # Don't need to count number of iterations since test would fail the
@ -123,6 +126,8 @@ class urlopen_HttpTests(unittest.TestCase):
fp = urllib.urlopen("http://python.org/") fp = urllib.urlopen("http://python.org/")
self.assertEqual(fp.readline(), b"Hello!") self.assertEqual(fp.readline(), b"Hello!")
self.assertEqual(fp.readline(), b"") self.assertEqual(fp.readline(), b"")
self.assertEqual(fp.geturl(), 'http://python.org/')
self.assertEqual(fp.getcode(), 200)
finally: finally:
self.unfakehttp() self.unfakehttp()

View File

@ -83,6 +83,16 @@ class urlopenNetworkTests(unittest.TestCase):
open_url.close() open_url.close()
self.assertEqual(gotten_url, URL) self.assertEqual(gotten_url, URL)
def test_getcode(self):
# test getcode() with the fancy opener to get 404 error codes
URL = "http://www.python.org/XXXinvalidXXX"
open_url = urllib.FancyURLopener().open(URL)
try:
code = open_url.getcode()
finally:
open_url.close()
self.assertEqual(code, 404)
def test_fileno(self): def test_fileno(self):
if (sys.platform in ('win32',) or if (sys.platform in ('win32',) or
not hasattr(os, 'fdopen')): not hasattr(os, 'fdopen')):

View File

@ -557,7 +557,7 @@ class FancyURLopener(URLopener):
def http_error_default(self, url, fp, errcode, errmsg, headers): def http_error_default(self, url, fp, errcode, errmsg, headers):
"""Default error handling -- don't raise an exception.""" """Default error handling -- don't raise an exception."""
return addinfourl(fp, headers, "http:" + url) return addinfourl(fp, headers, "http:" + url, errcode)
def http_error_302(self, url, fp, errcode, errmsg, headers, data=None): def http_error_302(self, url, fp, errcode, errmsg, headers, data=None):
"""Error 302 -- relocated (temporarily).""" """Error 302 -- relocated (temporarily)."""
@ -815,9 +815,19 @@ class ftpwrapper:
if not conn: if not conn:
# Set transfer mode to ASCII! # Set transfer mode to ASCII!
self.ftp.voidcmd('TYPE A') self.ftp.voidcmd('TYPE A')
# Try a directory listing # Try a directory listing. Verify that directory exists.
if file: cmd = 'LIST ' + file if file:
else: cmd = 'LIST' pwd = self.ftp.pwd()
try:
try:
self.ftp.cwd(file)
except ftplib.error_perm as reason:
raise IOError('ftp error', reason) from reason
finally:
self.ftp.cwd(pwd)
cmd = 'LIST ' + file
else:
cmd = 'LIST'
conn = self.ftp.ntransfercmd(cmd) conn = self.ftp.ntransfercmd(cmd)
self.busy = 1 self.busy = 1
# Pass back both a suitably decorated object and a retrieval length # Pass back both a suitably decorated object and a retrieval length
@ -898,14 +908,18 @@ class addinfo(addbase):
class addinfourl(addbase): class addinfourl(addbase):
"""class to add info() and geturl() methods to an open file.""" """class to add info() and geturl() methods to an open file."""
def __init__(self, fp, headers, url): def __init__(self, fp, headers, url, code=None):
addbase.__init__(self, fp) addbase.__init__(self, fp)
self.headers = headers self.headers = headers
self.url = url self.url = url
self.code = code
def info(self): def info(self):
return self.headers return self.headers
def getcode(self):
return self.code
def geturl(self): def geturl(self):
return self.url return self.url
@ -1228,10 +1242,33 @@ def getproxies_environment():
proxies = {} proxies = {}
for name, value in os.environ.items(): for name, value in os.environ.items():
name = name.lower() name = name.lower()
if name == 'no_proxy':
# handled in proxy_bypass_environment
continue
if value and name[-6:] == '_proxy': if value and name[-6:] == '_proxy':
proxies[name[:-6]] = value proxies[name[:-6]] = value
return proxies return proxies
def proxy_bypass_environment(host):
"""Test if proxies should not be used for a particular host.
Checks the environment for a variable named no_proxy, which should
be a list of DNS suffixes separated by commas, or '*' for all hosts.
"""
no_proxy = os.environ.get('no_proxy', '') or os.environ.get('NO_PROXY', '')
# '*' is special case for always bypass
if no_proxy == '*':
return 1
# strip port off host
hostonly, port = splitport(host)
# check if the host ends with any of the DNS suffixes
for name in no_proxy.split(','):
if name and (hostonly.endswith(name) or host.endswith(name)):
return 1
# otherwise, don't bypass
return 0
if sys.platform == 'darwin': if sys.platform == 'darwin':
def getproxies_internetconfig(): def getproxies_internetconfig():
"""Return a dictionary of scheme -> proxy server URL mappings. """Return a dictionary of scheme -> proxy server URL mappings.
@ -1259,12 +1296,15 @@ if sys.platform == 'darwin':
pass pass
else: else:
proxies['http'] = 'http://%s' % value proxies['http'] = 'http://%s' % value
# FTP: XXXX To be done. # FTP: XXX To be done.
# Gopher: XXXX To be done. # Gopher: XXX To be done.
return proxies return proxies
def proxy_bypass(x): def proxy_bypass(host):
return 0 if getproxies_environment():
return proxy_bypass_environment(host)
else:
return 0
def getproxies(): def getproxies():
return getproxies_environment() or getproxies_internetconfig() return getproxies_environment() or getproxies_internetconfig()
@ -1324,7 +1364,7 @@ elif os.name == 'nt':
""" """
return getproxies_environment() or getproxies_registry() return getproxies_environment() or getproxies_registry()
def proxy_bypass(host): def proxy_bypass_registry(host):
try: try:
import _winreg import _winreg
import re import re
@ -1383,12 +1423,22 @@ elif os.name == 'nt':
return 1 return 1
return 0 return 0
def proxy_bypass(host):
"""Return a dictionary of scheme -> proxy server URL mappings.
Returns settings gathered from the environment, if specified,
or the registry.
"""
if getproxies_environment():
return proxy_bypass_environment(host)
else:
return proxy_bypass_registry(host)
else: else:
# By default use environment variables # By default use environment variables
getproxies = getproxies_environment getproxies = getproxies_environment
proxy_bypass = proxy_bypass_environment
def proxy_bypass(host):
return 0
# Test and time quote() and unquote() # Test and time quote() and unquote()
def test1(): def test1():

View File

@ -2,6 +2,7 @@
#include "Python.h" #include "Python.h"
#ifndef HAVE_HYPOT
double hypot(double x, double y) double hypot(double x, double y)
{ {
double yx; double yx;
@ -20,3 +21,5 @@ double hypot(double x, double y)
return x*sqrt(1.+yx*yx); return x*sqrt(1.+yx*yx);
} }
} }
#endif /* HAVE_HYPOT */

View File

@ -373,6 +373,25 @@ Set the global debug tracing function. It will be called on each\n\
function call. See the debugger chapter in the library manual." function call. See the debugger chapter in the library manual."
); );
static PyObject *
sys_gettrace(PyObject *self, PyObject *args)
{
PyThreadState *tstate = PyThreadState_GET();
PyObject *temp = tstate->c_traceobj;
if (temp == NULL)
temp = Py_None;
Py_INCREF(temp);
return temp;
}
PyDoc_STRVAR(gettrace_doc,
"gettrace()\n\
\n\
Return the global debug tracing function set with sys.settrace.\n\
See the debugger chapter in the library manual."
);
static PyObject * static PyObject *
sys_setprofile(PyObject *self, PyObject *args) sys_setprofile(PyObject *self, PyObject *args)
{ {
@ -393,6 +412,25 @@ Set the profiling function. It will be called on each function call\n\
and return. See the profiler chapter in the library manual." and return. See the profiler chapter in the library manual."
); );
static PyObject *
sys_getprofile(PyObject *self, PyObject *args)
{
PyThreadState *tstate = PyThreadState_GET();
PyObject *temp = tstate->c_profileobj;
if (temp == NULL)
temp = Py_None;
Py_INCREF(temp);
return temp;
}
PyDoc_STRVAR(getprofile_doc,
"getprofile()\n\
\n\
Return the profiling function set with sys.setprofile.\n\
See the profiler chapter in the library manual."
);
static PyObject * static PyObject *
sys_setcheckinterval(PyObject *self, PyObject *args) sys_setcheckinterval(PyObject *self, PyObject *args)
{ {
@ -763,12 +801,14 @@ static PyMethodDef sys_methods[] = {
setdlopenflags_doc}, setdlopenflags_doc},
#endif #endif
{"setprofile", sys_setprofile, METH_O, setprofile_doc}, {"setprofile", sys_setprofile, METH_O, setprofile_doc},
{"getprofile", sys_getprofile, METH_NOARGS, getprofile_doc},
{"setrecursionlimit", sys_setrecursionlimit, METH_VARARGS, {"setrecursionlimit", sys_setrecursionlimit, METH_VARARGS,
setrecursionlimit_doc}, setrecursionlimit_doc},
#ifdef WITH_TSC #ifdef WITH_TSC
{"settscdump", sys_settscdump, METH_VARARGS, settscdump_doc}, {"settscdump", sys_settscdump, METH_VARARGS, settscdump_doc},
#endif #endif
{"settrace", sys_settrace, METH_O, settrace_doc}, {"settrace", sys_settrace, METH_O, settrace_doc},
{"gettrace", sys_gettrace, METH_NOARGS, gettrace_doc},
{"call_tracing", sys_call_tracing, METH_VARARGS, call_tracing_doc}, {"call_tracing", sys_call_tracing, METH_VARARGS, call_tracing_doc},
{NULL, NULL} /* sentinel */ {NULL, NULL} /* sentinel */
}; };
@ -903,8 +943,10 @@ excepthook() -- print an exception and its traceback to sys.stderr\n\
exc_info() -- return thread-safe information about the current exception\n\ exc_info() -- return thread-safe information about the current exception\n\
exit() -- exit the interpreter by raising SystemExit\n\ exit() -- exit the interpreter by raising SystemExit\n\
getdlopenflags() -- returns flags to be used for dlopen() calls\n\ getdlopenflags() -- returns flags to be used for dlopen() calls\n\
getprofile() -- get the global profiling function\n\
getrefcount() -- return the reference count for an object (plus one :-)\n\ getrefcount() -- return the reference count for an object (plus one :-)\n\
getrecursionlimit() -- return the max recursion depth for the interpreter\n\ getrecursionlimit() -- return the max recursion depth for the interpreter\n\
gettrace() -- get the global debug tracing function\n\
setcheckinterval() -- control how often the interpreter checks for events\n\ setcheckinterval() -- control how often the interpreter checks for events\n\
setdlopenflags() -- set the flags to be used for dlopen() calls\n\ setdlopenflags() -- set the flags to be used for dlopen() calls\n\
setprofile() -- set the global profiling function\n\ setprofile() -- set the global profiling function\n\

10
configure vendored
View File

@ -1,5 +1,5 @@
#! /bin/sh #! /bin/sh
# From configure.in Revision: 59826 . # From configure.in Revision: 59829 .
# Guess values for system-dependent variables and create Makefiles. # Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.61 for python 3.0. # Generated by GNU Autoconf 2.61 for python 3.0.
# #
@ -20584,7 +20584,6 @@ fi
# ************************************ # ************************************
# * Check for mathematical functions * # * Check for mathematical functions *
# ************************************ # ************************************
# check for hypot() in math library
LIBS_SAVE=$LIBS LIBS_SAVE=$LIBS
LIBS="$LIBS $LIBM" LIBS="$LIBS $LIBM"
@ -20694,7 +20693,12 @@ done
for ac_func in copysign isfinite isnan isinf
for ac_func in acosh asinh atanh copysign expm1 finite isinf isnan log1p
do do
as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
{ echo "$as_me:$LINENO: checking for $ac_func" >&5 { echo "$as_me:$LINENO: checking for $ac_func" >&5

View File

@ -2948,12 +2948,11 @@ fi],
# ************************************ # ************************************
# * Check for mathematical functions * # * Check for mathematical functions *
# ************************************ # ************************************
# check for hypot() in math library
LIBS_SAVE=$LIBS LIBS_SAVE=$LIBS
LIBS="$LIBS $LIBM" LIBS="$LIBS $LIBM"
AC_REPLACE_FUNCS(hypot) AC_REPLACE_FUNCS(hypot)
AC_CHECK_FUNCS(copysign isfinite isnan isinf) AC_CHECK_FUNCS(acosh asinh atanh copysign expm1 finite isinf isnan log1p)
LIBS=$LIBS_SAVE LIBS=$LIBS_SAVE

View File

@ -25,6 +25,9 @@
the case on Motorola V4 (R40V4.2) */ the case on Motorola V4 (R40V4.2) */
#undef GETTIMEOFDAY_NO_TZ #undef GETTIMEOFDAY_NO_TZ
/* Define to 1 if you have the `acosh' function. */
#undef HAVE_ACOSH
/* struct addrinfo (netdb.h) */ /* struct addrinfo (netdb.h) */
#undef HAVE_ADDRINFO #undef HAVE_ADDRINFO
@ -34,9 +37,15 @@
/* Define this if your time.h defines altzone. */ /* Define this if your time.h defines altzone. */
#undef HAVE_ALTZONE #undef HAVE_ALTZONE
/* Define to 1 if you have the `asinh' function. */
#undef HAVE_ASINH
/* Define to 1 if you have the <asm/types.h> header file. */ /* Define to 1 if you have the <asm/types.h> header file. */
#undef HAVE_ASM_TYPES_H #undef HAVE_ASM_TYPES_H
/* Define to 1 if you have the `atanh' function. */
#undef HAVE_ATANH
/* Define if GCC supports __attribute__((format(PyArg_ParseTuple, 2, 3))) */ /* Define if GCC supports __attribute__((format(PyArg_ParseTuple, 2, 3))) */
#undef HAVE_ATTRIBUTE_FORMAT_PARSETUPLE #undef HAVE_ATTRIBUTE_FORMAT_PARSETUPLE
@ -141,6 +150,9 @@
/* Define to 1 if you have the `execv' function. */ /* Define to 1 if you have the `execv' function. */
#undef HAVE_EXECV #undef HAVE_EXECV
/* Define to 1 if you have the `expm1' function. */
#undef HAVE_EXPM1
/* Define if you have the 'fchdir' function. */ /* Define if you have the 'fchdir' function. */
#undef HAVE_FCHDIR #undef HAVE_FCHDIR
@ -156,6 +168,9 @@
/* Define if you have the 'fdatasync' function. */ /* Define if you have the 'fdatasync' function. */
#undef HAVE_FDATASYNC #undef HAVE_FDATASYNC
/* Define to 1 if you have the `finite' function. */
#undef HAVE_FINITE
/* Define if you have the 'flock' function. */ /* Define if you have the 'flock' function. */
#undef HAVE_FLOCK #undef HAVE_FLOCK
@ -288,9 +303,6 @@
/* Define to 1 if you have the <io.h> header file. */ /* Define to 1 if you have the <io.h> header file. */
#undef HAVE_IO_H #undef HAVE_IO_H
/* Define to 1 if you have the `isfinite' function. */
#undef HAVE_ISFINITE
/* Define to 1 if you have the `isinf' function. */ /* Define to 1 if you have the `isinf' function. */
#undef HAVE_ISINF #undef HAVE_ISINF
@ -354,6 +366,9 @@
/* Define to 1 if you have the <linux/tipc.h> header file. */ /* Define to 1 if you have the <linux/tipc.h> header file. */
#undef HAVE_LINUX_TIPC_H #undef HAVE_LINUX_TIPC_H
/* Define to 1 if you have the `log1p' function. */
#undef HAVE_LOG1P
/* Define this if you have the type long double. */ /* Define this if you have the type long double. */
#undef HAVE_LONG_DOUBLE #undef HAVE_LONG_DOUBLE