boltons v19.0.0 Release Notes
Release Date: 2019-02-11 // about 5 years ago-
(February 10, 2019)
๐ A very big release indeed, perhaps the biggest yet. A big, big thank you to all the contributors!
- ๐ New types and utilities
- [dictutils.ManyToMany][dictutils.ManyToMany] arrives, to complement [dictutils.OneToOne][dictutils.OneToOne]
- [dictutils.FrozenDict][dictutils.FrozenDict] brings immutable mapping to a module near you (#105)
- [setutils.complement()][setutils.complement] introduces "negative" sets, useful for exclusion and many other set operations
- [iterutils.soft_sorted()][iterutils.soft_sorted] allows for looser, more flexible sorting of sequences
- [iterutils.flatten_iter()][iterutils.flatten_iter] and [iterutils.flatten()][iterutils.flatten], to collapse nested iterables. (#118)
- [mathutils.Bits][mathutils.Bits] type for representing a bitstring and translating between integer, bytestring, hex, and boolean sequence representations.
- funcutils improvements
- [FunctionBuilder][funcutils.FunctionBuilder] and [funcutils.wraps][funcutils.wraps] now support coroutines/async (#194)
- [FunctionBuilder.add_arg()][funcutils.FunctionBuilder.add_arg] allows the addition of arguments to the signature, to match [FunctionBuilder.remove_arg()][funcutils.FunctionBuilder.remove_arg] (#201)
- Similarly [funcutils.wraps()][funcutils.wraps] now takes an "expected" argument, to complement "injected" (#161)
- ๐ Other bugfixes and improvements
- [cacheutils.LRI][cacheutils.LRI] is now threadsafe and correctly evicts when duplicate keys are added (#155, #157)
- [dictutils.subdict()][dictutils.subdict] now does its best to return the same type of dictionary it was passed.
- [urlutils][urlutils] now has better IPv6 support and URL can be used more natively like a string
- Improve singularization in [strutils][strutils]
- Fix some deprecation warnings in Python 3.7 (#165, #196)
- Document the change in dict constructor behavior affecting [dictutils.OMD][dictutils.OMD] under Python 3.7+ (#179)
- ๐ New types and utilities