Author: guido.van.rossum
Date: Wed Oct 10 20:00:50 2007
New Revision: 58407
Modified:
python/branches/py3k/Lib/pickle.py
Log:
Random changes having to do with readline() and bytes.
Modified: python/branches/py3k/Lib/pickle.py
==============================================================================
--- python/branches/py3k/Lib/pickle.py (original)
+++ python/branches/py3k/Lib/pickle.py Wed Oct 10 20:00:50 2007
@@ -778,31 +778,17 @@
The protocol version of the pickle is detected automatically, so no
proto argument is needed.
- The file-like object must have two methods, a read() method that
- takes an integer argument, and a readline() method that requires no
- arguments. Both methods should return a string. Thus file-like
- object can be a file object opened for reading, a StringIO object,
- or any other custom object that meets this interface.
+ The file-like object must have two methods, a read() method
+ that takes an integer argument, and a readline() method that
+ requires no arguments. Both methods should return bytes.
+ Thus file-like object can be a binary file object opened for
+ reading, a BytesIO object, or any other custom object that
+ meets this interface.
"""
- try:
- self.readline = file.readline
- except AttributeError:
- self.file = file
+ self.readline = file.readline
self.read = file.read
self.memo = {}
- def readline(self):
- # XXX Slow but at least correct
- b = bytes()
- while True:
- c = self.file.read(1)
- if not c:
- break
- b += c
- if c == b'\n':
- break
- return b
-
def load(self):
"""Read a pickled object representation from the open file.
@@ -895,7 +881,8 @@
dispatch[BININT2[0]] = load_binint2
def load_long(self):
- self.append(int(str(self.readline()[:-1]), 0))
+ val = self.readline()[:-1].decode("ascii")
+ self.append(int(val, 0))
dispatch[LONG[0]] = load_long
def load_long1(self):
@@ -1076,8 +1063,10 @@
def find_class(self, module, name):
# Subclasses may override this
- module = str(module)
- name = str(name)
+ if isinstance(module, bytes):
+ module = module.decode("utf-8")
+ if isinstance(name, bytes):
+ name = name.decode("utf-8")
__import__(module)
mod = sys.modules[module]
klass = getattr(mod, name)
@@ -1110,7 +1099,7 @@
dispatch[DUP[0]] = load_dup
def load_get(self):
- self.append(self.memo[str8(self.readline())[:-1]])
+ self.append(self.memo[str(self.readline())[:-1]])
dispatch[GET[0]] = load_get
def load_binget(self):
_______________________________________________
Python-3000-checkins mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-3000-checkins