[Python-3000] bsddb ownership, buffer protocol and 3.0

Jesus Cea jcea at jcea.es
Sat Jul 19 10:00:12 CEST 2008

Hash: SHA1

I'm actively working porting current bsddb code to python 3.0. The work
is going fine. Current code compiles in both Python 2.[3-6] and 3.0. I
have some issues with module initialization:

[jcea at tesalia bsddb3]$ python3.0
Python 3.0b2 (r30b2:65080, Jul 19 2008, 03:39:09)
[GCC 4.2.3] on sunos5
Type "help", "copyright", "credits" or "license" for more information.
|>> import _pybsddb
Traceback (most recent call last):
~  File "<string>", line 1, in <module>
ImportError: __build_class__ not found
Fatal Python error: can't initialize module _bsddb
Abort (core dumped)

Help welcomed :).

I was going to commit current (in flux) bsddb code, hoping you were able
to help me with this error, but I see a lot of work there. The 3.0 bsddb
branch has evolved at its own, without porting a huge number of patches
available in bsddb code in 2.6. The new code has grown buffer protocol,
for example, but it is based in an old codebase.

My intention as maintainer of pybsddb is to keep an unified sourcecode
for Python 2.x y 3.x branches. The C sourcecode should be a single file
(with some ugly conditional compilations, I know), and Python code would
be maintained as 2.x and ported to 3.x automagically via 2to3. At least
for the time being.

Current bsddb code in 3.0 branch has new features like buffers, but it
is based in an old bsddb codebase.

What can we do?.

I've picked some selected patches from 3.0 code fork, bit I rather
prefer to delay the buffer protocol until having a functional library
for 3.0.

Anybody is able to compile current bsddb in 3.0 svn?. May I overwrite
current version with my own one, updated with your patches (except the
buffer code; I rather prefer to delay that)?.

This lib is huge and fairly complex for a binding. The testsuite has
more than 300 testcases, and growing. Keeping an unified codebase (for
python 2.x and 3.0) seems to be the only way to garantee quality and
avoid divergence. I'm asking for module ownership, to be able to meet
3.0 deadline with an stable and complete product. For example, current
3.0 code has no replication or distributed transactions support, while
2.6 has.

So I'm asking your permission to:

1. Take your (valuable) current patches in 3.0.

2. Replace current code with my own one + your patches. The Buffer
protocol will be out at this time. It will be evaluated when the binding
is ready for 3.0. Time constrains and my aim to keep an unified codebase
precludes its inclusion, *for now*. This will change in the future, of

3. The canonical sourcecode would be the 2.6 version. The C code in 3.0
should be identical. The Python code in 3.0 would be a direct
translation via 2to3. So, patches should go to 2.6. I will keep 2.6 and
3.0 in sync.

I acknowledge that some people would like to remove bsddb from the
standard lib, arguing it is a maintenance nightmare. I consider, then,
that the right thing to do would be to (fully) delegate this code to me,
a guy motivated, with deep knowledge on this technology and that uses
this code everyday. You will be relieved of maintain it, while keeping
this extremely powerful tool in the stdlib.

Any linux distro includes Berkeley DB. With this lib in Python, everyone
has a powerful ACID+replication+distributed transaction system scalable
to petabytes without any extra download&install. That fact is very
valuable. Do not drop this advantage!.

Thanks for your confidence.

PS: I need help with the "ImportError: __build_class__ not found" thing.
You can look at the code at svn://svn.argo.es/jcea/pybsddb/trunk/Modules
, revision 523. This code compiles under Python 2.[3-6] and 3.0. Under
2.6 it pases all the 303 tests. On 3.0 it compiles, but fails to import,
with the given error. Any idea?.

- --
Jesus Cea Avion                         _/_/      _/_/_/        _/_/_/
jcea at jcea.es - http://www.jcea.es/     _/_/    _/_/  _/_/    _/_/  _/_/
jabber / xmpp:jcea at jabber.org         _/_/    _/_/          _/_/_/_/_/
.                              _/_/  _/_/    _/_/          _/_/  _/_/
"Things are not so easy"      _/_/  _/_/    _/_/  _/_/    _/_/  _/_/
"My name is Dump, Core Dump"   _/_/_/        _/_/_/      _/_/  _/_/
"El amor es poner tu felicidad en la felicidad de otro" - Leibniz
Version: GnuPG v1.4.8 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org


More information about the Python-3000 mailing list