mirror of https://github.com/python/cpython
Merged revisions 81465-81466,81468,81679,81735,81760,81868,82183 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r81465 | georg.brandl | 2010-05-22 06:29:19 -0500 (Sat, 22 May 2010) | 2 lines Issue #3924: Ignore cookies with invalid "version" field in cookielib. ........ r81466 | georg.brandl | 2010-05-22 06:31:16 -0500 (Sat, 22 May 2010) | 1 line Underscore the name of an internal utility function. ........ r81468 | georg.brandl | 2010-05-22 06:43:25 -0500 (Sat, 22 May 2010) | 1 line #8635: document enumerate() start parameter in docstring. ........ r81679 | benjamin.peterson | 2010-06-03 16:21:03 -0500 (Thu, 03 Jun 2010) | 1 line use a set for membership testing ........ r81735 | michael.foord | 2010-06-05 06:46:59 -0500 (Sat, 05 Jun 2010) | 1 line Extract error message truncating into a method (unittest.TestCase._truncateMessage). ........ r81760 | michael.foord | 2010-06-05 14:38:42 -0500 (Sat, 05 Jun 2010) | 1 line Issue 8302. SkipTest exception is setUpClass or setUpModule is now reported as a skip rather than an error. ........ r81868 | benjamin.peterson | 2010-06-09 14:45:04 -0500 (Wed, 09 Jun 2010) | 1 line fix code formatting ........ r82183 | benjamin.peterson | 2010-06-23 15:29:26 -0500 (Wed, 23 Jun 2010) | 1 line cpython only gc tests ........
This commit is contained in:
parent
63eebe5318
commit
3e5cd1d04e
|
@ -436,6 +436,13 @@ def join_header_words(lists):
|
||||||
if attr: headers.append("; ".join(attr))
|
if attr: headers.append("; ".join(attr))
|
||||||
return ", ".join(headers)
|
return ", ".join(headers)
|
||||||
|
|
||||||
|
def strip_quotes(text):
|
||||||
|
if text.startswith('"'):
|
||||||
|
text = text[1:]
|
||||||
|
if text.endswith('"'):
|
||||||
|
text = text[:-1]
|
||||||
|
return text
|
||||||
|
|
||||||
def parse_ns_headers(ns_headers):
|
def parse_ns_headers(ns_headers):
|
||||||
"""Ad-hoc parser for Netscape protocol cookie-attributes.
|
"""Ad-hoc parser for Netscape protocol cookie-attributes.
|
||||||
|
|
||||||
|
@ -453,7 +460,7 @@ def parse_ns_headers(ns_headers):
|
||||||
"""
|
"""
|
||||||
known_attrs = ("expires", "domain", "path", "secure",
|
known_attrs = ("expires", "domain", "path", "secure",
|
||||||
# RFC 2109 attrs (may turn up in Netscape cookies, too)
|
# RFC 2109 attrs (may turn up in Netscape cookies, too)
|
||||||
"port", "max-age")
|
"version", "port", "max-age")
|
||||||
|
|
||||||
result = []
|
result = []
|
||||||
for ns_header in ns_headers:
|
for ns_header in ns_headers:
|
||||||
|
@ -473,12 +480,11 @@ def parse_ns_headers(ns_headers):
|
||||||
k = lc
|
k = lc
|
||||||
if k == "version":
|
if k == "version":
|
||||||
# This is an RFC 2109 cookie.
|
# This is an RFC 2109 cookie.
|
||||||
|
v = strip_quotes(v)
|
||||||
version_set = True
|
version_set = True
|
||||||
if k == "expires":
|
if k == "expires":
|
||||||
# convert expires date to seconds since epoch
|
# convert expires date to seconds since epoch
|
||||||
if v.startswith('"'): v = v[1:]
|
v = http2time(strip_quotes(v)) # None if invalid
|
||||||
if v.endswith('"'): v = v[:-1]
|
|
||||||
v = http2time(v) # None if invalid
|
|
||||||
pairs.append((k, v))
|
pairs.append((k, v))
|
||||||
|
|
||||||
if pairs:
|
if pairs:
|
||||||
|
@ -1446,7 +1452,11 @@ class CookieJar:
|
||||||
|
|
||||||
# set the easy defaults
|
# set the easy defaults
|
||||||
version = standard.get("version", None)
|
version = standard.get("version", None)
|
||||||
if version is not None: version = int(version)
|
if version is not None:
|
||||||
|
try:
|
||||||
|
version = int(version)
|
||||||
|
except ValueError:
|
||||||
|
return None # invalid version, ignore cookie
|
||||||
secure = standard.get("secure", False)
|
secure = standard.get("secure", False)
|
||||||
# (discard is also set if expires is Absent)
|
# (discard is also set if expires is Absent)
|
||||||
discard = standard.get("discard", False)
|
discard = standard.get("discard", False)
|
||||||
|
|
|
@ -273,12 +273,12 @@ def getsitepackages():
|
||||||
environment, and will return a list of full paths.
|
environment, and will return a list of full paths.
|
||||||
"""
|
"""
|
||||||
sitepackages = []
|
sitepackages = []
|
||||||
seen = []
|
seen = set()
|
||||||
|
|
||||||
for prefix in PREFIXES:
|
for prefix in PREFIXES:
|
||||||
if not prefix or prefix in seen:
|
if not prefix or prefix in seen:
|
||||||
continue
|
continue
|
||||||
seen.append(prefix)
|
seen.add(prefix)
|
||||||
|
|
||||||
if sys.platform in ('os2emx', 'riscos'):
|
if sys.platform in ('os2emx', 'riscos'):
|
||||||
sitepackages.append(os.path.join(prefix, "Lib", "site-packages"))
|
sitepackages.append(os.path.join(prefix, "Lib", "site-packages"))
|
||||||
|
|
|
@ -664,6 +664,7 @@ class DictTest(unittest.TestCase):
|
||||||
gc.collect()
|
gc.collect()
|
||||||
self.assertTrue(gc.is_tracked(t), t)
|
self.assertTrue(gc.is_tracked(t), t)
|
||||||
|
|
||||||
|
@support.cpython_only
|
||||||
def test_track_literals(self):
|
def test_track_literals(self):
|
||||||
# Test GC-optimization of dict literals
|
# Test GC-optimization of dict literals
|
||||||
x, y, z, w = 1.5, "a", (1, None), []
|
x, y, z, w = 1.5, "a", (1, None), []
|
||||||
|
@ -681,6 +682,7 @@ class DictTest(unittest.TestCase):
|
||||||
self._tracked({1: {}})
|
self._tracked({1: {}})
|
||||||
self._tracked({1: set()})
|
self._tracked({1: set()})
|
||||||
|
|
||||||
|
@support.cpython_only
|
||||||
def test_track_dynamic(self):
|
def test_track_dynamic(self):
|
||||||
# Test GC-optimization of dynamically-created dicts
|
# Test GC-optimization of dynamically-created dicts
|
||||||
class MyObject(object):
|
class MyObject(object):
|
||||||
|
@ -744,6 +746,7 @@ class DictTest(unittest.TestCase):
|
||||||
d.update([(x, y), (z, w)])
|
d.update([(x, y), (z, w)])
|
||||||
self._tracked(d)
|
self._tracked(d)
|
||||||
|
|
||||||
|
@support.cpython_only
|
||||||
def test_track_subtypes(self):
|
def test_track_subtypes(self):
|
||||||
# Dict subtypes are always tracked
|
# Dict subtypes are always tracked
|
||||||
class MyDict(dict):
|
class MyDict(dict):
|
||||||
|
|
|
@ -97,6 +97,7 @@ class DateTimeTests(TestCase):
|
||||||
|
|
||||||
|
|
||||||
class HeaderTests(TestCase):
|
class HeaderTests(TestCase):
|
||||||
|
|
||||||
def test_parse_ns_headers(self):
|
def test_parse_ns_headers(self):
|
||||||
# quotes should be stripped
|
# quotes should be stripped
|
||||||
expected = [[('foo', 'bar'), ('expires', 2209069412), ('version', '0')]]
|
expected = [[('foo', 'bar'), ('expires', 2209069412), ('version', '0')]]
|
||||||
|
@ -106,6 +107,16 @@ class HeaderTests(TestCase):
|
||||||
]:
|
]:
|
||||||
self.assertEquals(parse_ns_headers([hdr]), expected)
|
self.assertEquals(parse_ns_headers([hdr]), expected)
|
||||||
|
|
||||||
|
def test_parse_ns_headers_version(self):
|
||||||
|
|
||||||
|
# quotes should be stripped
|
||||||
|
expected = [[('foo', 'bar'), ('version', '1')]]
|
||||||
|
for hdr in [
|
||||||
|
'foo=bar; version="1"',
|
||||||
|
'foo=bar; Version="1"',
|
||||||
|
]:
|
||||||
|
self.assertEquals(parse_ns_headers([hdr]), expected)
|
||||||
|
|
||||||
def test_parse_ns_headers_special_names(self):
|
def test_parse_ns_headers_special_names(self):
|
||||||
# names such as 'expires' are not special in first name=value pair
|
# names such as 'expires' are not special in first name=value pair
|
||||||
# of Set-Cookie: header
|
# of Set-Cookie: header
|
||||||
|
@ -1020,6 +1031,8 @@ class CookieTests(TestCase):
|
||||||
["Set-Cookie2: a=foo; path=/; Version=1; domain"],
|
["Set-Cookie2: a=foo; path=/; Version=1; domain"],
|
||||||
# bad max-age
|
# bad max-age
|
||||||
["Set-Cookie: b=foo; max-age=oops"],
|
["Set-Cookie: b=foo; max-age=oops"],
|
||||||
|
# bad version
|
||||||
|
["Set-Cookie: b=foo; version=spam"],
|
||||||
]:
|
]:
|
||||||
c = cookiejar_from_cookie_headers(headers)
|
c = cookiejar_from_cookie_headers(headers)
|
||||||
# these bad cookies shouldn't be set
|
# these bad cookies shouldn't be set
|
||||||
|
|
|
@ -159,12 +159,13 @@ enum_next(enumobject *en)
|
||||||
}
|
}
|
||||||
|
|
||||||
PyDoc_STRVAR(enum_doc,
|
PyDoc_STRVAR(enum_doc,
|
||||||
"enumerate(iterable) -> iterator for index, value of iterable\n"
|
"enumerate(iterable[, start]) -> iterator for index, value of iterable\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Return an enumerate object. iterable must be another object that supports\n"
|
"Return an enumerate object. iterable must be another object that supports\n"
|
||||||
"iteration. The enumerate object yields pairs containing a count (from\n"
|
"iteration. The enumerate object yields pairs containing a count (from\n"
|
||||||
"zero) and a value yielded by the iterable argument. enumerate is useful\n"
|
"start, which defaults to zero) and a value yielded by the iterable argument.\n"
|
||||||
"for obtaining an indexed list: (0, seq[0]), (1, seq[1]), (2, seq[2]), ...");
|
"enumerate is useful for obtaining an indexed list:\n"
|
||||||
|
" (0, seq[0]), (1, seq[1]), (2, seq[2]), ...");
|
||||||
|
|
||||||
PyTypeObject PyEnum_Type = {
|
PyTypeObject PyEnum_Type = {
|
||||||
PyVarObject_HEAD_INIT(&PyType_Type, 0)
|
PyVarObject_HEAD_INIT(&PyType_Type, 0)
|
||||||
|
|
|
@ -732,8 +732,9 @@ static int add_attributes(PyTypeObject* type, char**attrs, int num_fields)
|
||||||
{
|
{
|
||||||
int i, result;
|
int i, result;
|
||||||
PyObject *s, *l = PyTuple_New(num_fields);
|
PyObject *s, *l = PyTuple_New(num_fields);
|
||||||
if (!l) return 0;
|
if (!l)
|
||||||
for(i = 0; i < num_fields; i++) {
|
return 0;
|
||||||
|
for (i = 0; i < num_fields; i++) {
|
||||||
s = PyUnicode_FromString(attrs[i]);
|
s = PyUnicode_FromString(attrs[i]);
|
||||||
if (!s) {
|
if (!s) {
|
||||||
Py_DECREF(l);
|
Py_DECREF(l);
|
||||||
|
|
|
@ -537,8 +537,9 @@ static int add_attributes(PyTypeObject* type, char**attrs, int num_fields)
|
||||||
{
|
{
|
||||||
int i, result;
|
int i, result;
|
||||||
PyObject *s, *l = PyTuple_New(num_fields);
|
PyObject *s, *l = PyTuple_New(num_fields);
|
||||||
if (!l) return 0;
|
if (!l)
|
||||||
for(i = 0; i < num_fields; i++) {
|
return 0;
|
||||||
|
for (i = 0; i < num_fields; i++) {
|
||||||
s = PyUnicode_FromString(attrs[i]);
|
s = PyUnicode_FromString(attrs[i]);
|
||||||
if (!s) {
|
if (!s) {
|
||||||
Py_DECREF(l);
|
Py_DECREF(l);
|
||||||
|
|
Loading…
Reference in New Issue