Open
Conversation
The new implementation is a little more robust, and hopefully gets
around the issue caused by modern SQLAlchemy releases ('method' object
is not iterable).
BEFORE: We were using Alex Martelli's excellent implementation from StackOverflow. Unfortunately, this falls down when attempting to create a ``HashableDict`` with keys that aren't sortable. We had addressed this once before, but in a not-very-clean fashion, and the switch to the new implementation lost it. AFTER: We have a more robust implementation. Rather than attempting to sort the dictionary after the fact, we extend ``collections.OrderedDict`` to ensure that it iterates in the same order; we were only sorting to ensure our comparisons were consistent, and ``OrderedDict`` gives us that without breaking in the case of non-comparable types as keys in the same ``dict``. Further, we are once again turnng the ``dict`` values into ``tuple``s where required (for instance, because ``list`` values will break ``hash``). HOWEVER, in contrast to our earlier ``tuple``-izing implementation, we do *NOT* exclude non-iterable values from our hash and/or equality comparisons.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
SQLAlchemy went 1.0 a while back, and being tied to pre-1.0 makes this harder to use. I've got projects that depend on 1.0 or better that also need this lib, so the transitive dependency conflict is problematic.
As a side-effect of the version bump on SQLAlchemy, the
HashableDictimplementation was throwing an error, so I also had to revisit it. Happily, I think the new implementation is more robust.I also bumped the version number, so it would be easy to cut a new release for PyPI.