Skip to content

docs: say aiogram error handlers get their own child container - #718

Merged
lesnik512 merged 1 commit into
mainfrom
docs/aiogram-error-handlers
Oct 17, 2026
Merged

lesnik512 merged 1 commit into
mainfrom
docs/aiogram-error-handlers

Conversation

@lesnik512

Copy link
Copy Markdown
Member

modern-di-aiogram 4.3.4 (modern-python/modern-di-aiogram#62) also installs its middleware on dispatcher.errors, so @inject works in error handlers. Before, the update's child was already closed when error handlers ran, and resolving a REQUEST-scoped dependency there raised ContainerClosedError.

The Scopes section of the aiogram page now says an error handler gets its own child, bound to the failing update, with fresh REQUEST-scoped instances, and when that changed.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Details
Benchmark suite Current: cfffa07 Previous: 996cf18 Ratio
benchmarks/test_guard_by_type.py::test_g16_resolve_by_type 3329381.5793583505 iter/sec (stddev: 1.64584263505979e-8) 3398971.0906722094 iter/sec (stddev: 1.1594998695345776e-8) 1.02
benchmarks/test_guard_by_type.py::test_g17_resolve_by_type_large_registry 3321298.056278265 iter/sec (stddev: 1.1272459239854552e-8) 3312988.93090924 iter/sec (stddev: 1.1487165001759097e-8) 1.00
benchmarks/test_guard_cold.py::test_g8_cold_first_resolve 15656.540309336335 iter/sec (stddev: 0.0000547041942115141) 15157.436795676023 iter/sec (stddev: 0.0000552800367174803) 0.97
benchmarks/test_guard_cold.py::test_g8b_cold_first_resolve_cached 11853.268981483692 iter/sec (stddev: 0.00016107459169232394) 12119.638347945027 iter/sec (stddev: 0.00014695476835884408) 1.02
benchmarks/test_guard_concurrency.py::test_g14_concurrent_cached_hit[1] 467.0600789723652 iter/sec (stddev: 0.000212938543869971) 480.4117649154862 iter/sec (stddev: 0.00005657601867778982) 1.03
benchmarks/test_guard_concurrency.py::test_g14_concurrent_cached_hit[2] 464.90667892065557 iter/sec (stddev: 0.00005830185514469571) 465.5165380259087 iter/sec (stddev: 0.000043030175168246065) 1.00
benchmarks/test_guard_concurrency.py::test_g14_concurrent_cached_hit[4] 436.18065820719204 iter/sec (stddev: 0.0000744726070614984) 444.096702549534 iter/sec (stddev: 0.00004985484604278839) 1.02
benchmarks/test_guard_concurrency.py::test_g15_concurrent_first_resolve[1] 12293.812278361645 iter/sec (stddev: 0.000019142205687292127) 13369.973001569506 iter/sec (stddev: 0.000008366720880480949) 1.09
benchmarks/test_guard_concurrency.py::test_g15_concurrent_first_resolve[2] 5833.030096792698 iter/sec (stddev: 0.000028456556209786914) 6267.410016324864 iter/sec (stddev: 0.000022659937500857765) 1.07
benchmarks/test_guard_concurrency.py::test_g15_concurrent_first_resolve[4] 3183.811380404693 iter/sec (stddev: 0.00005655232189677956) 3322.707499348036 iter/sec (stddev: 0.00004048375177055468) 1.04
benchmarks/test_guard_concurrency.py::test_g15b_concurrent_first_resolve_sibling_children[1] 8538.231318173543 iter/sec (stddev: 0.00001983194703934989) 9994.712796954176 iter/sec (stddev: 0.000009678071802466218) 1.17
benchmarks/test_guard_concurrency.py::test_g15b_concurrent_first_resolve_sibling_children[2] 3947.1200381298736 iter/sec (stddev: 0.00005745227420950732) 4167.936005794685 iter/sec (stddev: 0.00006157674202713174) 1.06
benchmarks/test_guard_concurrency.py::test_g15b_concurrent_first_resolve_sibling_children[4] 1937.1530407568212 iter/sec (stddev: 0.00005660467961398061) 1993.2355233848903 iter/sec (stddev: 0.000044461228970224894) 1.03
benchmarks/test_guard_concurrency.py::test_g15c_worker_pool_floor_control[1] 37001.71410389886 iter/sec (stddev: 0.000010815012086081461) 39645.974660995125 iter/sec (stddev: 0.000007233125204690835) 1.07
benchmarks/test_guard_concurrency.py::test_g15c_worker_pool_floor_control[2] 11789.022474877607 iter/sec (stddev: 0.000023463283644462768) 13691.70144831524 iter/sec (stddev: 0.000011074355202792832) 1.16
benchmarks/test_guard_concurrency.py::test_g15c_worker_pool_floor_control[4] 5342.481561319573 iter/sec (stddev: 0.00004027277591833974) 5752.9347517906735 iter/sec (stddev: 0.000030141119359696113) 1.08
benchmarks/test_guard_lifecycle.py::test_g6_build_child_container 1559380.5080209041 iter/sec (stddev: 3.935659853013454e-8) 1601065.348880601 iter/sec (stddev: 3.351404397134636e-8) 1.03
benchmarks/test_guard_lifecycle.py::test_g6b_build_child_container_auto_scope 1688064.5019594573 iter/sec (stddev: 2.461813256712764e-8) 1698991.10510454 iter/sec (stddev: 1.7713780602138135e-8) 1.01
benchmarks/test_guard_lifecycle.py::test_g7_request_lifecycle_batch 3161.4530283396834 iter/sec (stddev: 0.000010670101185862416) 3154.7025979758973 iter/sec (stddev: 0.00002583232235798169) 1.00
benchmarks/test_guard_lifecycle.py::test_g7c_event_loop_floor_control 57291.8709021971 iter/sec (stddev: 0.00003093609786155103) 58215.67659786307 iter/sec (stddev: 0.0000020595849361970636) 1.02
benchmarks/test_guard_lifecycle.py::test_g7b_request_cycle_sync 387472.9379216903 iter/sec (stddev: 5.038214757052495e-7) 411538.680366211 iter/sec (stddev: 8.352210387897596e-8) 1.06
benchmarks/test_guard_lifecycle.py::test_g13_teardown_at_scale 65561.37922383445 iter/sec (stddev: 0.0000022846298734190204) 65542.96247024715 iter/sec (stddev: 0.0000016247394412795976) 1.00
benchmarks/test_guard_lifecycle.py::test_g13b_teardown_at_scale_async_no_finalizers 560.9801601936923 iter/sec (stddev: 0.0011426479906489443) 592.6892893316399 iter/sec (stddev: 0.0009227163026292208) 1.06
benchmarks/test_guard_resolve.py::test_g1_transient_resolve 2065967.3711496037 iter/sec (stddev: 6.377302530311472e-8) 2193069.024660947 iter/sec (stddev: 3.110757504734808e-8) 1.06
benchmarks/test_guard_resolve.py::test_g2_cached_resolve 3632586.4069706807 iter/sec (stddev: 1.119073219065889e-8) 3507523.86667632 iter/sec (stddev: 8.278846667384555e-9) 0.97
benchmarks/test_guard_resolve.py::test_g3_deep_chain 795496.4400934525 iter/sec (stddev: 5.2205146786532795e-8) 786886.7216373547 iter/sec (stddev: 4.928512472057435e-8) 0.99
benchmarks/test_guard_resolve.py::test_g4_wide_resolve 471293.4011144287 iter/sec (stddev: 4.158505710317877e-7) 474191.17330059607 iter/sec (stddev: 4.1593229872813204e-7) 1.01
benchmarks/test_guard_resolve.py::test_g5_cross_scope 1998754.2763985903 iter/sec (stddev: 3.889583283386849e-8) 1958485.4933757903 iter/sec (stddev: 2.7805444908867615e-8) 0.98
benchmarks/test_guard_resolve.py::test_g9_context_resolve 1216476.4558753057 iter/sec (stddev: 2.3194552261496462e-7) 1423463.1784436998 iter/sec (stddev: 1.4739503375312504e-7) 1.17
benchmarks/test_guard_resolve.py::test_g12_override_active_resolve 794608.1072257564 iter/sec (stddev: 1.3561577912162677e-7) 833961.9669145662 iter/sec (stddev: 4.029536057763587e-8) 1.05
benchmarks/test_guard_resolve.py::test_g18_alias_hop 3469986.129421735 iter/sec (stddev: 3.423754602737728e-8) 3648776.1092819464 iter/sec (stddev: 1.2293149854723347e-8) 1.05
benchmarks/test_guard_validate.py::test_g10_validate_deep_chain 35149.16291268378 iter/sec (stddev: 0.00002026658492819698) 34663.69874541447 iter/sec (stddev: 0.000018809888676094653) 0.99
benchmarks/test_guard_validate.py::test_g11_validate_wide 21226.00213850171 iter/sec (stddev: 0.000024412310797557872) 20923.262532802193 iter/sec (stddev: 0.00002336397928812689) 0.99

This comment was automatically generated by workflow using github-action-benchmark.

@lesnik512
lesnik512 merged commit 43288c9 into main Oct 17, 2026
12 checks passed
@lesnik512
lesnik512 deleted the docs/aiogram-error-handlers branch October 17, 2026 19:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant