diff options
-rw-r--r-- | Doc/tutorial/inputoutput.rst | 8 | ||||
-rw-r--r-- | Lib/inspect.py | 5 | ||||
-rw-r--r-- | Lib/webbrowser.py | 22 | ||||
-rwxr-xr-x | Misc/build.sh | 24 | ||||
-rw-r--r-- | Objects/dictobject.c | 2 | ||||
-rw-r--r-- | Python/import.c | 14 |
6 files changed, 45 insertions, 30 deletions
diff --git a/Doc/tutorial/inputoutput.rst b/Doc/tutorial/inputoutput.rst index 662407a..549a922 100644 --- a/Doc/tutorial/inputoutput.rst +++ b/Doc/tutorial/inputoutput.rst @@ -152,9 +152,9 @@ Positional and keyword arguments can be arbitrarily combined:: other='Georg')) The story of Bill, Manfred, and Georg. -An optional ``':'`` and format specifier can follow the field name. This also +An optional ``':'`` and format specifier can follow the field name. This allows greater control over how the value is formatted. The following example -truncates the Pi to three places after the decimal. +truncates Pi to three places after the decimal. >>> import math >>> print('The value of PI is approximately {0:.3f}.'.format(math.pi)) @@ -208,8 +208,8 @@ operation. For example:: The value of PI is approximately 3.142. Since :meth:`str.format` is quite new, a lot of Python code still uses the ``%`` -operator. However, because this old style of formatting will eventually removed -from the language :meth:`str.format` should generally be used. +operator. However, because this old style of formatting will eventually be +removed from the language, :meth:`str.format` should generally be used. More information can be found in the :ref:`old-string-formatting` section. diff --git a/Lib/inspect.py b/Lib/inspect.py index fe3ffc7..9a84de3 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -994,7 +994,10 @@ def getinnerframes(tb, context=1): tb = tb.tb_next return framelist -currentframe = sys._getframe +if hasattr(sys, '_getframe'): + currentframe = sys._getframe +else: + currentframe = lambda _=None: None def stack(context=1): """Return a list of records for the stack above the caller's frame.""" diff --git a/Lib/webbrowser.py b/Lib/webbrowser.py index fb227fe..1d9ff43 100644 --- a/Lib/webbrowser.py +++ b/Lib/webbrowser.py @@ -56,7 +56,7 @@ def get(using=None): # It is recommended one does "import webbrowser" and uses webbrowser.open(url) # instead of "from webbrowser import *". -def open(url, new=0, autoraise=1): +def open(url, new=0, autoraise=True): for name in _tryorder: browser = get(name) if browser.open(url, new, autoraise): @@ -145,7 +145,7 @@ class BaseBrowser(object): self.name = name self.basename = name - def open(self, url, new=0, autoraise=1): + def open(self, url, new=0, autoraise=True): raise NotImplementedError def open_new(self, url): @@ -169,7 +169,7 @@ class GenericBrowser(BaseBrowser): self.args = name[1:] self.basename = os.path.basename(self.name) - def open(self, url, new=0, autoraise=1): + def open(self, url, new=0, autoraise=True): cmdline = [self.name] + [arg.replace("%s", url) for arg in self.args] try: @@ -186,7 +186,7 @@ class BackgroundBrowser(GenericBrowser): """Class for all browsers which are to be started in the background.""" - def open(self, url, new=0, autoraise=1): + def open(self, url, new=0, autoraise=True): cmdline = [self.name] + [arg.replace("%s", url) for arg in self.args] try: @@ -217,7 +217,7 @@ class UnixBrowser(BaseBrowser): raise_opt = [] if remote and self.raise_opts: # use autoraise argument only for remote invocation - autoraise = int(bool(autoraise)) + autoraise = int(autoraise) opt = self.raise_opts[autoraise] if opt: raise_opt = [opt] @@ -257,7 +257,7 @@ class UnixBrowser(BaseBrowser): else: return not p.wait() - def open(self, url, new=0, autoraise=1): + def open(self, url, new=0, autoraise=True): if new == 0: action = self.remote_action elif new == 1: @@ -341,7 +341,7 @@ class Konqueror(BaseBrowser): for more information on the Konqueror remote-control interface. """ - def open(self, url, new=0, autoraise=1): + def open(self, url, new=0, autoraise=True): # XXX Currently I know no way to prevent KFM from opening a new win. if new == 2: action = "newTab" @@ -429,7 +429,7 @@ class Grail(BaseBrowser): s.close() return 1 - def open(self, url, new=0, autoraise=1): + def open(self, url, new=0, autoraise=True): if new: ok = self._remote("LOADNEW " + url) else: @@ -512,7 +512,7 @@ if os.environ.get("TERM"): if sys.platform[:3] == "win": class WindowsDefault(BaseBrowser): - def open(self, url, new=0, autoraise=1): + def open(self, url, new=0, autoraise=True): try: os.startfile(url) except WindowsError: @@ -546,7 +546,7 @@ except ImportError: pass else: class InternetConfig(BaseBrowser): - def open(self, url, new=0, autoraise=1): + def open(self, url, new=0, autoraise=True): ic.launchurl(url) return True # Any way to get status? @@ -567,7 +567,7 @@ if sys.platform == 'darwin': def __init__(self, name): self.name = name - def open(self, url, new=0, autoraise=1): + def open(self, url, new=0, autoraise=True): assert "'" not in url # hack for local urls if not ':' in url: diff --git a/Misc/build.sh b/Misc/build.sh index 5b4a386..409b346 100755 --- a/Misc/build.sh +++ b/Misc/build.sh @@ -4,9 +4,11 @@ ## does this: ## svn up ; ./configure ; make ; make test ; make install ; cd Doc ; make ## -## Logs are kept and rsync'ed to the host. If there are test failure(s), +## Logs are kept and rsync'ed to the webhost. If there are test failure(s), ## information about the failure(s) is mailed. ## +## The user must be a member of the webmaster group locally and on webhost. +## ## This script is run on the PSF's machine as user neal via crontab. ## ## Yes, this script would probably be easier in python, but then @@ -76,7 +78,8 @@ ALWAYS_SKIP="-x $_ALWAYS_SKIP" # Skip these tests altogether when looking for leaks. These tests # do not need to be stored above in LEAKY_TESTS too. # test_logging causes hangs, skip it. -LEAKY_SKIPS="-x test_logging $_ALWAYS_SKIP" +# KBK 21Apr09: test_httpservers causes hangs, skip for now. +LEAKY_SKIPS="-x test_compiler test_logging test_httpservers" # Change this flag to "yes" for old releases to only update/build the docs. BUILD_DISABLED="no" @@ -133,9 +136,14 @@ mail_on_failure() { ## setup cd $DIR +make clobber /dev/null 2>&1 +cp -p Modules/Setup.dist Modules/Setup +# But maybe there was no Makefile - we are only building docs. Clear build: +rm -rf build/ mkdir -p build -rm -f $RESULT_FILE build/*.out rm -rf $INSTALL_DIR +## get the path we are building +repo_path=$(grep "url=" .svn/entries | sed -e s/\\W*url=// -e s/\"//g) ## create results file TITLE="Automated Python Build Results" @@ -153,6 +161,8 @@ echo " </tr><tr>" >> $RESULT_FILE echo " <td>Hostname:</td><td>`uname -n`</td>" >> $RESULT_FILE echo " </tr><tr>" >> $RESULT_FILE echo " <td>Platform:</td><td>`uname -srmpo`</td>" >> $RESULT_FILE +echo " </tr><tr>" >> $RESULT_FILE +echo " <td>URL:</td><td>$repo_path</td>" >> $RESULT_FILE echo " </tr>" >> $RESULT_FILE echo "</table>" >> $RESULT_FILE echo "<ul>" >> $RESULT_FILE @@ -223,7 +233,7 @@ if [ $err = 0 -a "$BUILD_DISABLED" != "yes" ]; then start=`current_time` ## ensure that the reflog exists so the grep doesn't fail touch $REFLOG - $PYTHON $REGRTEST_ARGS -R 4:3:$REFLOG -u network,urlfetch $LEAKY_SKIPS >& build/$F + $PYTHON $REGRTEST_ARGS -R 4:3:$REFLOG -u network $LEAKY_SKIPS >& build/$F LEAK_PAT="($LEAKY_TESTS|sum=0)" NUM_FAILURES=`egrep -vc "$LEAK_PAT" $REFLOG` place_summary_first build/$F @@ -259,13 +269,13 @@ start=`current_time` # which will definitely fail with a conflict. #CONFLICTED_FILE=commontex/boilerplate.tex #conflict_count=`grep -c "<<<" $CONFLICTED_FILE` -make clean conflict_count=0 if [ $conflict_count != 0 ]; then echo "Conflict detected in $CONFLICTED_FILE. Doc build skipped." > ../build/$F err=1 else - make checkout update html >& ../build/$F + make clean > ../build/$F 2>&1 + make checkout update html >> ../build/$F 2>&1 err=$? fi update_status "Making doc" "$F" $start @@ -279,6 +289,8 @@ echo "</body>" >> $RESULT_FILE echo "</html>" >> $RESULT_FILE ## copy results +chgrp -R webmaster build/html +chmod -R g+w build/html rsync $RSYNC_OPTS build/html/* $REMOTE_SYSTEM:$REMOTE_DIR cd ../build rsync $RSYNC_OPTS index.html *.out $REMOTE_SYSTEM:$REMOTE_DIR/results/ diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 907ccf2..03f2010 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -718,7 +718,7 @@ PyDict_GetItem(PyObject *op, PyObject *key) running "python -Wi" for an example related to string interning. Let's just hope that no exception occurs then... This must be _PyThreadState_Current and not PyThreadState_GET() because in debug - mode, it complains if tstate is NULL. */ + mode, the latter complains if tstate is NULL. */ tstate = _PyThreadState_Current; if (tstate != NULL && tstate->curexc_type != NULL) { /* preserve the existing exception */ diff --git a/Python/import.c b/Python/import.c index 0d50f5b..2ae5fa7 100644 --- a/Python/import.c +++ b/Python/import.c @@ -1783,7 +1783,7 @@ static int init_builtin(char *); /* Forward */ its module object WITH INCREMENTED REFERENCE COUNT */ static PyObject * -load_module(char *name, FILE *fp, char *buf, int type, PyObject *loader) +load_module(char *name, FILE *fp, char *pathname, int type, PyObject *loader) { PyObject *modules; PyObject *m; @@ -1804,27 +1804,27 @@ load_module(char *name, FILE *fp, char *buf, int type, PyObject *loader) switch (type) { case PY_SOURCE: - m = load_source_module(name, buf, fp); + m = load_source_module(name, pathname, fp); break; case PY_COMPILED: - m = load_compiled_module(name, buf, fp); + m = load_compiled_module(name, pathname, fp); break; #ifdef HAVE_DYNAMIC_LOADING case C_EXTENSION: - m = _PyImport_LoadDynamicModule(name, buf, fp); + m = _PyImport_LoadDynamicModule(name, pathname, fp); break; #endif case PKG_DIRECTORY: - m = load_package(name, buf); + m = load_package(name, pathname); break; case C_BUILTIN: case PY_FROZEN: - if (buf != NULL && buf[0] != '\0') - name = buf; + if (pathname != NULL && pathname[0] != '\0') + name = pathname; if (type == C_BUILTIN) err = init_builtin(name); else |