2015-08-21 05:58:47 +00:00
|
|
|
boltons Changelog
|
|
|
|
=================
|
2015-08-21 05:46:48 +00:00
|
|
|
|
2016-02-24 10:36:17 +00:00
|
|
|
Since February 20, 2013 there have been 20 releases and 753 commits for
|
|
|
|
an average of one 37-commit release every 8.2 weeks.
|
|
|
|
|
|
|
|
16.1.0
|
|
|
|
------
|
|
|
|
*(February 10, 2016)*
|
|
|
|
|
|
|
|
The centerpiece of this release is highly improved Windows support for
|
|
|
|
[fileutils.atomic_save][fileutils.atomic_save] via
|
|
|
|
[ReplaceFile](https://msdn.microsoft.com/en-us/library/windows/desktop/aa365512%28v=vs.85%29.aspx)
|
|
|
|
system call. This functionality is also made available directly via
|
|
|
|
[fileutils.replace][fileutils.replace], which is akin to Python 3.3+'s
|
2016-02-25 09:54:52 +00:00
|
|
|
[os.replace][os.replace], except that `os.replace`'s approach has
|
|
|
|
[arguably poorer behavior and atomicity](http://stupidpythonideas.blogspot.com/2014/07/getting-atomic-writes-right.html)
|
|
|
|
compared to `fileutils.replace`.
|
2016-02-24 10:36:17 +00:00
|
|
|
|
|
|
|
Also, a couple new strutils, and
|
2016-02-24 10:39:32 +00:00
|
|
|
[iterutils.backoff][iterutils.backoff] grew a jitter argument.
|
2016-02-24 10:36:17 +00:00
|
|
|
|
|
|
|
* [iterutils.backoff][iterutils.backoff] now supports start=0
|
|
|
|
* More comprehensive [iterutils.backoff][iterutils.backoff] argument checking/validation
|
|
|
|
* [fileutils.replace][fileutils.replace] and
|
|
|
|
[fileutils.atomic_rename][fileutils.atomic_rename] are now public
|
2016-02-24 10:41:45 +00:00
|
|
|
functions in [fileutils][fileutils] with cross-platform implementations ([discussion here](https://github.com/mahmoud/boltons/issues/60))
|
2016-02-24 10:36:17 +00:00
|
|
|
* [tableutils.Table][tableutils.Table]s have a metadata argument and
|
|
|
|
attribute for miscellaneous metadata.
|
|
|
|
* [strutils.is_ascii][strutils.is_ascii] and
|
|
|
|
[strutils.is_uuid][strutils.is_uuid]: About as straightforward as
|
|
|
|
they are handy.
|
|
|
|
* Tox testing improvements
|
|
|
|
|
|
|
|
|
|
|
|
16.0.1
|
|
|
|
------
|
|
|
|
*(January 24, 2016)*
|
|
|
|
|
|
|
|
DummyFile, Table.metadata, better exception handling, and in-progress
|
|
|
|
iterutils.get_path
|
|
|
|
|
|
|
|
* Small format fix in [iterutils.one][iterutils.one] for None
|
|
|
|
* Initial implementation of
|
|
|
|
[fileutils.DummyFile][fileutils.DummyFile], which allows for easy
|
|
|
|
no-op file handling without restructuring code. Sort of like a
|
|
|
|
dummy RLock for systems without threading, if you've seen those.
|
|
|
|
* avoid catching BaseException in all boltons
|
|
|
|
* better error handling in iterutils.get_path
|
2015-11-19 07:30:46 +00:00
|
|
|
|
2016-01-24 10:16:12 +00:00
|
|
|
16.0.0
|
|
|
|
------
|
|
|
|
|
|
|
|
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).
|
|
|
|
|
2015-11-19 07:30:46 +00:00
|
|
|
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.clearcache]
|
|
|
|
* [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__`
|
2015-09-24 06:42:22 +00:00
|
|
|
|
|
|
|
15.1.0
|
|
|
|
------
|
|
|
|
*(September 23, 2015)*
|
|
|
|
|
|
|
|
Reached the first release version of
|
|
|
|
[iterutils.remap][iterutils.remap](), fully tested and
|
|
|
|
documented. Also a couple of tweaks to expose the
|
|
|
|
[iterutils.unique][iterutils.unique] docs.
|
2015-09-09 10:23:36 +00:00
|
|
|
|
|
|
|
15.0.2
|
|
|
|
------
|
|
|
|
*(September 9, 2015)*
|
|
|
|
|
|
|
|
a couple [dictutils.OMD][dictutils.OMD] fixes to
|
|
|
|
[dictutils.OMD.pop][dictutils.OMD.pop] and
|
|
|
|
[dictutils.OMD.popall][dictutils.OMD.popall] to make them consistent
|
|
|
|
with the docstrings. and the accompanying tests of course.
|
|
|
|
|
|
|
|
* fix [dictutils.OMD.setdefault][dictutils.OMD.setdefault] to default
|
|
|
|
to None and not empty list, per documentation (and add a test to the
|
|
|
|
same effect)
|
|
|
|
|
2015-08-21 05:46:48 +00:00
|
|
|
|
2015-08-27 08:17:31 +00:00
|
|
|
15.0.1
|
|
|
|
------
|
|
|
|
*(August 27, 2015)*
|
|
|
|
|
|
|
|
* Added
|
|
|
|
[OrderedMultiDict.sortedvalues()][OrderedMultiDict.sortedvalues],
|
|
|
|
which returns a copy of the OMD with sublists within a keyspace
|
|
|
|
sorted.
|
|
|
|
* Fixing a bug in
|
|
|
|
[dictutils.OrderedMultiDict][dictutils.OrderedMultiDict]'s addlist
|
|
|
|
method that caused values to be added multiple times.
|
|
|
|
* Fixing a [iterutils.backoff][iterutils.backoff] string identity check
|
|
|
|
|
|
|
|
[OrderedMultiDict.sortedvalues]: http://boltons.readthedocs.org/en/latest/dictutils.html#boltons.dictutils.OrderedMultiDict.sortedvalues
|
|
|
|
|
2015-08-21 05:46:48 +00:00
|
|
|
15.0.0
|
|
|
|
------
|
|
|
|
*(August 19, 2015)*
|
|
|
|
|
|
|
|
Finally the 15.0 major release. All passing PRs and feature requests
|
|
|
|
from the first wave addressed and closed. tzutils merged into
|
|
|
|
timeutils. AtomicSaver approach and API much improved. Several other
|
|
|
|
features added:
|
|
|
|
|
2015-08-22 23:50:18 +00:00
|
|
|
* [iterutils.backoff][iterutils.backoff] and [iterutils.backoff_iter][iterutils.backoff_iter] for exponential backoff
|
|
|
|
* [iterutils.frange][iterutils.frange] and [iterutils.xfrange][iterutils.xfrange] for floating point range generation
|
|
|
|
* Slightly more permissive [jsonutils.JSONLIterator][jsonutils.JSONLIterator] blank line ignoring
|
|
|
|
* [strutils.iter_splitlines][strutils.iter_splitlines] for lazily getting lines from a larger string
|
|
|
|
* [timeutils.dt_to_timestamp][timeutils.dt_to_timestamp], per the long-lived PR [#13][i13].
|
2015-08-21 05:46:48 +00:00
|
|
|
* Merged tzutils into timeutils
|
2015-08-22 23:50:18 +00:00
|
|
|
* [fileutils.AtomicSaver][fileutils.AtomicSaver] rewrite and redoc
|
|
|
|
* -teens support for [strutils.ordinalize][strutils.ordinalize]
|
|
|
|
* made [iterutils.one][iterutils.one] consistent with [iterutils.first][iterutils.first]
|
2015-08-21 05:46:48 +00:00
|
|
|
|
|
|
|
|
|
|
|
0.6.6
|
|
|
|
-----
|
|
|
|
*(July 31, 2015)*
|
|
|
|
|
2015-08-21 05:58:47 +00:00
|
|
|
Fix atomic saving open-file issue for Windows.
|
2015-08-21 05:46:48 +00:00
|
|
|
|
2015-08-21 05:58:47 +00:00
|
|
|
* Patch for AtomicSaver on Windows. Full rewrite comes in 15.0.0.
|
2015-08-22 23:50:18 +00:00
|
|
|
* [strutils.gunzip_bytes][strutils.gunzip_bytes] for decompressing a gzip bytestring
|
2015-08-21 05:46:48 +00:00
|
|
|
|
|
|
|
|
|
|
|
0.6.5
|
|
|
|
-----
|
|
|
|
*(July 30, 2015)*
|
|
|
|
|
|
|
|
BufferedSocket work, html2text, pairwise shortcut, is_container, plural
|
2015-08-22 23:50:18 +00:00
|
|
|
typo fix, [timeutils.isoparse][timeutils.isoparse], [cacheutils.ThresholdCounter][cacheutils.ThresholdCounter], and lots of
|
2015-08-21 05:46:48 +00:00
|
|
|
testing
|
|
|
|
|
2015-08-22 23:50:18 +00:00
|
|
|
* Add [iterutils.first][iterutils.first] function
|
|
|
|
* Add [cacheutils.ThresholdCounter][cacheutils.ThresholdCounter]
|
2015-08-21 08:25:16 +00:00
|
|
|
* Add JSONL verification to jsonutils
|
2015-08-22 23:50:18 +00:00
|
|
|
* Add [timeutils.isoparse][timeutils.isoparse]
|
|
|
|
* Add [strutils.html2text][strutils.html2text] and [strutils.HTMLTextExtractor][strutils.HTMLTextExtractor]
|
|
|
|
* Fix [strutils.pluralize][strutils.pluralize] (indeces -> indices, per [#41][i41])
|
|
|
|
* Add [iterutils.is_container][iterutils.is_container] function
|
|
|
|
* Fixed a small formatting bug in [tbutils.ExceptionInfo][tbutils.ExceptionInfo] that added
|
2015-08-22 23:39:10 +00:00
|
|
|
an extra 'builtins.' for builtin exceptions under python 3
|
2015-08-21 08:25:16 +00:00
|
|
|
* Added tests for many modules
|
2015-08-22 23:50:18 +00:00
|
|
|
* Create [iterutils.pairwise][iterutils.pairwise] shortcuts for pairwise chunks since
|
2015-08-21 08:25:16 +00:00
|
|
|
pairs (key/val) are common
|
|
|
|
* Additional 2.6 compatibility and tests
|
|
|
|
* Fixed CachedInstancePartial to be Python 3 friendly without breaking
|
|
|
|
PyPy.
|
|
|
|
* Made formatutils Python 3 compatible
|
|
|
|
* Rename sockutils to socketutils and other changes
|
2015-08-21 05:46:48 +00:00
|
|
|
|
|
|
|
|
|
|
|
0.6.4
|
|
|
|
-----
|
|
|
|
*(May 10, 2015)*
|
|
|
|
|
2015-08-21 08:37:30 +00:00
|
|
|
Fixed multiline exception message handling in ParsedException. added
|
|
|
|
mathutils. adding a tentative version of socketutils. fix LRU.popitem. fix
|
2015-08-21 05:46:48 +00:00
|
|
|
OMD.__eq__.
|
|
|
|
|
2015-08-22 23:50:18 +00:00
|
|
|
* Fix a bug where [dictutils.OrderedMultiDict][dictutils.OrderedMultiDict]'s __eq__ would fail
|
2015-08-21 08:37:30 +00:00
|
|
|
with non-iterable objects of comparison
|
|
|
|
* Fixed `LRU.popitem` to return a key value pair
|
2015-08-22 23:50:18 +00:00
|
|
|
* Added mathutils with [mathutils.ceil][mathutils.ceil] and [mathutils.floor][mathutils.floor]
|
2015-08-21 08:37:30 +00:00
|
|
|
implementations that can search a fixed set of choices using the
|
|
|
|
bisect module.
|
2015-08-22 23:50:18 +00:00
|
|
|
* Fix [excutils.ParsedException][excutils.ParsedException] so exception message would not start
|
2015-08-21 08:37:30 +00:00
|
|
|
with whitespace
|
2015-08-21 05:46:48 +00:00
|
|
|
* Fix multiline exception messages
|
2015-08-22 23:50:18 +00:00
|
|
|
* Adding [socketutils.BufferedSocket][socketutils.BufferedSocket] and [socketutils.NetstringSocket][socketutils.NetstringSocket]
|
2015-08-21 05:46:48 +00:00
|
|
|
|
|
|
|
|
|
|
|
0.6.3
|
|
|
|
-----
|
|
|
|
*(April 20, 2015)*
|
|
|
|
|
2015-08-21 08:37:30 +00:00
|
|
|
Add typeutils, remove compat.py, make ParsedException work with eval()ed
|
2015-08-21 05:46:48 +00:00
|
|
|
code
|
|
|
|
|
2015-08-22 23:50:18 +00:00
|
|
|
* Properly parse tracebacks with missing source. Resolves [#30][i30]
|
|
|
|
* Tweak the docs for [typeutils.get_all_subclasses][typeutils.get_all_subclasses]
|
|
|
|
* Moved [typeutils.make_sentinel][typeutils.make_sentinel] into typeutils and removed the
|
2015-08-21 08:37:30 +00:00
|
|
|
confusing compat module
|
2015-08-22 23:50:18 +00:00
|
|
|
* Add in typeutils with modifications per the caveats of [#15][i15]
|
|
|
|
* Added function [iterutils.one][iterutils.one]
|
2015-08-21 05:46:48 +00:00
|
|
|
|
|
|
|
0.6.2
|
|
|
|
-----
|
|
|
|
*(April 11, 2015)*
|
|
|
|
|
2015-08-21 08:37:30 +00:00
|
|
|
Add partial_ordering, fix LRU repr and addition behavior
|
2015-08-21 05:46:48 +00:00
|
|
|
|
2015-08-22 23:50:18 +00:00
|
|
|
* Add [funcutils.partial_ordering][funcutils.partial_ordering](), decorator similar to
|
2015-08-21 05:46:48 +00:00
|
|
|
functools.total_ordering()
|
2015-08-22 23:50:18 +00:00
|
|
|
* Fixed [cacheutils.LRU][cacheutils.LRU]'s behavior per [#21][i21]
|
|
|
|
* Fix [cacheutils.LRU][cacheutils.LRU] repr reversal, fixes [#20][i20]
|
2015-08-21 05:46:48 +00:00
|
|
|
|
|
|
|
0.6.0
|
|
|
|
-----
|
|
|
|
*(April 10, 2015)*
|
|
|
|
|
2015-08-22 23:39:10 +00:00
|
|
|
Python 3 support and several community bugfixes. Docs clarifications, too.
|
|
|
|
|
|
|
|
* Make boltons Python 3 compatible without any external
|
|
|
|
dependencies. All modules are independent and work in Python 2.6,
|
|
|
|
2.7, 3.4, and PyPy.
|
2015-08-21 05:46:48 +00:00
|
|
|
* clarify TracebackInfo.from_current() method gap, per user 'dl__'
|
2015-08-22 23:39:10 +00:00
|
|
|
here: http://www.reddit.com/r/Python/comments/321d3o/boltons_over_100_python_utilities/
|
2015-08-22 23:50:18 +00:00
|
|
|
* Fix the [cacheutils.cached][cacheutils.cached] decorator, adding a sanity test, fixes [#12][i12]
|
2015-08-21 05:46:48 +00:00
|
|
|
* Fix bytes2human when builtin zip returns iterators
|
2015-08-22 23:50:18 +00:00
|
|
|
* Simplified logic of [iterutils.chunked][iterutils.chunked]
|
2015-08-21 05:46:48 +00:00
|
|
|
|
|
|
|
0.5.1
|
|
|
|
-----
|
|
|
|
*(April 10, 2015)*
|
|
|
|
|
2015-08-22 23:39:10 +00:00
|
|
|
A lot of bugfixes and Python 2.6 and PyPy compatibility changes thanks
|
2015-08-21 05:46:48 +00:00
|
|
|
to community contributions and encouragement.
|
|
|
|
|
2015-08-22 23:39:10 +00:00
|
|
|
* Corrected cases where OMD was not exactly a dropin for OrderedDict
|
2015-08-22 23:50:18 +00:00
|
|
|
* conditional availability of [gcutils.get_all][gcutils.get_all] based on pypy or cpython, also
|
|
|
|
[gcutils.is_tracked][gcutils.is_tracked] was added in 2.7, so making [gcutils.get_all][gcutils.get_all] work with 2.6
|
2015-08-22 23:39:10 +00:00
|
|
|
* Made namedutils backwards compatibilty for python 2.6 best effort
|
2015-08-22 23:50:18 +00:00
|
|
|
* Fix invalid part_path usage in [fileutils.AtomicSaver][fileutils.AtomicSaver]
|
2015-08-21 05:46:48 +00:00
|
|
|
|
|
|
|
0.5.0
|
|
|
|
-----
|
|
|
|
*(April 9, 2015)*
|
|
|
|
|
2015-08-22 23:39:10 +00:00
|
|
|
First publicly released version. The major focus of this release was
|
|
|
|
docs, docstrings, and Read The Docs.
|
|
|
|
|
|
|
|
* Cleared out __init__ module for maximum independence
|
2015-08-22 23:50:18 +00:00
|
|
|
* making [statsutils.median][statsutils.median] use _get_quantile and add [statsutils.trimean][statsutils.trimean]
|
|
|
|
* Switching the [statsutils.Stats][statsutils.Stats] type to be more sorted-data oriented, since it's
|
2015-08-21 05:46:48 +00:00
|
|
|
only for offline analysis of unordered data
|
2015-08-22 23:39:10 +00:00
|
|
|
* Made consistent multi-line string formats, as well as usage of the
|
|
|
|
term 'builtin' vs 'built-in' (noun vs adjective)
|
|
|
|
* Instrumented LRI with stats tracking
|
2015-08-22 23:50:18 +00:00
|
|
|
* Made [timeutils.decimal_relative_time][timeutils.decimal_relative_time] cardinalization optional
|
2015-08-22 23:39:10 +00:00
|
|
|
* Removed timeutils dependency on strutils
|
2015-08-22 23:50:18 +00:00
|
|
|
* Made [tbutils.TracebackInfo][tbutils.TracebackInfo] classmethods work with no arguments.
|
|
|
|
* Renamed ParsedTB to [tbutils.ParsedException][tbutils.ParsedException]
|
|
|
|
* Made [dictutils.OMD][dictutils.OMD] .get()/.getlist() semantics more consistent.
|
|
|
|
* finalizing .todict() and adding .sorted() to the [dictutils.OMD][dictutils.OMD]
|
2015-08-22 23:39:10 +00:00
|
|
|
* Removed osutils and adding a note about utils in general
|
|
|
|
* Made cacheutils more consistent between LRU and LRI, adding some
|
2015-08-21 05:46:48 +00:00
|
|
|
cacheutils docs
|
2015-08-22 23:39:10 +00:00
|
|
|
* Deprecate osutils, moving its contents into fileutils
|
|
|
|
* Adding in-process statsutils2, with new DataAnalyzer and
|
2015-08-21 05:46:48 +00:00
|
|
|
get_pearson_type (not merged yet)
|
|
|
|
|
|
|
|
|
|
|
|
0.4.2
|
|
|
|
-----
|
|
|
|
*(March 8, 2015)*
|
|
|
|
|
2015-08-22 23:39:10 +00:00
|
|
|
Mostly a dictutils API update (addlist), but also gcutils.
|
2015-08-21 05:46:48 +00:00
|
|
|
|
2015-08-22 23:50:18 +00:00
|
|
|
* [dictutils.OMD][dictutils.OMD]: split out addlist() from add(), removing the multi
|
2015-08-22 23:39:10 +00:00
|
|
|
kwarg
|
2015-08-22 23:50:18 +00:00
|
|
|
* adding gcutils with [gcutils.GCToggler][gcutils.GCToggler] and gc.get_all
|
2015-08-21 05:46:48 +00:00
|
|
|
|
|
|
|
|
|
|
|
0.4.1
|
|
|
|
-----
|
|
|
|
*(February 26, 2015)*
|
|
|
|
|
|
|
|
adding mboxutils
|
|
|
|
|
|
|
|
* adding mboxutils for handy dandy /var/mail integrations like cronfed
|
|
|
|
|
|
|
|
|
|
|
|
0.4.0
|
|
|
|
-----
|
|
|
|
*(February 23, 2015)*
|
|
|
|
|
|
|
|
updated tbutils, JSONL support, initial cacheutils, atomic writer,
|
|
|
|
hashtags
|
|
|
|
|
2015-08-22 23:39:10 +00:00
|
|
|
* tbutils: Changed the way exceptions are parsed out of tracebacks
|
|
|
|
* tbutils: Guard against potential linecache issues
|
2015-08-22 23:50:18 +00:00
|
|
|
* Defined/implemented [iterutils.windowed_iter][iterutils.windowed_iter] corner case behavior
|
|
|
|
* Added from_path to [fileutils.FilePerms][fileutils.FilePerms]
|
|
|
|
* Adding [strutils.find_hashtags][strutils.find_hashtags]
|
|
|
|
* Add ignore patterns to [fileutils.iter_find_files][fileutils.iter_find_files]
|
2015-08-21 05:46:48 +00:00
|
|
|
|
|
|
|
|
|
|
|
0.3.0
|
|
|
|
-----
|
|
|
|
*(October 19, 2014)*
|
|
|
|
|
2015-08-22 23:39:10 +00:00
|
|
|
First alpha release. Practically, everything not mentioned above was
|
|
|
|
added in this release.
|
2015-08-21 05:46:48 +00:00
|
|
|
|
2015-08-22 23:39:10 +00:00
|
|
|
* tbutils: add ContextualTracebackInfo and ContextualExceptionInfo
|
|
|
|
* cacheutils: a few minor changes to the BasicCache
|
2015-08-21 05:46:48 +00:00
|
|
|
* update tbutils with some critical bits. still need to add
|
|
|
|
convenience method for ExceptionInfo -> default exception print,
|
|
|
|
also need to add more docstrings.
|
|
|
|
* adding initial jsonutils with JSONL support
|
2015-08-22 23:50:18 +00:00
|
|
|
* added [cacheutils.LRU][cacheutils.LRU]
|
|
|
|
* added [timeutils.parse_timedelta][timeutils.parse_timedelta]
|
2015-08-22 23:39:10 +00:00
|
|
|
* fixing iteritems with multi=False in the
|
2015-08-22 23:50:18 +00:00
|
|
|
[dictutils.OrderedMultiDict][dictutils.OrderedMultiDict] (should return first key, but last
|
2015-08-22 23:39:10 +00:00
|
|
|
value not first)
|
2015-08-22 23:50:18 +00:00
|
|
|
* debugutils: add pdb excepthook and [debugutils.pdb_on_signal][debugutils.pdb_on_signal]
|
|
|
|
* add [fileutils.mkdir_p][fileutils.mkdir_p]
|
2015-08-22 23:39:10 +00:00
|
|
|
* tableutils: add maxlen to table text stuff
|
2015-08-21 05:46:48 +00:00
|
|
|
* fix date citation for gob's
|
|
|
|
* adding pure-Python implementation of Gob's algorithm
|
|
|
|
* fix object header guessing
|
2015-08-22 23:39:10 +00:00
|
|
|
* namedutils: add namedtuple support
|
2015-08-21 05:46:48 +00:00
|
|
|
* fix a headers bug in tableutils
|
|
|
|
* tableutils: add a couple more do-not-recurse types, add
|
|
|
|
UnsupportedData exception for better recursion, insert recursive
|
|
|
|
entries in-line, improve 'Object' strategy heuristic
|
|
|
|
* wrap up html tag customization and fix a related bug
|
|
|
|
* make html configurable via class attributes
|
|
|
|
* strengthen the max_depth check
|
|
|
|
* InputType classes are just shorter and clearer, imo
|
|
|
|
* new from_dict, from_list, from_object, removing old ones. almost
|
|
|
|
used a MetaClass for this
|
|
|
|
* starting new table
|
|
|
|
* only update the integer for the field being updated
|
|
|
|
* fixing a verbalization/pronunciation issue
|
|
|
|
* no regex for better error messages
|
|
|
|
* being opinionated about some FilePerms things
|
|
|
|
* adding initial version of fileutils/FilePerms
|
|
|
|
* update formatutils
|
|
|
|
* fix a slightly nasty namedlist bug
|
|
|
|
* make OrderedMultiDict.get()'s default allow singulars
|
|
|
|
* sync over ExceptionInfo
|
|
|
|
* add from_current() classmethod with depth option to Callpoint class
|
|
|
|
for easier instantiation
|
|
|
|
* it's called a numeronym
|
|
|
|
* add a repr to ParsedTB. A bit verbose, but better than nothing.
|
|
|
|
* add ParsedTB, which provides the ability to parse tracebacks dumped
|
|
|
|
out to logs, the command line, etc.
|
|
|
|
* improve test output and make assertion that new except hook is the
|
|
|
|
same as the builtin.
|
|
|
|
* update tbutils to use the more-powerful Callpoint type.
|
|
|
|
* copy_function
|
|
|
|
* partially clean up partial stuff
|
|
|
|
* first version of the namedlist
|
|
|
|
* fixing up namedtuple, groundwork for namedlist. humorously named
|
|
|
|
module.
|
|
|
|
* embed value in cell for incremental iteration boost on OMD
|
|
|
|
* reorganize code, add 'default' argument to poplast()
|
|
|
|
* make key argument optional to OMD.poplast
|
|
|
|
* rectifying inconsistent names and adjusting respective tests
|
|
|
|
accordingly. using smashcase because that's what builtin dict()
|
|
|
|
uses.
|
|
|
|
* fix reverse; missing yield from!
|
|
|
|
* add initial table biz
|
|
|
|
* add get_counts
|
2015-08-22 23:50:18 +00:00
|
|
|
* add [dictutils.OrderedMultiDict.get_inverted][dictutils.OrderedMultiDict.get_inverted]() for those handy reverse lookups
|
2015-08-21 05:46:48 +00:00
|
|
|
* break out skip list to FastIter OMD + bench
|
2015-08-22 23:50:18 +00:00
|
|
|
* add [strutils.a10n][strutils.a10n]()
|
|
|
|
* fix a bug in [dictutils.OrderedMultiDict][dictutils.OrderedMultiDict]'s .add()
|
2015-08-21 05:46:48 +00:00
|
|
|
* adding initial reimplementation of OMD
|
|
|
|
* adding some tests to dictutils
|
|
|
|
* update boltons formatutils to match what's goin on in lithoxyl
|
|
|
|
* remove infer_pos_args() from strutils (already in formatutils)
|
|
|
|
* add formatutils to boltons
|
|
|
|
* fix a potential infinite recursion in LocalTZ
|
|
|
|
* use more explicit names for Local/Constant tzinfo types
|
|
|
|
* add a basic but handy file finder
|
|
|
|
* add infer_positional_args() to strutils (from lithoxyl)
|
|
|
|
* split BasicCache out of dictutils into cacheutils
|
|
|
|
* update median calculation slightly
|
|
|
|
* add appropriate stacklevel to deprutils warning
|
|
|
|
* add an initial version of deprutils (basic utils for facilitating
|
|
|
|
deprecation)
|
|
|
|
* add bytes2human
|
|
|
|
* first version of some basic timezone utils which came in handy for a
|
|
|
|
train scheduling application I wrote (etavta)
|
|
|
|
* reorder imports for pep8
|
|
|
|
* redo plain-english relative_time() to have a decimal rounding factor
|
|
|
|
and handle future dates
|
|
|
|
* swap the order of cardinalize()'s arguments after intuiting the
|
|
|
|
wrong order a couple times. gotta be consistent, this isn't PHP.
|
|
|
|
* a weird little relative time approach
|
|
|
|
* add total_seconds() implementation for Python <2.7, rename
|
|
|
|
relative_datetime to relative_time
|
|
|
|
* add a relative datetime function in a new module: timeutils
|
|
|
|
* a little more transparency with orderedmultidict's maphistory
|
|
|
|
* add a test for BasicCache
|
|
|
|
* add the super simple BasicCache, a size-limited defaultdict-like
|
|
|
|
thing
|
|
|
|
* add a cheesy little splay list construct that can be used for splay-
|
|
|
|
like manual reordering for eventual optimization
|
|
|
|
* traceback utils, first draft
|
|
|
|
* add strip_ansi() (need to make a cliutils or something)
|
|
|
|
* add ansi strip task
|
|
|
|
* mess with list tuning
|
|
|
|
* add ordinalize()
|
|
|
|
* add __all__ to statsutils
|
|
|
|
* add more stats docs and doctests
|
2015-08-22 23:39:10 +00:00
|
|
|
* add some stats functions
|
2015-08-21 05:46:48 +00:00
|
|
|
* add unit_len()
|
|
|
|
* add pluralize/singularize/cardinalize to strutils
|
|
|
|
* add __all__s all around, clean up imports a bit
|
|
|
|
* adding license
|
|
|
|
* add sorted queue type, make it the default
|
|
|
|
* fix little bug in insert
|
|
|
|
* inheriting from list necessitates overriding the deprecated __get-,
|
|
|
|
__set-, and __del- slice methods
|
|
|
|
* hacky refactor to have a BasePriorityQueue to make room for
|
|
|
|
SortedPriorityQueue with peek_n, etc.
|
|
|
|
* add a little docstring and update sort method in BarrelList
|
|
|
|
* add HeapPriorityQueue
|
|
|
|
* tidy up listutils comments and imports
|
|
|
|
* move treeutils out of boltons since I don't really think a pure
|
|
|
|
python version actually adds much. i'll make an academic one-off
|
|
|
|
repo for less practical data structure experiments like that.
|
|
|
|
* inherit from list
|
|
|
|
* add reverse() to blist
|
|
|
|
* add index() to blist
|
|
|
|
* cheesy __setitem__() for blist
|
|
|
|
* add __delitem__() to BarrelList
|
|
|
|
* change the way the in-place sort works with just one list
|
|
|
|
* tune the list size a bit
|
|
|
|
* add slicing to BarrelList
|
|
|
|
* add initial version of BarrelList, a pure-python b-list-y thing to
|
|
|
|
approximate O(log(n)) behavior by multiplexing the fast O(n) list
|
|
|
|
operations
|
|
|
|
* switch to new dead index interval approach; the IndexedSet is about
|
|
|
|
half the speed of a list in the ultra-pathological case of random
|
|
|
|
popping on the low end of the IndexedSet
|
|
|
|
* made BisectTree's get() defaulting work a bit more like a dict's
|
|
|
|
* added get_adjacent and miscellaneous to BisectTree
|
|
|
|
* added a default name and always-falsy __nonzero__ to Sentinel
|
|
|
|
* add pop() for BisectTree and export the generic Tree
|
|
|
|
* make a bisect tree, because O(n) is still pretttttty fast up to
|
|
|
|
about 100k items
|
|
|
|
* add a little hack to chunked/chunked_iter to make it work nicely
|
|
|
|
with strings
|
|
|
|
* tidy up ki_vs_vi_lrh usage just a titch
|
|
|
|
* revamp indices behavior (key_size and value_size)
|
|
|
|
* switch to new multi-key mode
|
|
|
|
* pretty much done porting insert, delete, balance (the basic
|
|
|
|
operations)
|
2015-08-22 23:39:10 +00:00
|
|
|
* switch to negative refs, arbitrary length nodes
|
2015-08-21 05:46:48 +00:00
|
|
|
* add sentinel utility thing
|
|
|
|
* add .index() for list compat, updated exception messages, and added
|
|
|
|
a silly test to show off slicing and indexing
|
|
|
|
* add slicing support and .clear()
|
|
|
|
* remove ifilter dependency (using generator expression)
|
|
|
|
* add .reverse and .sort() to IndexedSet, fix bisection related bug
|
|
|
|
exposing MISSING (insort requested index, not real_index)
|
|
|
|
* pretty much all fundy IndexedSet bugs hit and fixed, looks like
|
|
|
|
* IndexedSet getting much closer
|
|
|
|
* initial rough draft of IndexedSet with a short docstring and a bunch
|
|
|
|
of fixes already (still not workin tho)
|
|
|
|
* add dictutils (OrderedMultiDict)
|
|
|
|
* it was a long time coming, but I'm finally halfway happy with this
|
|
|
|
wrapped exception
|
|
|
|
* add uniqueification capabilities
|
|
|
|
* go back to using __new__ and positional arguments
|
|
|
|
* exception wrapping green path mostly working
|
|
|
|
* working on a wrapping exception mixin thing for less lossy
|
|
|
|
nonraising.
|
|
|
|
* add asciify and update slugify with ascii flag
|
|
|
|
* add basic docs and doctests to strutils
|
|
|
|
* scratch that, regexes still faster
|
|
|
|
* add under2camel, camel2under, and slugify (and split_punct_ws, which
|
|
|
|
is much faster than re-based punctuation splitting)
|
|
|
|
* python3-compatible doctest for bucketize_bool
|
|
|
|
* bucketize and bucketize_bool, with docs
|
|
|
|
* add examples to chunked and chunked_iter
|
|
|
|
* update split() docs with more examples.
|
2015-08-22 23:50:18 +00:00
|
|
|
* [iterutils.chunked_iter][iterutils.chunked_iter] and [iterutils.chunked][iterutils.chunked]
|
|
|
|
* [iterutils.split][iterutils.split] and [iterutils.split_iter][iterutils.split_iter] work
|
|
|
|
|
|
|
|
|
2016-02-24 10:38:59 +00:00
|
|
|
[os.replace]: https://docs.python.org/3/library/os.html#os.replace
|
|
|
|
|
2015-11-19 07:30:46 +00:00
|
|
|
[cacheutils]: http://boltons.readthedocs.org/en/latest/cacheutils.html
|
2015-08-22 23:50:18 +00:00
|
|
|
[cacheutils.LRU]: http://boltons.readthedocs.org/en/latest/cacheutils.html#boltons.cacheutils.LRU
|
|
|
|
[cacheutils.ThresholdCounter]: http://boltons.readthedocs.org/en/latest/cacheutils.html#boltons.cacheutils.ThresholdCounter
|
|
|
|
[cacheutils.cached]: http://boltons.readthedocs.org/en/latest/cacheutils.html#boltons.cacheutils.cached
|
|
|
|
[debugutils.pdb_on_signal]: http://boltons.readthedocs.org/en/latest/debugutils.html#boltons.debugutils.pdb_on_signal
|
|
|
|
[dictutils.OMD]: http://boltons.readthedocs.org/en/latest/dictutils.html#boltons.dictutils.OMD
|
2015-09-09 10:23:36 +00:00
|
|
|
[dictutils.OMD.pop]: http://boltons.readthedocs.org/en/latest/dictutils.html#boltons.dictutils.OrderedMultiDict.pop
|
|
|
|
[dictutils.OMD.popall]: http://boltons.readthedocs.org/en/latest/dictutils.html#boltons.dictutils.OrderedMultiDict.popall
|
|
|
|
[dictutils.OMD.setdefault]: http://boltons.readthedocs.org/en/latest/dictutils.html#boltons.dictutils.OrderedMultiDict.setdefault
|
2015-08-22 23:50:18 +00:00
|
|
|
[dictutils.OrderedMultiDict]: http://boltons.readthedocs.org/en/latest/dictutils.html#boltons.dictutils.OrderedMultiDict
|
|
|
|
[dictutils.OrderedMultiDict.get_inverted]: http://boltons.readthedocs.org/en/latest/dictutils.html#boltons.dictutils.OrderedMultiDict.get_inverted
|
|
|
|
[excutils.ParsedException]: http://boltons.readthedocs.org/en/latest/excutils.html#boltons.excutils.ParsedException
|
2016-02-24 10:36:17 +00:00
|
|
|
[fileutils]: http://boltons.readthedocs.org/en/latest/fileutils.html
|
|
|
|
[fileutils.replace]: http://boltons.readthedocs.org/en/latest/fileutils.html#boltons.fileutils.replace
|
|
|
|
[fileutils.atomic_rename]: http://boltons.readthedocs.org/en/latest/fileutils.html#boltons.fileutils.atomic_rename
|
|
|
|
[fileutils.atomic_save]: http://boltons.readthedocs.org/en/latest/fileutils.html#boltons.fileutils.atomic_save
|
2015-08-22 23:50:18 +00:00
|
|
|
[fileutils.AtomicSaver]: http://boltons.readthedocs.org/en/latest/fileutils.html#boltons.fileutils.AtomicSaver
|
|
|
|
[fileutils.FilePerms]: http://boltons.readthedocs.org/en/latest/fileutils.html#boltons.fileutils.FilePerms
|
|
|
|
[fileutils.iter_find_files]: http://boltons.readthedocs.org/en/latest/fileutils.html#boltons.fileutils.iter_find_files
|
|
|
|
[fileutils.mkdir_p]: http://boltons.readthedocs.org/en/latest/fileutils.html#boltons.fileutils.mkdir_p
|
2016-02-24 10:36:17 +00:00
|
|
|
[fileutils.DummyFile]: http://boltons.readthedocs.org/en/latest/fileutils.html#boltons.fileutils.DummyFile
|
2015-08-22 23:50:18 +00:00
|
|
|
[funcutils.partial_ordering]: http://boltons.readthedocs.org/en/latest/funcutils.html#boltons.funcutils.partial_ordering
|
|
|
|
[gcutils.GCToggler]: http://boltons.readthedocs.org/en/latest/gcutils.html#boltons.gcutils.GCToggler
|
|
|
|
[gcutils.get_all]: http://boltons.readthedocs.org/en/latest/gcutils.html#boltons.gcutils.get_all
|
|
|
|
[gcutils.is_tracked]: http://boltons.readthedocs.org/en/latest/gcutils.html#boltons.gcutils.is_tracked
|
|
|
|
[i12]: https://github.com/mahmoud/boltons/issues/12
|
|
|
|
[i13]: https://github.com/mahmoud/boltons/issues/13
|
|
|
|
[i15]: https://github.com/mahmoud/boltons/issues/15
|
|
|
|
[i20]: https://github.com/mahmoud/boltons/issues/20
|
|
|
|
[i21]: https://github.com/mahmoud/boltons/issues/21
|
|
|
|
[i30]: https://github.com/mahmoud/boltons/issues/30
|
|
|
|
[i41]: https://github.com/mahmoud/boltons/issues/41
|
|
|
|
[iterutils.backoff]: http://boltons.readthedocs.org/en/latest/iterutils.html#boltons.iterutils.backoff
|
|
|
|
[iterutils.backoff_iter]: http://boltons.readthedocs.org/en/latest/iterutils.html#boltons.iterutils.backoff_iter
|
|
|
|
[iterutils.chunked]: http://boltons.readthedocs.org/en/latest/iterutils.html#boltons.iterutils.chunked
|
|
|
|
[iterutils.chunked_iter]: http://boltons.readthedocs.org/en/latest/iterutils.html#boltons.iterutils.chunked_iter
|
|
|
|
[iterutils.first]: http://boltons.readthedocs.org/en/latest/iterutils.html#boltons.iterutils.first
|
2016-02-24 10:38:59 +00:00
|
|
|
[iterutils.backoff]: http://boltons.readthedocs.org/en/latest/iterutils.html#boltons.iterutils.backoff
|
2015-08-22 23:50:18 +00:00
|
|
|
[iterutils.frange]: http://boltons.readthedocs.org/en/latest/iterutils.html#boltons.iterutils.frange
|
|
|
|
[iterutils.is_container]: http://boltons.readthedocs.org/en/latest/iterutils.html#boltons.iterutils.is_container
|
|
|
|
[iterutils.one]: http://boltons.readthedocs.org/en/latest/iterutils.html#boltons.iterutils.one
|
|
|
|
[iterutils.pairwise]: http://boltons.readthedocs.org/en/latest/iterutils.html#boltons.iterutils.pairwise
|
2015-09-24 06:42:22 +00:00
|
|
|
[iterutils.remap]: http://boltons.readthedocs.org/en/latest/iterutils.html#boltons.iterutils.remap
|
2015-08-22 23:50:18 +00:00
|
|
|
[iterutils.split]: http://boltons.readthedocs.org/en/latest/iterutils.html#boltons.iterutils.split
|
|
|
|
[iterutils.split_iter]: http://boltons.readthedocs.org/en/latest/iterutils.html#boltons.iterutils.split_iter
|
2015-09-24 06:42:22 +00:00
|
|
|
[iterutils.unique]: http://boltons.readthedocs.org/en/latest/iterutils.html#boltons.iterutils.unique
|
2015-08-22 23:50:18 +00:00
|
|
|
[iterutils.windowed_iter]: http://boltons.readthedocs.org/en/latest/iterutils.html#boltons.iterutils.windowed_iter
|
|
|
|
[iterutils.xfrange]: http://boltons.readthedocs.org/en/latest/iterutils.html#boltons.iterutils.xfrange
|
|
|
|
[jsonutils.JSONLIterator]: http://boltons.readthedocs.org/en/latest/jsonutils.html#boltons.jsonutils.JSONLIterator
|
|
|
|
[mathutils.ceil]: http://boltons.readthedocs.org/en/latest/mathutils.html#boltons.mathutils.ceil
|
|
|
|
[mathutils.floor]: http://boltons.readthedocs.org/en/latest/mathutils.html#boltons.mathutils.floor
|
|
|
|
[socketutils.BufferedSocket]: http://boltons.readthedocs.org/en/latest/socketutils.html#boltons.socketutils.BufferedSocket
|
|
|
|
[socketutils.NetstringSocket]: http://boltons.readthedocs.org/en/latest/socketutils.html#boltons.socketutils.NetstringSocket
|
2015-11-19 07:30:46 +00:00
|
|
|
[statsutils]: http://boltons.readthedocs.org/en/latest/statsutils.html
|
2015-08-22 23:50:18 +00:00
|
|
|
[statsutils.Stats]: http://boltons.readthedocs.org/en/latest/statsutils.html#boltons.statsutils.Stats
|
2015-11-19 07:30:46 +00:00
|
|
|
[statsutils.Stats.clearcache]: http://boltons.readthedocs.org/en/latest/statsutils.html#boltons.statsutils.Stats.clear_cache
|
|
|
|
[statsutils.Stats.get_zscore]: http://boltons.readthedocs.org/en/latest/statsutils.html#boltons.statsutils.Stats.get_zscore
|
2015-08-22 23:50:18 +00:00
|
|
|
[statsutils.median]: http://boltons.readthedocs.org/en/latest/statsutils.html#boltons.statsutils.median
|
|
|
|
[statsutils.trimean]: http://boltons.readthedocs.org/en/latest/statsutils.html#boltons.statsutils.trimean
|
|
|
|
[strutils.HTMLTextExtractor]: http://boltons.readthedocs.org/en/latest/strutils.html#boltons.strutils.HTMLTextExtractor
|
|
|
|
[strutils.a10n]: http://boltons.readthedocs.org/en/latest/strutils.html#boltons.strutils.a10n
|
|
|
|
[strutils.find_hashtags]: http://boltons.readthedocs.org/en/latest/strutils.html#boltons.strutils.find_hashtags
|
|
|
|
[strutils.gunzip_bytes]: http://boltons.readthedocs.org/en/latest/strutils.html#boltons.strutils.gunzip_bytes
|
|
|
|
[strutils.html2text]: http://boltons.readthedocs.org/en/latest/strutils.html#boltons.strutils.html2text
|
2016-01-24 10:18:57 +00:00
|
|
|
[strutils.indent]: http://boltons.readthedocs.org/en/latest/strutils.html#boltons.strutils.indent
|
2015-08-22 23:50:18 +00:00
|
|
|
[strutils.iter_splitlines]: http://boltons.readthedocs.org/en/latest/strutils.html#boltons.strutils.iter_splitlines
|
|
|
|
[strutils.ordinalize]: http://boltons.readthedocs.org/en/latest/strutils.html#boltons.strutils.ordinalize
|
|
|
|
[strutils.pluralize]: http://boltons.readthedocs.org/en/latest/strutils.html#boltons.strutils.pluralize
|
2016-02-24 10:36:17 +00:00
|
|
|
[strutils.is_ascii]: http://boltons.readthedocs.org/en/latest/strutils.html#boltons.strutils.is_ascii
|
|
|
|
[strutils.is_uuid]: http://boltons.readthedocs.org/en/latest/strutils.html#boltons.strutils.is_uuid
|
2016-02-24 10:38:59 +00:00
|
|
|
[tableutils]: http://boltons.readthedocs.org/en/latest/tableutils.html
|
|
|
|
[tableutils.Table]: http://boltons.readthedocs.org/en/latest/tableutils.html#boltons.tableutils.Table
|
2015-08-22 23:50:18 +00:00
|
|
|
[tbutils.ExceptionInfo]: http://boltons.readthedocs.org/en/latest/tbutils.html#boltons.tbutils.ExceptionInfo
|
|
|
|
[tbutils.ParsedException]: http://boltons.readthedocs.org/en/latest/tbutils.html#boltons.tbutils.ParsedException
|
|
|
|
[tbutils.TracebackInfo]: http://boltons.readthedocs.org/en/latest/tbutils.html#boltons.tbutils.TracebackInfo
|
|
|
|
[timeutils.decimal_relative_time]: http://boltons.readthedocs.org/en/latest/timeutils.html#boltons.timeutils.decimal_relative_time
|
|
|
|
[timeutils.dt_to_timestamp]: http://boltons.readthedocs.org/en/latest/timeutils.html#boltons.timeutils.dt_to_timestamp
|
|
|
|
[timeutils.isoparse]: http://boltons.readthedocs.org/en/latest/timeutils.html#boltons.timeutils.isoparse
|
|
|
|
[timeutils.parse_timedelta]: http://boltons.readthedocs.org/en/latest/timeutils.html#boltons.timeutils.parse_timedelta
|
|
|
|
[typeutils.get_all_subclasses]: http://boltons.readthedocs.org/en/latest/typeutils.html#boltons.typeutils.get_all_subclasses
|
|
|
|
[typeutils.make_sentinel]: http://boltons.readthedocs.org/en/latest/typeutils.html#boltons.typeutils.make_sentinel
|
2015-11-19 07:30:46 +00:00
|
|
|
[zscore]: https://en.wikipedia.org/wiki/Standard_score
|