Re: Migrating to BTrees 4.x
Jim Fulton <[email protected]>
| Newsgroups | gmane.comp.web.zope.zodb |
|---|---|
| Message-ID | <CAPDm-FhEcTvECVgkPgNh9YgfqBGx+w0JtKZ42rBPv5D6O_5Arg@mail.gmail.com> |
On Sat, Nov 26, 2016 at 8:55 PM, David Glick <[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]> wrote: > >> >> > On Nov 20, 2016, at 10:25, Jim Fulton <[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) 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. Jim -- Jim Fulton http://jimfulton.info -- 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.