classification
Title: [py3k] Fix dumbdbm, which fixes test_shelve (for me); instrument other tests so we catch this sooner (and more directly)
Type: crash Stage:
Components: Library (Lib) Versions: Python 3.0
process
Status: closed Resolution: accepted
Dependencies: Superseder:
Assigned To: gregory.p.smith Nosy List: gregory.p.smith, larry
Priority: normal Keywords: patch

Created on 2007-08-24 00:48 by larry, last changed 2007-09-02 20:02 by loewis. This issue is now closed.

Files
File name Uploaded Description Edit
lch.py3k.dumbdb.contains.diff.1.txt larry, 2007-08-24 00:48
Messages (4)
msg55233 - (view) Author: Larry Hastings (larry) * (Python committer) Date: 2007-08-24 00:48
THIS PATCH IS FOR PYTHON 3000.  (There's currently no Python 3000 entry
in the "Versions" list.)

As of revision 57341 (only a couple hours old as of this writing),
test_shelve was failing on my machine.  This was because I didn't have
any swell databases available, so anydbm was falling back to dumbdbm,
and dumbdbm had a bug.  In Py3k, dumbdbm's dict-like interface now
requires byte objects, which it internally encodes to "latin-1" then
uses with a real dict.  But dumbdbm.__contains__ was missing the
conversion, so it was trying to use a bytes object with a real dict, and
that failed with an error (as bytes objects are not hashable).  This
patch fixes dumbdbm.__contains__ so it encodes the key, fixing
test_shelve on my machine.

But there's more!  Neil Norvitz pointed out that test_shelve didn't fail
on his machine.  That's because dumbdbm is the last resort of anydbm,
and he had a superior database module available.  So the regression test
suite was really missing two things:

    * test_dumbdbm should test dumbdbm.__contains__.
    * test_anydbm should test all the database modules available, not
merely its first choice.

So this patch also adds test_write_contains() to test_dumbdbm, and a new
external function to test_anydbm: dbm_iterate(), which returns an
iterator over all database modules available to anydbm, and internally
forces anydbm to use that database module, restoring anydbm to its first
choice when it finishes iteration.  I also renamed _delete_files() to
delete_files() so it could be the canonical dbm cleanup function for
other tests.

While I was at it, I noticed that test_whichdbm.py did a good job of
testing all the databases available, but with a slightly odd approach:
it iterated over all the possible databases, and created new test
methods--inserting them into the class object--for each one that was
available.  I changed it to use dbm_iterate() and delete_files() from
test.test_anydbm, so that that logic can live in only one place.  I
didn't preserve the setattr() approach; I simply iterate over all the
modules and run the tests inside one conventional method.
msg55234 - (view) Author: Larry Hastings (larry) * (Python committer) Date: 2007-08-24 00:56
Whoops, copy & paste error on the title, there.
msg55276 - (view) Author: Gregory P. Smith (gregory.p.smith) * (Python committer) Date: 2007-08-24 22:00
looks like someone already committed the one liner dumbdbm latin-1 fix.
 But the meat of this patch is the unit test improvements.

I had to fix test_whichdb to exclude dumbdbm as that has no file for
whichdb to test.

committed to py3k as r57419
msg55277 - (view) Author: Larry Hastings (larry) * (Python committer) Date: 2007-08-24 22:06
Yeah, Neil Norwitz added the one-line dumbdbm fix in r57358.

Thanks!
History
Date User Action Args
2007-09-02 20:02:27loewissetkeywords: + patch
2007-08-24 22:06:52larryhastingssetmessages: + msg55277
2007-08-24 22:00:11gregory.p.smithsetstatus: open -> closed
resolution: accepted
messages: + msg55276
nosy: + gregory.p.smith
2007-08-24 16:22:05collinwintersetversions: + Python 3.0, - Python 2.6
2007-08-24 01:01:15gregory.p.smithsetassignee: gregory.p.smith
2007-08-24 00:58:46gpssettitle: Fix dumbdbm, which fixes test_shelve (for me); instrument other tests so we catch this sooner (and more directly) -> [py3k] Fix dumbdbm, which fixes test_shelve (for me); instrument other tests so we catch this sooner (and more directly)
2007-08-24 00:56:10larryhastingssetmessages: + msg55234
title: ix dumbdbm, which fixes test_shelve (for me); instrument other tests so we catch this sooner (and more directly) -> Fix dumbdbm, which fixes test_shelve (for me); instrument other tests so we catch this sooner (and more directly)
2007-08-24 00:48:54larryhastingscreate