-
-
Notifications
You must be signed in to change notification settings - Fork 33.1k
gh-137829: Fix shelve tests for backend compatibility #137879
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from 6 commits
306e43d
79e335e
5b9f61b
2e3ea9b
e1b0584
f0af214
e64777b
c683173
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -173,6 +173,8 @@ def test_custom_serializer_and_deserializer(self): | |
def serializer(obj, protocol): | ||
if isinstance(obj, (bytes, bytearray, str)): | ||
if protocol == 5: | ||
if isinstance(obj, bytearray): | ||
return bytes(obj) # DBM backends expect bytes | ||
return obj | ||
return type(obj).__name__ | ||
elif isinstance(obj, array.array): | ||
|
@@ -222,22 +224,44 @@ def deserializer(data): | |
s["array_data"], array_data.tobytes().decode() | ||
) | ||
|
||
def test_custom_incomplete_serializer_and_deserializer(self): | ||
dbm_sqlite3 = import_helper.import_module("dbm.sqlite3") | ||
def test_custom_incomplete_serializer(self): | ||
os.mkdir(self.dirname) | ||
self.addCleanup(os_helper.rmtree, self.dirname) | ||
|
||
with self.assertRaises(dbm_sqlite3.error): | ||
def serializer(obj, protocol=None): | ||
pass | ||
def serializer(obj, protocol=None): | ||
pass | ||
|
||
def deserializer(data): | ||
return data.decode("utf-8") | ||
def deserializer(data): | ||
return data.decode("utf-8") | ||
|
||
# Since the serializer returns None, dbm.error is raised | ||
# by dbm.sqlite3 and TypeError is raised by other backends. | ||
with self.assertRaises((TypeError, dbm.error)): | ||
picnixz marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
with shelve.open(self.fn, serializer=serializer, | ||
deserializer=deserializer) as s: | ||
s["foo"] = "bar" | ||
|
||
def test_custom_invalid_serializer(self): | ||
os.mkdir(self.dirname) | ||
self.addCleanup(os_helper.rmtree, self.dirname) | ||
|
||
def serializer(obj, protocol=None): | ||
return ["value with invalid type"] | ||
|
||
|
||
def deserializer(data): | ||
return data.decode("utf-8") | ||
|
||
# Since the serializer returns None, dbm.error is raised | ||
# by dbm.sqlite3 and TypeError is raised by other backends. | ||
with self.assertRaises((TypeError, dbm.error)): | ||
picnixz marked this conversation as resolved.
Show resolved
Hide resolved
|
||
with shelve.open(self.fn, serializer=serializer, | ||
deserializer=deserializer) as s: | ||
s["foo"] = "bar" | ||
|
||
def test_custom_incomplete_deserializer(self): | ||
os.mkdir(self.dirname) | ||
self.addCleanup(os_helper.rmtree, self.dirname) | ||
|
||
def serializer(obj, protocol=None): | ||
return type(obj).__name__.encode("utf-8") | ||
|
||
|
@@ -352,7 +376,7 @@ def type_name_len(obj): | |
self.assertEqual(s["bytearray_data"], "bytearray") | ||
self.assertEqual(s["array_data"], "array") | ||
|
||
def test_custom_incomplete_serializer_and_deserializer_bsd_db_shelf(self): | ||
def test_custom_incomplete_deserializer_bsd_db_shelf(self): | ||
berkeleydb = import_helper.import_module("berkeleydb") | ||
os.mkdir(self.dirname) | ||
self.addCleanup(os_helper.rmtree, self.dirname) | ||
|
@@ -370,6 +394,11 @@ def deserializer(data): | |
self.assertIsNone(s["foo"]) | ||
self.assertNotEqual(s["foo"], "bar") | ||
|
||
def test_custom_incomplete_serializer_bsd_db_shelf(self): | ||
berkeleydb = import_helper.import_module("berkeleydb") | ||
os.mkdir(self.dirname) | ||
self.addCleanup(os_helper.rmtree, self.dirname) | ||
|
||
def serializer(obj, protocol=None): | ||
pass | ||
|
||
|
Uh oh!
There was an error while loading. Please reload this page.