2013-02-20 02:04:47 +00:00
|
|
|
# Boltons
|
|
|
|
|
2015-04-09 07:58:20 +00:00
|
|
|
*boltons should be builtins.*
|
|
|
|
|
2016-06-24 08:12:12 +00:00
|
|
|
<a href="https://boltons.readthedocs.io/en/latest/"><img src="https://img.shields.io/badge/docs-latest-brightgreen.svg?style=flat"></a>
|
|
|
|
<a href="https://pypi.python.org/pypi/boltons"><img src="https://img.shields.io/pypi/v/boltons.svg"></a>
|
2018-08-30 00:30:49 +00:00
|
|
|
<a href="https://anaconda.org/conda-forge/boltons"><img src="https://img.shields.io/conda/vn/conda-forge/boltons.svg"></a>
|
2023-10-31 18:53:55 +00:00
|
|
|
<a href="https://ports.macports.org/port/py-boltons/summary"><img src="https://repology.org/badge/version-for-repo/macports/python:boltons.svg?header=MacPorts"></a>
|
2018-08-30 00:30:49 +00:00
|
|
|
<a href="https://pypi.python.org/pypi/boltons"><img src="https://img.shields.io/pypi/pyversions/boltons.svg"></a>
|
2016-06-24 08:12:12 +00:00
|
|
|
<a href="http://calver.org"><img src="https://img.shields.io/badge/calver-YY.MINOR.MICRO-22bfda.svg"></a>
|
|
|
|
|
2019-02-11 08:02:17 +00:00
|
|
|
**Boltons** is a set of over 230 BSD-licensed, pure-Python utilities
|
2015-04-09 22:17:28 +00:00
|
|
|
in the same spirit as — and yet conspicuously missing from —
|
2015-04-09 07:58:20 +00:00
|
|
|
[the standard library][stdlib], including:
|
|
|
|
|
|
|
|
* [Atomic file saving][atomic], bolted on with [fileutils][fileutils]
|
|
|
|
* A highly-optimized [OrderedMultiDict][omd], in [dictutils][dictutils]
|
|
|
|
* *Two* types of [PriorityQueue][pq], in [queueutils][queueutils]
|
|
|
|
* [Chunked][chunked] and [windowed][windowed] iteration, in [iterutils][iterutils]
|
2016-02-25 10:01:48 +00:00
|
|
|
* Recursive data structure [iteration and merging][remap], with [iterutils.remap][iterutils.remap]
|
2016-02-25 10:00:40 +00:00
|
|
|
* Exponential backoff functionality, including jitter, through [iterutils.backoff][iterutils.backoff]
|
2015-04-09 07:58:20 +00:00
|
|
|
* A full-featured [TracebackInfo][tbinfo] type, for representing stack traces,
|
|
|
|
in [tbutils][tbutils]
|
|
|
|
|
2016-02-25 09:57:19 +00:00
|
|
|
**[Full and extensive docs are available on Read The Docs.][rtd]** See
|
2016-02-25 09:57:50 +00:00
|
|
|
what's new [by checking the CHANGELOG][changelog].
|
|
|
|
|
2024-02-03 16:43:36 +00:00
|
|
|
Boltons is tested against Python 3.7-3.12, as well as PyPy3.
|
2015-04-09 07:58:20 +00:00
|
|
|
|
2023-10-31 18:53:55 +00:00
|
|
|
[stdlib]: https://docs.python.org/3/library/index.html
|
2015-04-09 07:58:20 +00:00
|
|
|
[rtd]: https://boltons.readthedocs.org/en/latest/
|
2015-08-23 12:52:51 +00:00
|
|
|
[changelog]: https://github.com/mahmoud/boltons/blob/master/CHANGELOG.md
|
2015-04-09 07:58:20 +00:00
|
|
|
|
|
|
|
[atomic]: https://boltons.readthedocs.org/en/latest/fileutils.html#boltons.fileutils.atomic_save
|
|
|
|
[omd]: https://boltons.readthedocs.org/en/latest/dictutils.html#boltons.dictutils.OrderedMultiDict
|
|
|
|
[pq]: https://boltons.readthedocs.org/en/latest/queueutils.html#boltons.queueutils.PriorityQueue
|
|
|
|
[chunked]: https://boltons.readthedocs.org/en/latest/iterutils.html#boltons.iterutils.chunked
|
|
|
|
[windowed]: https://boltons.readthedocs.org/en/latest/iterutils.html#boltons.iterutils.windowed
|
|
|
|
[tbinfo]: https://boltons.readthedocs.org/en/latest/tbutils.html#boltons.tbutils.TracebackInfo
|
|
|
|
|
|
|
|
[fileutils]: https://boltons.readthedocs.org/en/latest/fileutils.html#module-boltons.fileutils
|
2016-10-21 21:10:40 +00:00
|
|
|
[ioutils]: https://boltons.readthedocs.org/en/latest/ioutils.html#module-boltons.ioutils
|
2015-04-09 07:58:20 +00:00
|
|
|
[dictutils]: https://boltons.readthedocs.org/en/latest/dictutils.html#module-boltons.dictutils
|
|
|
|
[queueutils]: https://boltons.readthedocs.org/en/latest/queueutils.html#module-boltons.queueutils
|
|
|
|
[iterutils]: https://boltons.readthedocs.org/en/latest/iterutils.html#module-boltons.iterutils
|
2016-02-25 10:00:40 +00:00
|
|
|
[iterutils.remap]: http://boltons.readthedocs.org/en/latest/iterutils.html#boltons.iterutils.remap
|
|
|
|
[iterutils.backoff]: http://boltons.readthedocs.org/en/latest/iterutils.html#boltons.iterutils.backoff
|
2015-04-09 07:58:20 +00:00
|
|
|
[tbutils]: https://boltons.readthedocs.org/en/latest/tbutils.html#module-boltons.tbutils
|
|
|
|
|
2016-02-25 10:01:48 +00:00
|
|
|
[remap]: http://sedimental.org/remap.html
|
2016-02-25 10:00:40 +00:00
|
|
|
|
2015-04-09 07:58:20 +00:00
|
|
|
## Installation
|
|
|
|
|
2015-04-16 10:02:15 +00:00
|
|
|
Boltons can be added to a project in a few ways. There's the obvious one:
|
2015-04-09 07:58:20 +00:00
|
|
|
|
2018-10-11 15:35:05 +00:00
|
|
|
```bash
|
|
|
|
pip install boltons
|
2015-04-09 07:58:20 +00:00
|
|
|
```
|
2020-09-07 04:12:04 +00:00
|
|
|
On macOS, it can also be installed via [MacPorts](https://ports.macports.org/port/py-boltons/summary):
|
|
|
|
|
|
|
|
```bash
|
|
|
|
sudo port install py-boltons
|
|
|
|
```
|
|
|
|
|
2015-04-09 07:58:20 +00:00
|
|
|
|
2015-04-16 10:02:15 +00:00
|
|
|
Then, [thanks to PyPI][boltons_pypi], dozens of boltons are just an import away:
|
2015-04-09 07:58:20 +00:00
|
|
|
|
|
|
|
```python
|
2018-10-11 15:35:05 +00:00
|
|
|
from boltons.cacheutils import LRU
|
|
|
|
my_cache = LRU()
|
2015-04-09 07:58:20 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
However, due to the nature of utilities, application developers might
|
2016-02-25 10:04:22 +00:00
|
|
|
want to consider other options, including vendorization of individual
|
|
|
|
modules into a project. Boltons is pure-Python and has no
|
|
|
|
dependencies. If the whole project is too big, each module is
|
|
|
|
independent, and can be copied directly into a project. See the
|
|
|
|
[Integration][integration] section of the docs for more details.
|
2015-04-09 07:58:20 +00:00
|
|
|
|
2015-04-16 10:02:15 +00:00
|
|
|
[boltons_pypi]: https://pypi.python.org/pypi/boltons
|
2015-04-09 07:58:20 +00:00
|
|
|
[integration]: https://boltons.readthedocs.org/en/latest/architecture.html#integration
|
|
|
|
|
|
|
|
## Third-party packages
|
|
|
|
|
|
|
|
The majority of boltons strive to be "good enough" for a wide range of
|
|
|
|
basic uses, leaving advanced use cases to Python's [myriad specialized
|
|
|
|
3rd-party libraries][pypi]. In many cases the respective ``boltons`` module
|
|
|
|
will describe 3rd-party alternatives worth investigating when use
|
|
|
|
cases outgrow `boltons`. If you've found a natural "next-step"
|
|
|
|
library worth mentioning, see the next section!
|
|
|
|
|
|
|
|
[pypi]: https://pypi.python.org/pypi
|
|
|
|
|
|
|
|
## Gaps
|
|
|
|
|
|
|
|
Found something missing in the standard library that should be in
|
|
|
|
`boltons`? Found something missing in `boltons`? First, take a
|
|
|
|
moment to read the very brief [architecture statement][architecture] to make
|
|
|
|
sure the functionality would be a good fit.
|
|
|
|
|
|
|
|
Then, if you are very motivated, submit [a Pull Request][prs]. Otherwise,
|
|
|
|
submit a short feature request on [the Issues page][issues], and we will
|
|
|
|
figure something out.
|
|
|
|
|
|
|
|
[architecture]: https://boltons.readthedocs.org/en/latest/architecture.html
|
|
|
|
[issues]: https://github.com/mahmoud/boltons/issues
|
|
|
|
[prs]: https://github.com/mahmoud/boltons/pulls
|