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)