_(August 29, 2018)_
A few bugfixes and a handy text utility.
- Add MultiSub for multiple string substitutions in a single call
([162][i162])
- `tableutils.Table.to_text()` is more Markdown compatible
- Add LICENSE to package ([164][i164])
- `atomic_save` works better with `overwrite=True` ([161][i161])
- Reduced memory footprint on `tbutils._DeferredLine` with `__slots__`
18.0.0
---
_(March 2, 2018)_
- Add `<thead>` and `<tbody>` structure to tableutils.Table HTML
output, which helps with styling and other functionality (e.g.,
jQuery datatables).
- Add [dictutils.subdict()][dictutils.subdict] to get a filtered version of a dictionary
based on a subset of keys. ([150][i150])
- Add beta version of cacheutils.MinIDMap.
17.2.0
---
_(December 16, 2017)_
A big release with a lot of features and bugfixes, big and small. Just
in time for the holidays!
- Better handling of `file` and `file`-like objects in [remap][iterutils.remap]'s `default_enter`
- Fix line-by-line iteration in [ioutils][ioutils] types
- Change [strutils.slugify][strutils.slugify] to always output at
least a single-character slug (in cases of
all-punctuation/whitespace inputs).
- Fix [DeferredValue][formatutils.DeferredValue] caching in [formatutils][formatutils]
- Add [OneToOne][dictutils.OneToOne] to [dictutils][dictutils]
- Add [MultiFileReader][ioutils.MultiFileReader] to [ioutils][ioutils] (see [135][i135])
- Support passing `dir` argument to [ioutils][ioutils] SpooledIO types
- fix default arguments for [mathutils.clamp][mathutils.clamp] (see [128][i128])
- Add [iterutils.research][iterutils.research], a
[remap][iterutils.remap]-based recursive search function for nested
data
- Improved and expanded [urlutils.SCHEME_PORT_MAP][urlutils.SCHEME_PORT_MAP]
- Simplify [urlutils.find_all_links][urlutils.find_all_links] signature
17.1.0
---
_(February 27, 2017)_
Add urlutils module, with URL type and find_all_links function. also
update Sentinel for Python 3 falsiness
- Add urlutils module, complete with RFC3986-compliant `URL` type
- Also add `urlutils.find_all_links` function, which heuristically
finds all links in plaintext, and creates URLs out of them.
- Update typeutils.Sentinel to be appropriately falsy on Python 3
17.0.0
---
_(January 24, 2017)_
Several tweaks and enhancements to ring in the new year.
- [tbutils][tbutils] objects like the
[ExceptionInfo][tbutils.ExceptionInfo] are now more easily
JSON-serializable thanks to a tweak to [Callpoint][tbutils.Callpoint].
- SpooledIO objects like
[ioutils.SpooledBytesIO][ioutils.SpooledBytesIO] are now
`bool`-able.
- [iterutils.bucketize][iterutils.bucketize] gains the
`value_transform` and `key_filter` arguments.
- [cachedproperty][cacheutils.cachedproperty] properly maintains
docstring
- [funcutils.wraps][funcutils.wraps] maintains a reference to the
wrapped function with `__wrapped__` attribute.
- A bit of cleanup to be backwards compatible to Python 3.3
16.5.1
---
_(November 6, 2016)_
Mostly bug fixes and various tweaks, optimizations, and
documentation. Also added a bit of functionality in the form of
[ioutils][ioutils] and some GUID stuff.
- Add [ioutils][ioutils] with
[SpooledStringIO][ioutils.SpooledStringIO] and
[SpooledBytesIO][ioutils.SpooledBytesIO], two in-memory file-like
objects, like the stdlib [StringIO][StringIO], except that they
automatically spill over to disk when they reach a configurable
size.
- Add [iterutils.GUIDerator][iterutils.GUIDerator] and
[iterutils.SequentialGUIDerator][iterutils.SequentialGUIDerator],
two methods of getting random iterables.
- Add [mathutils.clamp][mathutils.clamp], a combined min-max function,
like numpy's clip.
- Optimized [iterutils.first][iterutils.first].
- Enabled spillover kwargs in [funcutils.wraps][funcutils.wraps]
- fix for default [remap][iterutils.remap] set support, fixes [84][i84]
- improving and testing exceptions around classmethod and staticmethod
for [funcutils.wraps][funcutils.wraps] and
[FunctionBuilder][funcutils.FunctionBuilder], fixes [86][i86] to
the degree possible.
16.5.0
---
_(July 16, 2016)_
A few minor changes, and medium-sized breaking change to
[cacheutils][cacheutils].
- [cacheutils][cacheutils] caching decorators now take the
function/method into account by default. This was done by adding the
scoped argument to [cached][cacheutils.cached] and
[cachedmethod][cacheutils.cachedmethod] (and removing selfish from
cachedmethod). also fixed a bug in a cachedmethod test, as well as
added docs for scoped and key arguments. all of this to fix [83][i83].
- [tableutils.Table][tableutils.Table] cell html can be customized by
overriding `get_cell_html` method.
- [funcutils.total_ordering][funcutils.total_ordering], a
[functools.total_ordering][functools.total_ordering] backport for
python 2.6.
- [funcutils.FunctionBuilder][funcutils.FunctionBuilder] function
names are now configurable.
16.4.1
---
_(June 14, 2016)_
This release primarily contains several [statsutils][statsutils] updates.
- The biggest change was the addition of
[Stats.format_histogram][statsutils.Stats.format_histogram] complete
with Freedman bin selection and other useful options.
- Added inter-quartile range (iqr) to [statsutils.Stats][statsutils.Stats]
- Adding mad (median absolute deviation) to
[Stats.describe][statsutils.Stats.describe], since median and
std_dev were already there.
16.4.0
---
_(June 8, 2016)_
another significant release, thanks to the addition of funcutils.wraps
and funcutils.FunctionBuilder. also iterutils.chunked speedup, and
tbutils.ParsedException.to_string.
- [funcutils.wraps][funcutils.wraps]: Just like functools.wraps, but
can preserve the function signature as well.
- [funcutils.FunctionBuilder][funcutils.FunctionBuilder]: The basis
for [funcutils.wraps][funcutils.wraps], this full-featured type
enables programmatically creating functions, from scratch or from
existing functions. Supports all Python 2 and 3 function features.
- [ecoutils][ecoutils]: Python 2.4 and 2.5 support.
- [iterutils][iterutils]: optimize
[iterutils.chunked_iter][iterutils.chunked_iter] (2-5x faster
depending on runtime). [See 79][i79].
- [tbutils][tbutils]: add the
[ParsedException.to_string][tbutils.ParsedException.to_string]
method, to convert parsed exceptions back into strings, possibly
after manipulation
- switch FunctionBuilder on Python 2 to be congruent with Python 3
(keywords attribute renamed to varkw, preview users might have to
adjust)