Changelog¶
All notable changes to this project are and will be documented in this file.
The format is based on Keep a Changelog.
This project uses Semantic Versioning.
Summary¶
Tests¶
59% coverage, 72 tests
Docs¶
95% complete
Versions¶
Below versions are unstable¶
[0.9.11] - 2026-06-04; newest¶
Upgraded to Python 3.15.0b2; added experimental GraalPy and free-threaded support.
[0.9.10] - 2026-05-29¶
Removed actionlint step; integrated CodeQL fully.
[0.9.9] - 2026-05-26¶
Added more tests and more badges to the readme; removed codecov upload step superseded by GitHub Code Quality.
[0.9.8] - 2026-05-23¶
Added the genmakefileusage scripts, among some rewrites, most notably eliminating instances of a bare Any annotating an argument.
[0.9.7] - 2026-05-21¶
Removed unnecessary .nojekyll file from docs directory; regenerated secrets baseline; added locksmiths submodule.
[0.9.6] - 2026-05-19¶
Re-committed .markdownlint.json to version control; documentation nears completion; used GitHub Actions for page deployment.
[0.9.5] - 2026-05-17¶
Some bugfixes; began deployment to GitHub Pages.
BREAKING¶
Changed the default key used when shelving and unshelving versions.
[0.9.4] - 2026-05-15¶
Fixed workflows once more and integrated uv more fully; migrated from mypy to ty, removing stubtest step.
[0.9.3] - 2026-05-11¶
Added some tests; changed symbolic links to a copy step in the Read the Docs build, which is more reliable; fixed codecov trigger; added sphinx-copybutton as an optional dependency.
[0.9.2] - 2026-05-07¶
Created symbolic links in docs directory linking to root .md files; fixed some bugs; respected some more environment variables and documented this behaviour; completed benchmarks; added myst_parser as an optional dependency; bumped some dependencies; added some examples.
[0.9.1] - 2026-05-01¶
Declared full support for python[ -m] asyncutils an entry point; patched function, method and class method signatures where appropriate; added -P/–pdb option; switched to furo theme.
[0.9.0] - 2026-04-27¶
Added __lazy_modules__ attribute to submodules where appropriate; added some iteration, functional programming and context management utilities.
BREAKING¶
Declared end of life for all alpha versions.
Changed version shelving and unshelving schema.
Finalized the following top level objects:
Constants:
__version__
__hexversion__
submodules_map
preloaded_submodules
console_preloaded_submodules
Functions:
time_since_boot
Declared the following submodules and symbols as part of the public API:
altlocks
Classes:
ResourceGuard
UniqueResourceGuard
CircuitBreaker
StatefulBarrier
DynamicThrottle
Releasing
base
Classes:
event_loop (context manager)
Functions:
adisembowelleft
adisembowel
safe_cancel_batch
iter_to_agen
aiter_to_gen
collect
take
drop
aenumerate
sleep_forever
Awaitables:
dummy_task
yield_to_event_loop
buckets
Classes:
TokenBucket
LeakyBucket
channels
Classes:
Observable
EventBus
Rendezvous
cli
Functions:
run
compete
Functions:
first_completed
race_with_callback
multi_winner_race_with_callback
convert_to_coro_iter
enhanced_gather
enhanced_staggered_race
config
Classes:
debugging
Executor
Functions:
set_logger_level
get_past_logs
Constants:
debug
silent
basic_repl
max_memerrs
loaded_all
logging_to
console
Classes:
ConsoleBase
AsyncUtilsConsole
constants
Classes:
sentinel_base
Constants:
RECIP_E
EXECUTORS_FROZENSET
POSSIBLE_EXECUTORS
Sentinels:
RAISE
context
Classes:
Context
localcontext (context manager)
nonreusablelocalcontext (context manager)
Constants:
all_contextual_consts
… (every constant in the
all_contextual_constsfrozenset)
Functions:
getcontext
setcontext
events
Classes:
SingleWaiterEventWithValue
EventWithValue
exceptions:
Classes:
ref
IgnoreErrors
WarningToError
Constants:
CRITICAL
Context managers (ignore_*):
ignore_all
ignore_noncritical
ignore_typical
ignore_stopiteration
ignore_stopaiteration
ignore_valerrs
ignore_typeerrs
Exception types:
Critical
StateCorrupted
VersionError
VersionConversionError
VersionNormalizerMissing
VersionCorrupted
VersionValueError
VersionNormalizerTypeError
VersionNormalizerFault
BulkheadError
BulkheadFull
BulkheadShutDown
PoolError
PoolFull
PoolShutDown
RateLimitExceeded
BusError
BusTimeout
BusShutDown
BusStatsErrors
BusPublishingError
CircuitBreakerError
CircuitHalfOpen
CircuitOpen
EventValueError
FutureCorrupted
MaxIterationsError
ItemsExhausted
LockForceRequest
PasswordQueueError
PasswordRetrievalError
GetPasswordRetrievalError
PutPasswordRetrievalError
ForbiddenOperation
PasswordError
WrongPassword
WrongPasswordType
PasswordMissing
GetPasswordMissing
PutPasswordMissing
Functions:
unnest
unnest_reverse
potent_derive
prepare_exception
raise_exc
exception_occurred
wrap_exc
unwrap_exc
func
Classes:
RateLimited
Functions:
areduce
iterf
acompose
every
everymethod
timer
retry
throttle
debounce
measure
measure2
benchmark
star
unstar
futures
Classes:
AsyncCallbacksFuture
AsyncCallbacksTask
EagerAsyncCallbacksFuture
EagerAsyncCallbacksTask
TimeAwareAsyncCallbacksFuture
TimeAwareAsyncCallbacksTask
TimeAwareFuture
TimeAwareTask
io
Classes:
AsyncReadWriteCouple
MemoryMappedIOManager
Functions:
double_ended_text_pipe
double_ended_binary_pipe
iterclasses
Classes:
achain
apeekable
abucket
iters
Functions:
… (There are too many of these, so just refer to the IDE autocomplete or read the stub)
locks
Classes:
AdvancedRateLimit
DynamicBoundedSemaphore
PrioritySemaphore
KeyedCondition
RLock
PriorityLock
PriorityRLock
MultiCountDownLatch
locksmiths
Classes:
LocksmithBase
Enumerations:
ForceResult
RecognitionResult
Functions:
succeeded
misc
Classes:
CallbackAccumulator
StateMachine
CacheWithBackgroundRefresh
Functions:
gather_with_limited_concurrency
mixins
Interfaces/Mixins:
LoopContextMixin
AwaitableMixin
AsyncContextMixin
ExecutorRequiredAsyncContextMixin
LockMixin
LockWithOwnerMixin
EventMixin
networking
Classes:
LineProtocol
LFProtocol
CRLFProtocol
CRProtocol
SocketTransport
pools
Classes:
AdvancedPool
ConnectionPool
processors
Classes:
BoundedBatchProcessor
BatchProcessor
Bulkhead
properties
Classes:
AsyncPropertyBase
LazyAsyncProperty
ConcurrentAsyncProperty
RWLockedAsyncProperty
queues
Interfaces:
PotentQueueBase
Classes:
SmartQueue
SmartLifoQueue
SmartPriorityQueue
UserPriorityQueue
Functions:
password_queue
Context managers (ignore_*):
ignore_qshutdown
ignore_qempty
ignore_qfull
ignore_qerrs
rwlocks
Classes:
RWLock
FairRWLock
ReadPreferredRWLock
WritePreferredRWLock
PriorityRWLock
FairPriorityRWLock
WritePreferredPriorityRWLock
AgingRWLock
CoercedMethod
signals
Functions:
wait_for_signal
tools
Functions:
loadf
json_to_argv
json_to_argstr
argv_to_json
argstr_to_json
get_cfg_json_format
print_cfg_json_format
get_cmd_help
print_cmd_help
util
Context managers (ignore_*):
ignore_cancellation
Context manager classes:
anullcontext
Functions:
aawcmf2dcmf
aawcmf2dcmff
afcopy
dcm
get_future
new_eager_tasks
to_sync
to_async
to_sync_from_loop
sync_await
lockf
done_evt
done_fut
locked_lock
dualcontextmanager
semaphore
aiter_from_f
safe_cancel
transient_block
transient_block_from_loop
wrap_in_coro
atruthify
afalsify
anullify
avalify
version
Classes:
VersionInfo
VersionDelta
Functions:
normalize
normalize_allow_unimplemented
register_normalizer
unregister_normalizer
dispatch_normalizer
autogenerate_normalizers
Below versions have reached EOL¶
[0.8.28] - 2026-04-24¶
Rewrote submodules loading mechanism; removed fragile relative imports; compressed asyncio and sibling module imports to avoid overhead.
[0.8.27] - 2026-04-21¶
Added more tests and fixed stubtest errors; abolished slow markdownlint step in pre-commit; various API additions.
[0.8.26] - 2026-04-18¶
Squashed many bugs and stub inaccuracies; integrated stubtest; simplified workflows; added more contextual constants.
[0.8.25] - 2026-04-14¶
Created issue templates.
[0.8.24] - 2026-04-10¶
Created AI_USAGE_POLICY.md.
[0.8.23] - 2026-04-09¶
Integrated pre-commit CI.
[0.8.22] - 2026-04-05¶
Created the audit events table.
[0.8.21] - 2026-04-01¶
Organized badges into table; started using mypy.
[0.8.20] - 2026-03-29¶
Started hosting documentation on Read the Docs.
[0.8.19] - 2026-03-27¶
Set up docs directory.
[0.8.17] - 2026-03-24¶
Started using detect-secrets.
[0.8.16] - 2026-03-22¶
Started using ruff; created py.typed.
[0.8.14] - 2026-03-21¶
Set up tests directory; started using pytest.
[0.8.9] - 2026-03-14¶
Created Dockerfile.
[0.8.8] - 2026-03-12¶
Created .editorconfig and .pre-commit-config.yaml.
[0.8.6] - 2026-03-10¶
Created ROADMAP.md.
[0.8.4] - 2026-03-09¶
Created SUPPORT.md and CHANGELOG.md.
[0.8.2] - 2026-03-07¶
Created .dockerignore, .github/workflows/python-package.yaml, CODE_OF_CONDUCT.md, CONTRIBUTING.md, and LICENSE.
[0.8.1] - 2026-03-06¶
Created pyproject.toml and SECURITY.md.
[0.8.0] - 2026-03-06¶
Created GitHub repository; added version submodule.
Below entries are abridged¶
[0.7.0] - 2026-02-09¶
Began migration of implementation details into _internal subpackage; fixed initialization logic and command line.
[0.6.0] - 2026-01-1x¶
Completed migration from inline annotations to separated stubs; perfected base.event_loop and lazy loading; added console and cli submodules.
[0.5.0] - 2025-12-0x¶
Added classes such as altlocks.CircuitBreaker and channels.EventBus; implemented preliminary lazy loading system; created exceptions submodule;
began separation of type annotations from .py into .pyi.
[0.4.0] - 2025-10-0x¶
Added more complicated patterns and procedures such as channels.Observable and signals.wait_for_signal.
[0.3.0] - 2025-08-2x¶
Basically completed refactoring; added more object-oriented patterns such as altlocks.DynamicThrottle and misc.CacheWithBackgroundRefresh.
[0.2.0] - 2025-07-0x¶
Began reorganizing single file containing all functions into submodules.
[0.1.0] - 2025-06-xx¶
Added basic but untested features such as iters.tee, iters.merge, base.to_async, base.iter_to_agen and util.sync_await.
[0.0.0] - 2025-05-xx¶
Development began. This can be classified as a passion project.