NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #791 most downloaded on PyPI
Python Utils is a module with some convenient utilities not included with the standard Python install
Last release 2 days ago
02 Oct 2026
Release timing varies
gaps range from 3 weeks to 1.6 years
Some releases are documented
notes for 22 of 59 stable releases
Nothing withdrawn
no release was ever pulled
15 years old
59 releases · first in 2011
Keep UniqueList membership in sync when replacing an indexed item, and leave membership unchanged when the index is out of range, contributed by @shky
UniqueList membership in sync when replacing an indexed item, and leave membership unchanged when the index is out of range, contributed by @shkyyy18 in #51.UniqueList membership in sync for slice assignment, extend, pop, remove, clear, += and *=, so extend and += no longer add duplicates and removed values can be added again.UniqueList slice assignment, allow a slice to reuse the values it replaces, and reject a slice that repeats a value.copy.copy and copy.deepcopy of a UniqueList return a working copy with its own membership.UniqueList membership unchanged when insert fails, and answer in for an unhashable value the way a list does.CastedDict and LazyCastedDict load from pickle on every protocol, including pickles written by 4.0.1, and stop copy.copy and copy.deepcopy from casting the stored values a second time.setdefault and |= store in a CastedDict or LazyCastedDict. A None default is stored as it is.LazyCastedDict once when it is stored. It was cast twice.update and the constructor of the casted dicts, as dict does.!= the opposite of == for SliceableDeque, and compare unequal to a set when an item is unhashable.DictUpdateArgs type alias. The code never accepted that shape.Logged.exception(), and name the caller in every record of Logged instead of logger.py. Code that passed stacklevel=2 to work around the wrong caller now points one frame too high.Logurud from crashing on a message with a brace in it. A message without arguments is logged as written, so braces that were doubled to avoid the crash now show doubled.Logged or Logurud with a type such as int or str.to_int and to_float for a pattern without a group, and never return a negative power from scale_1024.timesince, describe a negative timedelta by its size, and accept a timezone-aware datetime.camel_to_underscore, so HTTP_OK becomes http_ok.import_global import a nested module that nothing imported before.abatcher when the consumer stops early. A source that is an async generator ends at that point, where a leaked task used to take its next item.abatcher after a full batch, and accept an iterator whose __anext__ returns a future.on_timeout in aio_generator_timeout_detector.format_time exactly for a precision below one second, and print the placeholder for nan.timeout_generator and aio_timeout_generator to maximum_interval.acount count down to a stop with a negative step.sample through the logger of its module instead of the root logger, which installed a handler on it.listify, and leave the annotations of the wrapped function alone in wraps_classmethod.total_seconds() from timedelta_to_seconds for a duration with a fraction.to_str returning bytes and the timeouts that read 0 as none.conftest.py in the sdist.One column per quarter.
Allow uv_build 0.12.x, contributed by @felixonmars in #49 .
uv_build 0.12.x, contributed by @felixonmars in #49.python_utils.types export list unique.build: release 4.0.0 (major)
build: release 4.0.0 (major)
Made tests far more reliable and fixed python_requires thanks to @zeevro
Made tests far more reliable and fixed python_requires thanks to @zeevro
dist/python_utils-3.9.0-py2.py3-none-any.whl
dist/python_utils-3.9.0-py2.py3-none-any.whl
Windows can also return an OSError instead of a ValueError for a fromtimestamp overflow
Windows can also return an OSError instead of a ValueError for a fromtimestamp overflow
v3.8.1 Compare # Choose a tag to compare
v3.8.1
Compare
v3.8.0 Compare # Choose a tag to compare
v3.8.0
Compare
Fixed several typing issues and added more thorough tests
Fixed several typing issues and added more thorough tests
Increased typing-extensions version requirement to fix #38
Increased typing-extensions version requirement to fix #38
Added extra containers such as UniqueList and SlicableDeque. Added full pyright strict and mypy type checks
Added extra containers such as UniqueList and SlicableDeque. Added full pyright strict and mypy type checks
Added import shortcuts for container classes
Added import shortcuts for container classes
Improved type hinting thanks to @jorenham
Improved type hinting thanks to @jorenham
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
added more type hints, full pyright and mypy support and added py.typed file
added more type hints, full pyright and mypy support and added py.typed file
fixed issue with not submitting tasks to asyncio.wait. Fixes #35
fixed issue with not submitting tasks to asyncio.wait. Fixes #35
Fixed bug with batcher skipping items in the case of timeouts thanks to @jorenham
Fixed bug with batcher skipping items in the case of timeouts thanks to @jorenham
improved generator timeout handling
improved generator timeout handling
Added (asyncio) generators for automatic batching and timeout detection
Added (asyncio) generators for automatic batching and timeout detection
Nothing published for this version
Nothing published for this version
Nothing published for this version
Added loguru support, added apply recursive function and improved camel to underscore function
Added loguru support, added apply recursive function and improved camel to underscore function
dropped python 3.6 support because it is deprecated and so we can somewhat use | as type union
dropped python 3.6 support because it is deprecated and so we can somewhat use | as type union
Python 3 update including full type hinting, asyncio tools, typing shortcuts and listify decorator for generators
Python 3 update including full type hinting, asyncio tools, typing shortcuts and listify decorator for generators
Nothing published for this version
added automated tox github action tests
added automated tox github action tests
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →