summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorMartin v. Löwis <martin@v.loewis.de>2007-07-18 02:28:27 (GMT)
committerMartin v. Löwis <martin@v.loewis.de>2007-07-18 02:28:27 (GMT)
commit10a60b3ec0cdf7eeac98258fc53a33b7026f8ff3 (patch)
tree533e2a67c2c082cd9534c70293977f9245425188 /Lib
parent6f2df4d5e193d54244b0c2de91ef0ab1604b9243 (diff)
downloadcpython-10a60b3ec0cdf7eeac98258fc53a33b7026f8ff3.zip
cpython-10a60b3ec0cdf7eeac98258fc53a33b7026f8ff3.tar.gz
cpython-10a60b3ec0cdf7eeac98258fc53a33b7026f8ff3.tar.bz2
Change Py_BuildValue to generate Unicode objects for
's' and 'c' codes. Change pickle to dump bytes objects using the 'S' code, and to load the 'S' code as byte objects. Change datetime and array to generate and expect bytes objects in reduce/unreduce.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/pickle.py20
-rw-r--r--Lib/test/test_datetime.py3
2 files changed, 18 insertions, 5 deletions
diff --git a/Lib/pickle.py b/Lib/pickle.py
index 27f7eca..c158b8d 100644
--- a/Lib/pickle.py
+++ b/Lib/pickle.py
@@ -506,6 +506,20 @@ class Pickler:
self.memoize(obj)
dispatch[str8] = save_string
+ def save_bytes(self, obj):
+ # Like save_string
+ if self.bin:
+ n = len(obj)
+ if n < 256:
+ self.write(SHORT_BINSTRING + bytes([n]) + bytes(obj))
+ else:
+ self.write(BINSTRING + pack("<i", n) + bytes(obj))
+ else:
+ # Strip leading 'b'
+ self.write(STRING + bytes(repr(obj).lstrip("b")) + b'\n')
+ self.memoize(obj)
+ dispatch[bytes] = save_bytes
+
def save_unicode(self, obj, pack=struct.pack):
if self.bin:
encoded = obj.encode('utf-8')
@@ -931,12 +945,12 @@ class Unpickler:
break
else:
raise ValueError, "insecure string pickle"
- self.append(str8(codecs.escape_decode(rep)[0]))
+ self.append(bytes(codecs.escape_decode(rep)[0]))
dispatch[STRING[0]] = load_string
def load_binstring(self):
len = mloads(b'i' + self.read(4))
- self.append(str8(self.read(len)))
+ self.append(self.read(len))
dispatch[BINSTRING[0]] = load_binstring
def load_unicode(self):
@@ -950,7 +964,7 @@ class Unpickler:
def load_short_binstring(self):
len = ord(self.read(1))
- self.append(str8(self.read(len)))
+ self.append(self.read(len))
dispatch[SHORT_BINSTRING[0]] = load_short_binstring
def load_tuple(self):
diff --git a/Lib/test/test_datetime.py b/Lib/test/test_datetime.py
index ac6d130..cf7051b 100644
--- a/Lib/test/test_datetime.py
+++ b/Lib/test/test_datetime.py
@@ -1097,8 +1097,7 @@ class TestDate(HarmlessMixedComparison, unittest.TestCase):
# This shouldn't blow up because of the month byte alone. If
# the implementation changes to do more-careful checking, it may
# blow up because other fields are insane.
- # XXX Maybe this will have to become bytes?
- self.theclass(str8(base[:2] + chr(ord_byte) + base[3:]))
+ self.theclass(bytes(base[:2] + chr(ord_byte) + base[3:]))
#############################################################################
# datetime tests
Use H5FD_get_eoa instead of H5FD_get_eof to check for reading off the end of the allocated file space. Using H5FD_get_eof was causing the Stream VFD to fail. Solution: Switched from using H5FD_get_eof to H5FD_get_eoa Platforms tested: FreeBSD 4.1.1 (hawkwind)