python-frozendict: Frozendict is broken on Python 3.8, warns on 3.7

Closing because this repo is abandoned in favor of https://github.com/Marco-Sulla/python-frozendict


Hi! FYI, the following line is emitting deprecation warnings, and will break on Python 3.8:

https://github.com/slezica/python-frozendict/blob/c5d16bafcca7b72ff3e8f40d3a9081e4c9233f1b/frozendict/__init__.py#L16

That’s because all of the abstract base classes have been moved from collections in Python 2, to collections.abc in Python 3. The warning was added in python/cpython#5460. Could you try to import from collections.abc and fall back to the existing style?

About this issue

  • Original URL
  • State: closed
  • Created 5 years ago
  • Reactions: 2
  • Comments: 25 (3 by maintainers)

Commits related to this issue

Most upvoted comments

EDIT new repo is here: https://github.com/Marco-Sulla/python-frozendict/

OLD ANSWER:

If you are interested, I reimplemented frozendict starting from forking the @slezica 's code. I asked Lezica to became co-admin of Pypi project and he consented, but since we are both very busy we have to do it yet… 😛

Major differences:

  1. Compatible with Python 3.6+ (tested also on Python 3.9)
  2. + and - operands are supported. + with a dict-like creates a new frozendict merged with the other object. - creates a new frozendict without the keys included in the second operand, that can be any iterable. Addition of the operator + (or |) is also in an official PEP for dict, that seems to be very popular.
  3. repr() returns an eval-friendly string. Use it with caution 😄
  4. Added a unit test (requires pytest) and a benchmark script
  5. a __version__ variable is in the frozendict module
  6. All the dict immutable API is supported, fromkeys() included
  7. pickle is supported (don’t know if it was already supported before)
  8. copy() and frozendict(another_frozendict) does not create another object, but returns the same instance. This is the same behaviour of all CPython immutables.
  9. you can’t call __init__ again after the object is instantiated
  10. monkey-patching is disabled and attributes and methods are read-only (in teory…)

PS: I’m working also to a CPython version of frozendict. I had only to support pickle, but now I’m very busy. I hope it will be accepted by CPython devs.

If anyone is interested, I released a fork on PyPI which supports Python 3.8 : https://pypi.org/project/immutabledict

@slezica Hi Santiago! Thank you very much for this project!

As you see, the code won’t work on Python 3.9 (they actually delayed it from 3.8). This project is widely used (163k downloads last month according to https://pypistats.org/packages/frozendict!) and it would be a shame for it to have to be removed or replaced in projects.

I understand if you’ve moved on and have other interests. Please would you consider giving merge and PyPI rights to another maintainer?

I’d suggest @corenting if they’re willing, who took initiative to make a fork, and perhaps @ppolewicz, @lurch and @eugene-eeo who were pinged for review in #15, and @mskoenz volunteered above. It’s always sensible to have more than one maintainer, to reduce the bus factor and burden. I would be happy to help with some of the maintenance tasks too to help get a new release out.

Additionally to consider, a transfer to https://jazzband.co, which provides additional maintainer backup.

What do you think?

Again, thank you for this project!

Version 2.0.2 released. Unluckily, Pypi supports only manylinux builds, so there’s only the pure py version for now. For any problems, please write here: https://github.com/Marco-Sulla/python-frozendict/issues/new/choose

Looks like the PyPI transfer has happened!

Well, the problem is @slezica wrote me some days ago, and I missed the mail 😛 So I responded to him yesterday. And yes, I think that’s no problem for me and Lezica to accept maintainers.

Hi! First, thx for the great python module 😃

Is it possible to get PR (#23) and subsequent update on pip? Would really help, especially for those that treat warning as errors in testing pipelines. If the author is no longer interested in maintaining the project, I’m happy to help out, dm me!

Cheers, m

There’s a PR for this (#23) but I’m worried that the owner has more-or-less abandoned this project.

I’ve also emailed Santiago the above in case he doesn’t get notifications here.

Yeah like @mskoenz I can help maintain the project and put the changes from my fork back into the repository if necessary.

@Zac-HD Could you please add the link to your first post?

Now that @Marco-Sulla has taken over the PyPI project (congrats!), perhaps @slezica could update his README.rst to mention that this repo is now deprecated, and pointing people at the new repo instead? 🙂

Well, finally 😃 Now I’m a bit busy, in the weekend I’ll release v2.0.1: https://github.com/Marco-Sulla/python-frozendict/releases/tag/v2.0.1

@Marco-Sulla Cool, as long as your new version (which sounds pretty good) is explicitly not a drop-in replacement for @slezica 's frozendict, then I agree it doesn’t make sense to add Python2 support to your new version 👍