From d24fffe7c67c2097aa33e04498dc6b3ae0cc17ab Mon Sep 17 00:00:00 2001 From: Brett Cannon Date: Thu, 26 Jul 2007 03:07:02 +0000 Subject: Move shelve over to BytesIO as pickle.(Pickler | Unpickler) expect binary files, not text files. test_shelve still fails thanks to bsddb not having been fixed. --- Lib/shelve.py | 16 ++++++++-------- Lib/test/test_anydbm.py | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Lib/shelve.py b/Lib/shelve.py index 5aa8263..5759d4e 100644 --- a/Lib/shelve.py +++ b/Lib/shelve.py @@ -57,7 +57,7 @@ the persistent dictionary on disk, if feasible). """ from pickle import Pickler, Unpickler -from io import StringIO +from io import BytesIO import UserDict import warnings @@ -97,7 +97,7 @@ class Shelf(UserDict.DictMixin): try: value = self.cache[key] except KeyError: - f = StringIO(self.dict[key]) + f = BytesIO(self.dict[key]) value = Unpickler(f).load() if self.writeback: self.cache[key] = value @@ -106,7 +106,7 @@ class Shelf(UserDict.DictMixin): def __setitem__(self, key, value): if self.writeback: self.cache[key] = value - f = StringIO() + f = BytesIO() p = Pickler(f, self._protocol) p.dump(value) self.dict[key] = f.getvalue() @@ -161,27 +161,27 @@ class BsdDbShelf(Shelf): def set_location(self, key): (key, value) = self.dict.set_location(key) - f = StringIO(value) + f = BytesIO(value) return (key, Unpickler(f).load()) def next(self): (key, value) = next(self.dict) - f = StringIO(value) + f = BytesIO(value) return (key, Unpickler(f).load()) def previous(self): (key, value) = self.dict.previous() - f = StringIO(value) + f = BytesIO(value) return (key, Unpickler(f).load()) def first(self): (key, value) = self.dict.first() - f = StringIO(value) + f = BytesIO(value) return (key, Unpickler(f).load()) def last(self): (key, value) = self.dict.last() - f = StringIO(value) + f = BytesIO(value) return (key, Unpickler(f).load()) diff --git a/Lib/test/test_anydbm.py b/Lib/test/test_anydbm.py index f5eae42..b396d6f 100644 --- a/Lib/test/test_anydbm.py +++ b/Lib/test/test_anydbm.py @@ -21,13 +21,13 @@ def _delete_files(): pass class AnyDBMTestCase(unittest.TestCase): - _dict = {'0': b'', - 'a': b'Python:', - 'b': b'Programming', - 'c': b'the', - 'd': b'way', - 'f': b'Guido', - 'g': b'intended', + _dict = {str8('0'): b'', + str8('a'): b'Python:', + str8('b'): b'Programming', + str8('c'): b'the', + str8('d'): b'way', + str8('f'): b'Guido', + str8('g'): b'intended', } def __init__(self, *args): @@ -44,7 +44,7 @@ class AnyDBMTestCase(unittest.TestCase): def test_anydbm_modification(self): self.init_db() f = anydbm.open(_fname, 'c') - self._dict['g'] = f['g'] = b"indented" + self._dict[str8('g')] = f[str8('g')] = b"indented" self.read_helper(f) f.close() -- cgit v0.12