Re: Migrating to BTrees 4.x
"David Glick (Glick Software)" <[email protected]>
| Newsgroups | gmane.comp.web.zope.zodb |
|---|---|
| Message-ID | <[email protected]> |
On 11/27/16 9:43 AM, Jim Fulton wrote: > > > On Sat, Nov 26, 2016 at 8:55 PM, David Glick <[email protected] > <mailto:[email protected]>> wrote: > > On 11/20/16 9:31 AM, Jim Fulton wrote: >> >> >> On Sun, Nov 20, 2016 at 12:11 PM, Jason Madden >> <[email protected] >> <mailto:[email protected]>> wrote: >> >> >> > On Nov 20, 2016, at 10:25, Jim Fulton <[email protected] >> <mailto:[email protected]>> wrote: >> > >> >> But it seems safe to say there are at least some >> discrepancies and some clear bugs in the handling of >> unorderable objects still. >> > >> > Yup. Partly I suspect this is the related to the many ways >> one can express comparison in Python. (Talk about more than >> one way to do it.) >> > >> > I think this may also be related to inserting into an empty >> BTree, where there's noting to compare the new item to and >> thus no opportunity to fail. Perhaps, if we're paranoid, we >> should compare the first item to itself on insert. >> >> You're right, under Python 3, this only happens in an empty >> tree. Once there are other items, you get "TypeError: >> unorderable types: Bad() < ..." errors. Under Python 2, of >> course, no such luck. >> >> > In any case, I think the focus for this seat belt should be >> on insertion. >> >> I've opened a series of issues in the repository >> (https://github.com/zopefoundation/BTrees/issues >> <https://github.com/zopefoundation/BTrees/issues>) that I >> think capture the discussion here. >> >> >> Thanks. >> >> I may be able to come up with some PRs over the next week for >> them. >> >> >> It looks like David was going to try a fix. David, did this >> discussion help? > > I finally had time to look at this again today. I've got a branch > (check-obj-cmp-on-insert-only) that makes the CPython > implementation only do the check on insertion so it's more like > the Python implementation. However, trying to delete None as a key > still raises "TypeError: unorderable types: NoneType() < > NoneType()" in Python 3 (both implementations; we weren't testing > the pure-Python implementation on Python 3 except for PyPy3). This > is presumably Python itself complaining when trying to search for > the bucket. I suppose the workaround is: for the search during > delete only, if the keys use default comparison, compare them > using a function that mimics Python 2 comparison and thus skips > the check for unorderable types. Gaaa... > > > Well > > a) We don't have a way to use databases created in Python 2 in Python > 3 (do we?). > > b) It's impossible to insert None as a key in Python 3. > > If a & b, then this seems to be a non-issue and the tests should be > Python version dependent. > I was thinking the same thing, and I've opened a pull request: https://github.com/zopefoundation/BTrees/pull/54 There is a tool to help with converting databases from Python 2 to Python 3: https://pythonhosted.org/zodb.py3migrate/ which was created at a sprint in Germany last year. It presumably could be enhanced to find and warn about unorderable keys. -- You received this message because you are subscribed to the Google Groups "zodb" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.