.. _changelog: Changelog ========= Release Notifications --------------------- `Follow bidict on VersionEye `_ to automatically be notified via email when a new version of bidict is released. 0.12.0 (2016-07-03) ------------------- - New/renamed exceptions: - :class:`KeyDuplicationError ` - :class:`ValueDuplicationError ` - :class:`KeyAndValueDuplicationError ` - :class:`DuplicationError ` (base class for the above) - :func:`put() ` now accepts ``on_dup_key``, ``on_dup_val``, and ``on_dup_kv`` keyword args which allow you to override the default behavior when the key or value of a given item duplicates that (those) of any existing item(s). These can take the following values: - :attr:`bidict.DuplicationBehavior.RAISE` - :attr:`bidict.DuplicationBehavior.OVERWRITE` - :attr:`bidict.DuplicationBehavior.IGNORE` ``on_dup_kv`` can also take :attr:`bidict.DuplicationBehavior.ON_DUP_VAL`. If not provided, :func:`put() ` uses :attr:`RAISE ` behavior by default. - New :func:`putall() ` method provides a bulk :func:`put() ` API, allowing you to override the default duplication handling behavior that :func:`update() ` uses. - :func:`bidict.update() ` now fails clean, so if an :func:`update() ` call raises a :class:`DuplicationError `, you can now be sure that none of the given items was inserted. Previously, all of the given items that were processed before the one causing the failure would have been inserted, and no facility was provided to recover which items were inserted and which weren't, nor to revert any changes made by the failed :func:`update() ` call. The new behavior makes it easier to reason about and control the effects of failed :func:`update() ` calls. The new :func:`putall() ` method also fails clean. Internally, this is implemented by storing a log of changes made while an update is being processed, and rolling back the changes when one of them is found to cause an error. This required reimplementing :class:`orderedbidict ` on top of two dicts and a linked list, rather than two OrderedDicts, since :class:`OrderedDict ` does not expose its underlying linked list. - :func:`orderedbidict.move_to_end() ` now works on Python < 3.2 as a result of the new :class:`orderedbidict ` implementation. - Add - :func:`bidict.compat.viewkeys` - :func:`bidict.compat.viewvalues` - :func:`bidict.compat.iterkeys` - :func:`bidict.compat.itervalues` - :func:`bidict.compat.izip` - :func:`bidict.compat.izip_longest` to complement the existing :func:`iteritems() ` and :func:`viewitems() ` compatibility helpers. - More efficient implementations of :func:`pairs() `, :func:`inverted() `, and :func:`bidict.copy() `. - Implement :func:`bidict.__copy__() ` for use with the :mod:`copy` module. - Fix issue preventing a client class from inheriting from :class:`loosebidict ` (see `#34 `_). - Add benchmarking to tests. - Drop official support for CPython 3.3. (It may continue to work, but is no longer being tested.) Breaking API Changes ^^^^^^^^^^^^^^^^^^^^ - Rename ``KeyExistsException`` to :class:`KeyDuplicationError ` and ``ValueExistsException`` to :class:`ValueDuplicationError `. - When overwriting the key of an existing value in an :class:`orderedbidict `, the position of the existing item is now preserved, overwriting the key of the existing item in place, rather than moving the item to the end. This now matches the behavior of overwriting the value of an existing key, which has always preserved the position of the existing item. (If inserting an item whose key duplicates that of one existing item and whose value duplicates that of another, the existing item whose value is duplicated is still dropped, and the existing item whose key is duplicated still gets its value overwritten in place, as before.) For example:: >>> from bidict import orderedbidict >>> o = orderedbidict([(0, 1), (2, 3)]) >>> o.forceput(4, 1) previously would have resulted in:: >>> o # doctest: +SKIP orderedbidict([(2, 3), (4, 1)]) but now results in:: >>> o orderedbidict([(4, 1), (2, 3)]) 0.11.0 (2016-02-05) ------------------- - Add :class:`bidict.orderedbidict`, :class:`bidict.looseorderedbidict`, and :class:`bidict.frozenorderedbidict`. - Add :doc:`Code of Conduct ` (`<./CODE_OF_CONDUCT.rst>`_ | ``_). - Drop official support for pypy3. (It still may work but is no longer being tested. Support may be added back once pypy3 has made more progress.) 0.10.0.post1 (2015-12-23) ------------------------- - Minor documentation fixes and improvements. 0.10.0 (2015-12-23) ------------------- - Remove several features in favor of keeping the API simpler and the code more maintainable. - In the interest of protecting data safety more proactively, by default bidict now raises an error on attempting to insert a non-unique value, rather than allowing its associated key to be silently overwritten. See discussion in `#21 `_. - New :attr:`forceupdate() ` method provides a bulk :attr:`forceput() ` operation. - Fix bugs in :attr:`pop() ` and :attr:`setdefault() ` which could leave a bidict in an inconsistent state. Breaking API Changes ^^^^^^^^^^^^^^^^^^^^ - Remove ``bidict.__invert__``, and with it, support for the ``~b`` syntax. Use :attr:`b.inv ` instead. `#19 `_ - Remove support for the slice syntax. Use ``b.inv[val]`` rather than ``b[:val]``. `#19 `_ - Remove ``bidict.invert``. Use :attr:`b.inv ` rather than inverting a bidict in place. `#20 `_ - Raise ``ValueExistsException`` when attempting to insert a mapping with a non-unique key. `#21 `_ - Rename ``collapsingbidict`` to :class:`loosebidict ` now that it suppresses ``ValueExistsException`` rather than the less general ``CollapseException``. `#21 `_ - ``CollapseException`` has been subsumed by ``ValueExistsException``. `#21 `_ - :attr:`put ` now raises ``KeyExistsException`` when attempting to insert an already-existing key, and ``ValueExistsException`` when attempting to insert an already-existing value. 0.9.0.post1 (2015-06-06) ------------------------ - Fix metadata missing in the 0.9.0rc0 release. 0.9.0rc0 (2015-05-30) --------------------- - Add a Changelog! Also a `Contributors' Guide `_, `Gitter chat room `_, and other community-oriented improvements. - Adopt Pytest (thanks Tom Viner and Adopt Pytest Month). - Added property-based tests via `hypothesis `_. - Other code, tests, and docs improvements. Breaking API Changes ^^^^^^^^^^^^^^^^^^^^ - Move ``bidict.iteritems`` and ``bidict.viewitems`` to new :mod:`bidict.compat` module. - Move :class:`bidict.inverted` to new :attr:`bidict.util` module (still available from top-level :mod:`bidict` module as well). - Move ``bidict.fancy_iteritems`` to :func:`bidict.util.pairs` (also available from top level as :func:`bidict.pairs`). - Rename ``bidict_type`` keyword arg to ``base_type`` in :func:`bidict.namedbidict`.