summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2007-07-10 08:30:03 (GMT)
committerGuido van Rossum <guido@python.org>2007-07-10 08:30:03 (GMT)
commita0982944464b94c2965e4776f376b66903f82764 (patch)
treeda605f1e21057be547c9e75b73261ae815f38b34
parent6718062538e642d62c626fd033f2c3a2356c5505 (diff)
downloadcpython-a0982944464b94c2965e4776f376b66903f82764.zip
cpython-a0982944464b94c2965e4776f376b66903f82764.tar.gz
cpython-a0982944464b94c2965e4776f376b66903f82764.tar.bz2
Make test_urllib.py pass. Mostly str/bytes issues.
Also fix mac toolbox glue to accept str, str8, bytes for 255-byte strings.
-rw-r--r--Lib/test/test_urllib.py6
-rw-r--r--Lib/urllib.py4
-rw-r--r--Python/mactoolboxglue.c23
3 files changed, 24 insertions, 9 deletions
diff --git a/Lib/test/test_urllib.py b/Lib/test/test_urllib.py
index 7a3f207..e94fc22 100644
--- a/Lib/test/test_urllib.py
+++ b/Lib/test/test_urllib.py
@@ -30,7 +30,7 @@ class urlopen_FileTests(unittest.TestCase):
def setUp(self):
"""Setup of a temp file to use for testing"""
- self.text = "test_urllib: %s\n" % self.__class__.__name__
+ self.text = bytes("test_urllib: %s\n" % self.__class__.__name__)
FILE = open(test_support.TESTFN, 'wb')
try:
FILE.write(self.text)
@@ -57,7 +57,7 @@ class urlopen_FileTests(unittest.TestCase):
def test_readline(self):
self.assertEqual(self.text, self.returned_obj.readline())
- self.assertEqual('', self.returned_obj.readline(),
+ self.assertEqual(b'', self.returned_obj.readline(),
"calling readline() after exhausting the file did not"
" return an empty string")
@@ -150,7 +150,7 @@ class urlretrieve_FileTests(unittest.TestCase):
# Create a temporary file.
self.registerFileForCleanUp(test_support.TESTFN)
- self.text = 'testing urllib.urlretrieve'
+ self.text = b'testing urllib.urlretrieve'
try:
FILE = open(test_support.TESTFN, 'wb')
FILE.write(self.text)
diff --git a/Lib/urllib.py b/Lib/urllib.py
index c6bd87f..dcd906c 100644
--- a/Lib/urllib.py
+++ b/Lib/urllib.py
@@ -245,7 +245,7 @@ class URLopener:
reporthook(blocknum, bs, size)
while 1:
block = fp.read(bs)
- if block == "":
+ if not block:
break
read += len(block)
tfp.write(block)
@@ -976,7 +976,7 @@ def toBytes(url):
def unwrap(url):
"""unwrap('<URL:type://host/path>') --> 'type://host/path'."""
- url = url.strip()
+ url = str(url).strip()
if url[:1] == '<' and url[-1:] == '>':
url = url[1:-1].strip()
if url[:4] == 'URL:': url = url[4:].strip()
diff --git a/Python/mactoolboxglue.c b/Python/mactoolboxglue.c
index 9a8d30b..85acb51 100644
--- a/Python/mactoolboxglue.c
+++ b/Python/mactoolboxglue.c
@@ -209,14 +209,29 @@ PyMac_BuildNumVersion(NumVersion t)
int
PyMac_GetStr255(PyObject *v, Str255 pbuf)
{
- int len;
- if (!PyString_Check(v) || (len = PyString_Size(v)) > 255) {
+ char *ptr;
+ Py_ssize_t len = 1000;
+
+ if (PyUnicode_Check(v)) {
+ v = _PyUnicode_AsDefaultEncodedString(v, NULL);
+ if (v == NULL)
+ return NULL;
+ }
+ if (PyString_Check(v)) {
+ ptr = PyString_AS_STRING(v);
+ len = PyString_GET_SIZE(v);
+ }
+ else if (PyBytes_Check(v)) {
+ ptr = PyBytes_AS_STRING(v);
+ len = PyBytes_GET_SIZE(v);
+ }
+ if (len > 255) {
PyErr_SetString(PyExc_TypeError,
- "Str255 arg must be string of at most 255 chars");
+ "Str255 arg must be string/bytes of at most 255 chars");
return 0;
}
pbuf[0] = len;
- memcpy((char *)(pbuf+1), PyString_AsString(v), len);
+ memcpy((char *)(pbuf+1), ptr, len);
return 1;
}