Skip to content

Change Log

3.0.0 (2026-05-06)

Breaking changes:

  • drop curio backend entirely — anyio is the sole async backend
  • remove BTreeRunner(disable_curio=) parameter, replaced by BTreeRunner(backend=)
  • remove has_curio() utility function
  • remove [curio] optional dependency group
  • remove old run(kernel, target, *args) curio helper — replaced by run(target, *args, backend=...)
  • fix parallele parameter typo: succes_thresholdsuccess_threshold
  • fix sequence parameter typo: succes_thresholdsuccess_threshold
  • rename ControlFlowException.instanciateControlFlowException.instantiate (typo fix)
  • rename repeat_untilrepeat_while (old behavior: loop while condition is truthy)
  • add repeat_until with correct standard BT semantics (loop until condition becomes truthy)
  • BTreeRunner.run() context isolation: each call starts from the __enter__ snapshot; mutations no longer accumulate across ticks (was a side-effect of the old asyncio.Runner persistent loop)

Changes:

  • add Backend = Literal["asyncio", "trio", "asyncio+uvloop"] type and export it from public API
  • BTreeRunner(backend=) supports "asyncio" (default), "trio", "asyncio+uvloop"
  • run(target, *args, backend="asyncio", **kwargs) — one-shot convenience wrapper around BTreeRunner
  • parallele rewrites with anyio.create_task_group() — runs children concurrently across all backends
  • full test suite parametrized over asyncio, trio, and asyncio+uvloop via pytest-anyio
  • add timeout_after(child, delay) decorator — returns FAILURE if child exceeds deadline (uses anyio.move_on_after)
  • add condition_guard(condition, child) — alias for decision without failure tree; skips child and returns SUCCESS when condition is falsy
  • add cooldown(child, delay, throttled_value=SUCCESS) — skips child if called before delay seconds have elapsed; returns throttled_value (default SUCCESS) when throttled
  • add delay(child, seconds) — waits seconds before running child
  • add do_while(child, condition) — runs child at least once, then repeats while condition is truthy
  • add repeat_n(child, n) — runs child exactly n times regardless of result
  • add random_selector(children) — fallback with children shuffled on every tick
  • add parallel_race(children) — runs children concurrently; first to finish wins, all others are cancelled
  • add switch(condition, cases, default=None) — routes to a child based on the return value of condition; falls back to default or FAILURE if no case matches
  • add tutorials: context var isolation (tutorial 3), exception handling (tutorial 4)
  • add migration guides: docs/migration/curio-to-anyio.md, docs/migration/asyncio-to-anyio.md
  • minimum Python version unchanged: 3.11

2.0.1 (2026-05-05)

Changes: - update pytest version - add mkdocs-gen-files and mkdocs-literate-nav to auto-generate API reference from docstrings - add make docs-serve target for local documentation preview - update mkdocs.yml: explicit docs_dir/site_dir, labeled nav titles, mkdocstrings Google docstring style - update contributing guide with documentation workflow, repository layout, and release process

2.0.0 (2026-05-05)

Breaking changes:

  • drop Python 3.9 and 3.10 support, minimum is now Python 3.11
  • remove poethepoet dependency, all tasks now driven by make

Changes:

  • migrate from poe tasks to Makefile targets
  • add make install-curio target for curio backend development
  • add asyncio test suite alongside curio test suite
  • add @pytest.mark.all_backends marker to run tests under both backends
  • set pytest asyncio_mode = "strict"
  • extend ruff rules: UP, B, C4, A, N, TCH, RUF
  • update pyright constraint to ~= 1.1
  • fix runner.py: remove dead Python version guard

1.4.1 (2025-01-21)

  • change poetry to uv as dependencies manager
  • support python 3.12

1.4.0 (2025-01-06)

  • remove support of python 3.8
  • update poetry usage with poet plugin
  • update pyproject.toml declaration
  • update dependencies management
  • fix few type error
  • extends test to 3.9, 3.11
  • remove usage of black and isort for rust
  • use pyright as sucessor or mypy

1.3.0 (2023-10-07)

  • add default parallel asyncio implementation if curio is not present.
  • add run_once decorator
  • bunp pytest dependency
  • Deprecation notice on async_btree.utils.run
  • Add BTreeRunner context manager to drive multiple independant btree execution. This implementation works with curio and asyncio. asyncio support only for python >= 3.11.
  • remove __version__ package attribute. Single source of true is pyproject.toml and git.

1.2.0 (2023-05-11)

Features, from #24 :

  • Removing inner exception handling, in order to code like usual, catch what we want and manage exception as needed
  • add function failure_on_exception : avoid raising and manage it in btree with a false meaning
  • add function ignore_exception : ignore specific exception

Fix: - mypy cast issue on decorated function. - name attribute on operator - add test about metadata node name and properties - function name access compliant with mypi

Technical Update:

  • use local .venv directory for virtual env -> better integration with visual studio
  • update development dependencies
  • use ruff as replacement of flake8, flakehell,...
  • use mkdocs as replacement of sphinx
  • simplify Makefile
  • change 'master' branch for 'main'

1.1.1 (2020-11-21)

  • simplify analyze function
  • fix parallele implementation

1.1.0 (2020-11-20)

  • remove falsy evaluation of exception
  • add ignore_exception decorator
  • use sync or async function in parameters operator
  • decision control return Success per default rather than act as a failure if no failure tree dependency is set.
  • add test on python 3.8

1.0.2 (2020-11-15)

  • update curio version > 1
  • add pytest-curio and rewrote test unit

1.0.1 (2020-01-31)

  • update from template-python
  • use poetry 1.0.x

1.0.0 (2019-09-01)

  • rework documentation build process (see mkdocs folder)
  • configure github page under master/docs
  • configure documentation site on pypi
  • add doc style on all function
  • standardize parameter name
  • fix dev documentation dependency

0.1.2 (2019-07-05)

  • Stable version flag
  • Remove alpha note

0.1.1 (2019-07-05)

Removed version due to configuration error.

0.1.0 (2019-07-05)

  • Added Project Management:
  • initial project structure based on jacebrowning/template-python
  • initial project configuration
  • follow Semantic Versioning
  • configure travis-ci
  • publish alpha version (not functional) on pypi
  • configure coverage
  • configure scrutinizer
  • remove pylint.ini to a simple .pylintrc (add ide support)
  • disable pylint bad-continuation (bug with pep8 formater)
  • declare extra dependency
  • configure black and isort
  • refactorise makefile poetry run
  • introduce flake8 as linter
  • Documentation:
  • replace mkdocs with pydoc-markdown
  • Code:
  • define 'definition' module to declare all common definiton of btree
  • define 'utils' module to declare few async function like afilter, amap
  • fix flake8 syntax error
  • fix mypy typing error
  • add basic test unit
  • fix typing declaration
  • complete code coverage