Skip to content

Conversation

gthank
Copy link

@gthank gthank commented Jan 16, 2018

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 HashableDict implementation 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.

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.
@Ryanb58 Ryanb58 requested a review from btimby January 16, 2018 18:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant