Commit 6c1da829 authored by Brett Cannon's avatar Brett Cannon

merge

parents f873d7c2 6294305c
...@@ -187,6 +187,10 @@ autobuild-dev: ...@@ -187,6 +187,10 @@ autobuild-dev:
make update make update
make dist SPHINXOPTS='-A daily=1 -A versionswitcher=1' make dist SPHINXOPTS='-A daily=1 -A versionswitcher=1'
# for quick rebuilds (HTML only)
autobuild-html:
make html SPHINXOPTS='-A daily=1 -A versionswitcher=1'
# for stable releases: only build if not in pre-release stage (alpha, beta, rc) # for stable releases: only build if not in pre-release stage (alpha, beta, rc)
autobuild-stable: autobuild-stable:
@case $(DISTVERSION) in *[abc]*) \ @case $(DISTVERSION) in *[abc]*) \
...@@ -194,3 +198,4 @@ autobuild-stable: ...@@ -194,3 +198,4 @@ autobuild-stable:
exit 1;; \ exit 1;; \
esac esac
@make autobuild-dev @make autobuild-dev
...@@ -116,7 +116,10 @@ Using json.tool from the shell to validate and pretty-print:: ...@@ -116,7 +116,10 @@ Using json.tool from the shell to validate and pretty-print::
Basic Usage Basic Usage
----------- -----------
.. function:: dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, **kw) .. function:: dump(obj, fp, skipkeys=False, ensure_ascii=True, \
check_circular=True, allow_nan=True, cls=None, \
indent=None, separators=None, default=None, \
sort_keys=False, **kw)
Serialize *obj* as a JSON formatted stream to *fp* (a ``.write()``-supporting Serialize *obj* as a JSON formatted stream to *fp* (a ``.write()``-supporting
:term:`file-like object`). :term:`file-like object`).
...@@ -159,12 +162,18 @@ Basic Usage ...@@ -159,12 +162,18 @@ Basic Usage
*default(obj)* is a function that should return a serializable version of *default(obj)* is a function that should return a serializable version of
*obj* or raise :exc:`TypeError`. The default simply raises :exc:`TypeError`. *obj* or raise :exc:`TypeError`. The default simply raises :exc:`TypeError`.
If *sort_keys* is ``True`` (default: ``False``), then the output of
dictionaries will be sorted by key.
To use a custom :class:`JSONEncoder` subclass (e.g. one that overrides the To use a custom :class:`JSONEncoder` subclass (e.g. one that overrides the
:meth:`default` method to serialize additional types), specify it with the :meth:`default` method to serialize additional types), specify it with the
*cls* kwarg; otherwise :class:`JSONEncoder` is used. *cls* kwarg; otherwise :class:`JSONEncoder` is used.
.. function:: dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, **kw) .. function:: dumps(obj, skipkeys=False, ensure_ascii=True, \
check_circular=True, allow_nan=True, cls=None, \
indent=None, separators=None, default=None, \
sort_keys=False, **kw)
Serialize *obj* to a JSON formatted :class:`str`. The arguments have the Serialize *obj* to a JSON formatted :class:`str`. The arguments have the
same meaning as in :func:`dump`. same meaning as in :func:`dump`.
......
...@@ -341,6 +341,10 @@ default values. The arguments that are most commonly needed are: ...@@ -341,6 +341,10 @@ default values. The arguments that are most commonly needed are:
from this vulnerability; see the Note in the :class:`Popen` constructor from this vulnerability; see the Note in the :class:`Popen` constructor
documentation for helpful hints in getting ``shell=False`` to work. documentation for helpful hints in getting ``shell=False`` to work.
When using ``shell=True``, :func:`shlex.quote` can be used to properly
escape whitespace and shell metacharacters in strings that are going to
be used to construct shell commands.
These options, along with all of the other options, are described in more These options, along with all of the other options, are described in more
detail in the :class:`Popen` constructor documentation. detail in the :class:`Popen` constructor documentation.
......
...@@ -43,19 +43,21 @@ ...@@ -43,19 +43,21 @@
if (new_url != url) { if (new_url != url) {
// check beforehand if url exists, else redirect to version's start page // check beforehand if url exists, else redirect to version's start page
$.get(new_url, function() { $.ajax({
url: new_url,
success: function() {
window.location.href = new_url; window.location.href = new_url;
}).error(function() { },
error: function() {
window.location.href = 'http://docs.python.org/' + selected; window.location.href = 'http://docs.python.org/' + selected;
}
}); });
} }
} }
$(document).ready(function() { $(document).ready(function() {
var version = DOCUMENTATION_OPTIONS.VERSION.split('.'), var release = DOCUMENTATION_OPTIONS.VERSION;
release = DOCUMENTATION_OPTIONS.RELEASE || DOCUMENTATION_OPTIONS.VERSION; var version = release.substr(0, 3);
version = version[0] + '.' + version[1];
var select = build_select(version, release); var select = build_select(version, release);
$('.version_switcher_placeholder').html(select); $('.version_switcher_placeholder').html(select);
......
...@@ -7,8 +7,6 @@ ...@@ -7,8 +7,6 @@
.. XXX add trademark info for Apple, Microsoft, SourceForge. .. XXX add trademark info for Apple, Microsoft, SourceForge.
:Author: A.M. Kuchling (amk at amk.ca) :Author: A.M. Kuchling (amk at amk.ca)
:Release: |release|
:Date: |today|
.. $Id$ .. $Id$
Rules for maintenance: Rules for maintenance:
......
...@@ -3,8 +3,6 @@ ...@@ -3,8 +3,6 @@
**************************** ****************************
:Author: A.M. Kuchling (amk at amk.ca) :Author: A.M. Kuchling (amk at amk.ca)
:Release: |release|
:Date: |today|
.. hyperlink all the methods & functions. .. hyperlink all the methods & functions.
......
...@@ -5,8 +5,6 @@ ...@@ -5,8 +5,6 @@
.. XXX Add trademark info for Apple, Microsoft. .. XXX Add trademark info for Apple, Microsoft.
:Author: Guido van Rossum :Author: Guido van Rossum
:Release: |release|
:Date: |today|
.. $Id$ .. $Id$
Rules for maintenance: Rules for maintenance:
......
...@@ -3,8 +3,6 @@ ...@@ -3,8 +3,6 @@
**************************** ****************************
:Author: Raymond Hettinger :Author: Raymond Hettinger
:Release: |release|
:Date: |today|
.. $Id$ .. $Id$
Rules for maintenance: Rules for maintenance:
......
...@@ -3,8 +3,6 @@ ...@@ -3,8 +3,6 @@
**************************** ****************************
:Author: Raymond Hettinger :Author: Raymond Hettinger
:Release: |release|
:Date: |today|
.. $Id$ .. $Id$
Rules for maintenance: Rules for maintenance:
......
...@@ -2,9 +2,6 @@ ...@@ -2,9 +2,6 @@
What's New In Python 3.3 What's New In Python 3.3
**************************** ****************************
:Release: |release|
:Date: |today|
.. Rules for maintenance: .. Rules for maintenance:
* Anyone can add text to this document. Do not spend very much time * Anyone can add text to this document. Do not spend very much time
......
...@@ -122,7 +122,7 @@ _default_encoder = JSONEncoder( ...@@ -122,7 +122,7 @@ _default_encoder = JSONEncoder(
def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,
allow_nan=True, cls=None, indent=None, separators=None, allow_nan=True, cls=None, indent=None, separators=None,
default=None, **kw): default=None, sort_keys=False, **kw):
"""Serialize ``obj`` as a JSON formatted stream to ``fp`` (a """Serialize ``obj`` as a JSON formatted stream to ``fp`` (a
``.write()``-supporting file-like object). ``.write()``-supporting file-like object).
...@@ -155,6 +155,9 @@ def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, ...@@ -155,6 +155,9 @@ def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,
``default(obj)`` is a function that should return a serializable version ``default(obj)`` is a function that should return a serializable version
of obj or raise TypeError. The default simply raises TypeError. of obj or raise TypeError. The default simply raises TypeError.
If *sort_keys* is ``True`` (default: ``False``), then the output of
dictionaries will be sorted by key.
To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the
``.default()`` method to serialize additional types), specify it with ``.default()`` method to serialize additional types), specify it with
the ``cls`` kwarg; otherwise ``JSONEncoder`` is used. the ``cls`` kwarg; otherwise ``JSONEncoder`` is used.
...@@ -164,7 +167,7 @@ def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, ...@@ -164,7 +167,7 @@ def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,
if (not skipkeys and ensure_ascii and if (not skipkeys and ensure_ascii and
check_circular and allow_nan and check_circular and allow_nan and
cls is None and indent is None and separators is None and cls is None and indent is None and separators is None and
default is None and not kw): default is None and not sort_keys and not kw):
iterable = _default_encoder.iterencode(obj) iterable = _default_encoder.iterencode(obj)
else: else:
if cls is None: if cls is None:
...@@ -172,7 +175,7 @@ def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, ...@@ -172,7 +175,7 @@ def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,
iterable = cls(skipkeys=skipkeys, ensure_ascii=ensure_ascii, iterable = cls(skipkeys=skipkeys, ensure_ascii=ensure_ascii,
check_circular=check_circular, allow_nan=allow_nan, indent=indent, check_circular=check_circular, allow_nan=allow_nan, indent=indent,
separators=separators, separators=separators,
default=default, **kw).iterencode(obj) default=default, sort_keys=sort_keys, **kw).iterencode(obj)
# could accelerate with writelines in some versions of Python, at # could accelerate with writelines in some versions of Python, at
# a debuggability cost # a debuggability cost
for chunk in iterable: for chunk in iterable:
...@@ -181,7 +184,7 @@ def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, ...@@ -181,7 +184,7 @@ def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,
def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
allow_nan=True, cls=None, indent=None, separators=None, allow_nan=True, cls=None, indent=None, separators=None,
default=None, **kw): default=None, sort_keys=False, **kw):
"""Serialize ``obj`` to a JSON formatted ``str``. """Serialize ``obj`` to a JSON formatted ``str``.
If ``skipkeys`` is false then ``dict`` keys that are not basic types If ``skipkeys`` is false then ``dict`` keys that are not basic types
...@@ -213,6 +216,9 @@ def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, ...@@ -213,6 +216,9 @@ def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
``default(obj)`` is a function that should return a serializable version ``default(obj)`` is a function that should return a serializable version
of obj or raise TypeError. The default simply raises TypeError. of obj or raise TypeError. The default simply raises TypeError.
If *sort_keys* is ``True`` (default: ``False``), then the output of
dictionaries will be sorted by key.
To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the
``.default()`` method to serialize additional types), specify it with ``.default()`` method to serialize additional types), specify it with
the ``cls`` kwarg; otherwise ``JSONEncoder`` is used. the ``cls`` kwarg; otherwise ``JSONEncoder`` is used.
...@@ -222,14 +228,14 @@ def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, ...@@ -222,14 +228,14 @@ def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
if (not skipkeys and ensure_ascii and if (not skipkeys and ensure_ascii and
check_circular and allow_nan and check_circular and allow_nan and
cls is None and indent is None and separators is None and cls is None and indent is None and separators is None and
default is None and not kw): default is None and not sort_keys and not kw):
return _default_encoder.encode(obj) return _default_encoder.encode(obj)
if cls is None: if cls is None:
cls = JSONEncoder cls = JSONEncoder
return cls( return cls(
skipkeys=skipkeys, ensure_ascii=ensure_ascii, skipkeys=skipkeys, ensure_ascii=ensure_ascii,
check_circular=check_circular, allow_nan=allow_nan, indent=indent, check_circular=check_circular, allow_nan=allow_nan, indent=indent,
separators=separators, default=default, separators=separators, default=default, sort_keys=sort_keys,
**kw).encode(obj) **kw).encode(obj)
......
...@@ -647,6 +647,7 @@ class BZ2DecompressorTest(BaseTest): ...@@ -647,6 +647,7 @@ class BZ2DecompressorTest(BaseTest):
bz2d = BZ2Decompressor() bz2d = BZ2Decompressor()
text = bz2d.decompress(self.DATA) text = bz2d.decompress(self.DATA)
self.assertRaises(EOFError, bz2d.decompress, b"anything") self.assertRaises(EOFError, bz2d.decompress, b"anything")
self.assertRaises(EOFError, bz2d.decompress, b"")
@bigmemtest(size=_4G + 100, memuse=3) @bigmemtest(size=_4G + 100, memuse=3)
def testDecompress4G(self, size): def testDecompress4G(self, size):
......
...@@ -981,6 +981,21 @@ class UnicodeTest(string_tests.CommonTest, ...@@ -981,6 +981,21 @@ class UnicodeTest(string_tests.CommonTest,
self.assertRaises(ValueError, '{}'.format_map, 'a') self.assertRaises(ValueError, '{}'.format_map, 'a')
self.assertRaises(ValueError, '{a} {}'.format_map, {"a" : 2, "b" : 1}) self.assertRaises(ValueError, '{a} {}'.format_map, {"a" : 2, "b" : 1})
def test_format_huge_precision(self):
format_string = ".{}f".format(sys.maxsize + 1)
with self.assertRaises(ValueError):
result = format(2.34, format_string)
def test_format_huge_width(self):
format_string = "{}f".format(sys.maxsize + 1)
with self.assertRaises(ValueError):
result = format(2.34, format_string)
def test_format_huge_item_number(self):
format_string = "{{{}:.6f}}".format(sys.maxsize + 1)
with self.assertRaises(ValueError):
result = format_string.format(2.34)
def test_format_auto_numbering(self): def test_format_auto_numbering(self):
class C: class C:
def __init__(self, x=100): def __init__(self, x=100):
...@@ -1069,6 +1084,18 @@ class UnicodeTest(string_tests.CommonTest, ...@@ -1069,6 +1084,18 @@ class UnicodeTest(string_tests.CommonTest,
self.assertEqual('%.1s' % "a\xe9\u20ac", 'a') self.assertEqual('%.1s' % "a\xe9\u20ac", 'a')
self.assertEqual('%.2s' % "a\xe9\u20ac", 'a\xe9') self.assertEqual('%.2s' % "a\xe9\u20ac", 'a\xe9')
@support.cpython_only
def test_formatting_huge_precision(self):
from _testcapi import INT_MAX
format_string = "%.{}f".format(INT_MAX + 1)
with self.assertRaises(ValueError):
result = format_string % 2.34
def test_formatting_huge_width(self):
format_string = "%{}f".format(sys.maxsize + 1)
with self.assertRaises(ValueError):
result = format_string % 2.34
def test_startswith_endswith_errors(self): def test_startswith_endswith_errors(self):
for meth in ('foo'.startswith, 'foo'.endswith): for meth in ('foo'.startswith, 'foo'.endswith):
with self.assertRaises(TypeError) as cm: with self.assertRaises(TypeError) as cm:
......
...@@ -157,12 +157,12 @@ class OtherNetworkTests(unittest.TestCase): ...@@ -157,12 +157,12 @@ class OtherNetworkTests(unittest.TestCase):
## self._test_urls(urls, self._extra_handlers()+[bauth, dauth]) ## self._test_urls(urls, self._extra_handlers()+[bauth, dauth])
def test_urlwithfrag(self): def test_urlwithfrag(self):
urlwith_frag = "http://docs.python.org/glossary.html#glossary" urlwith_frag = "http://docs.python.org/2/glossary.html#glossary"
with support.transient_internet(urlwith_frag): with support.transient_internet(urlwith_frag):
req = urllib.request.Request(urlwith_frag) req = urllib.request.Request(urlwith_frag)
res = urllib.request.urlopen(req) res = urllib.request.urlopen(req)
self.assertEqual(res.geturl(), self.assertEqual(res.geturl(),
"http://docs.python.org/glossary.html#glossary") "http://docs.python.org/2/glossary.html#glossary")
def test_custom_headers(self): def test_custom_headers(self):
url = "http://www.example.com" url = "http://www.example.com"
......
...@@ -305,8 +305,14 @@ class EnvBuilder: ...@@ -305,8 +305,14 @@ class EnvBuilder:
mode = 'wb' mode = 'wb'
else: else:
mode = 'w' mode = 'w'
try:
data = data.decode('utf-8') data = data.decode('utf-8')
data = self.replace_variables(data, context) data = self.replace_variables(data, context)
except UnicodeDecodeError as e:
data = None
logger.warning('unable to copy script %r, '
'may be binary: %s', srcfile, e)
if data is not None:
with open(dstfile, mode) as f: with open(dstfile, mode) as f:
f.write(data) f.write(data)
shutil.copymode(srcfile, dstfile) shutil.copymode(srcfile, dstfile)
......
...@@ -415,7 +415,7 @@ def add_ui(db): ...@@ -415,7 +415,7 @@ def add_ui(db):
("VerdanaRed9", "Verdana", 9, 255, 0), ("VerdanaRed9", "Verdana", 9, 255, 0),
]) ])
compileargs = r'-Wi "[TARGETDIR]Lib\compileall.py" -f -x "bad_coding|badsyntax|site-packages|py2_|lib2to3\\tests" "[TARGETDIR]Lib"' compileargs = r'-Wi "[TARGETDIR]Lib\compileall.py" -f -x "bad_coding|badsyntax|site-packages|py2_|lib2to3\\tests|venv\\scripts" "[TARGETDIR]Lib"'
lib2to3args = r'-c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()"' lib2to3args = r'-c "import lib2to3.pygram, lib2to3.patcomp;lib2to3.patcomp.PatternCompiler()"'
# See "CustomAction Table" # See "CustomAction Table"
add_data(db, "CustomAction", [ add_data(db, "CustomAction", [
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment