From a0982944464b94c2965e4776f376b66903f82764 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Tue, 10 Jul 2007 08:30:03 +0000 Subject: Make test_urllib.py pass. Mostly str/bytes issues. Also fix mac toolbox glue to accept str, str8, bytes for 255-byte strings. --- Lib/test/test_urllib.py | 6 +++--- Lib/urllib.py | 4 ++-- Python/mactoolboxglue.c | 23 +++++++++++++++++++---- 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('') --> '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; } -- cgit v0.12