One important fix and one small but handy string function.
- Fixed an [LRU][cacheutils.LRU] bug related to the 15.1.1
refactor. Also enhanced LRU testing with doubly-linked list
invariant enforcement.
- Added [strutils.indent][strutils.indent], the counterpart to
[textwrap.dedent](https://docs.python.org/2/library/textwrap.html#textwrap.dedent).
15.1.1
---
_(November 18, 2015)_
A lot of bugfixes and docfixes in 15.1.1.
updated AtomicSaver for better permissions handling, update
BufferedSocket message sending, beta version of iterutils.get_path,
several docs fixes, Stats zscore and cache bugfix, and an LRU refactor
with significantly improved behavior and code factoring.
- Updated [fileutils.AtomicSaver][fileutils.AtomicSaver] handling of
filesystem permissions to be simpler and more secure. This also
merges `dest_perms` and `part_perms` arguments to AtomicSaver and
atomic_save.
- Fix large message sending with [socketutils.BufferedSocket][socketutils.BufferedSocket]
- [strutils.iter_splitlines][strutils.iter_splitlines] is now in the docs.
- [cacheutils][cacheutils]: now imports RLock from the right place for python 2
- [statsutils][statsutils]: Only `delattr` when `hasattr` in
[Stats.clear_cache][statsutils.Stats.clear_cache]
- [statsutils.Stats][statsutils.Stats]: Add
[Stats.get_zscore][statsutils.Stats.get_zscore] to support
calculating the [z-score][zscore] (see also: t-statistic)
- [cacheutils.LRU][cacheutils.LRU]: Massive refactor of the backing
linked list for better handling of duplicate data in the
cache. More aggressive locking and better `__eq__`