Skip to content

fix(errors): drop skip_creator_parsing advice for positional-only params - #548

Merged
lesnik512 merged 1 commit into
mainfrom
fix/positional-only-error-advice
Oct 3, 2026
Merged

lesnik512 merged 1 commit into
mainfrom
fix/positional-only-error-advice

Conversation

@lesnik512

Copy link
Copy Markdown
Member

UnsupportedCreatorParameterError for a positional-only parameter without a default told users to "give the parameter a default or use skip_creator_parsing=True". The second option does not work: with skip_creator_parsing=True the provider raises CreatorCallError at resolve, with or without kwargs, because the creator is always called as creator(**kwargs) and a positional-only parameter cannot be bound by keyword. Giving the parameter a default is the only advice that works, so the message now says only that.

Found while fixing docs/troubleshooting/unsupported-creator-parameter-error.md in #547.

Other branches checked:

  • The other skip_creator_parsing mention in types_parser.py is the type-hints-resolution warning, where it is advice for silencing the warning. That is correct and left as is.

Test: test_positional_only_param_raises_at_declaration now asserts the message does not mention skip_creator_parsing (failed before the fix).

@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: e1c26fe Previous: 8ce868f Ratio
benchmarks/test_guard_by_type.py::test_g16_resolve_by_type 3569972.1503107846 iter/sec (stddev: 1.5494445783145778e-8) 3442054.526547969 iter/sec (stddev: 2.143375745788722e-8) 0.96
benchmarks/test_guard_by_type.py::test_g17_resolve_by_type_large_registry 3675655.8628954412 iter/sec (stddev: 1.0900457024057369e-8) 3548434.840392541 iter/sec (stddev: 1.2827232048867815e-8) 0.97
benchmarks/test_guard_cold.py::test_g8_cold_first_resolve 15544.078749505006 iter/sec (stddev: 0.00005033834954918549) 15518.545714422256 iter/sec (stddev: 0.00004698793690022765) 1.00
benchmarks/test_guard_cold.py::test_g8b_cold_first_resolve_cached 13059.581514434542 iter/sec (stddev: 0.00013353950293183494) 13185.693699108479 iter/sec (stddev: 0.00010949077679688568) 1.01
benchmarks/test_guard_concurrency.py::test_g14_concurrent_cached_hit[1] 345.34058350643517 iter/sec (stddev: 0.00004055061916285414) 404.3230311283974 iter/sec (stddev: 0.00007048845657185601) 1.17
benchmarks/test_guard_concurrency.py::test_g14_concurrent_cached_hit[2] 332.9702149133916 iter/sec (stddev: 0.00004355040471478122) 383.4654873688378 iter/sec (stddev: 0.000046998100263502144) 1.15
benchmarks/test_guard_concurrency.py::test_g14_concurrent_cached_hit[4] 314.0655296058114 iter/sec (stddev: 0.000038755247073442534) 352.2463486495161 iter/sec (stddev: 0.00009127243270054909) 1.12
benchmarks/test_guard_concurrency.py::test_g15_concurrent_first_resolve[1] 1588.4221603106616 iter/sec (stddev: 0.0001834316476371474) 1626.7073683300935 iter/sec (stddev: 0.0001986442227433345) 1.02
benchmarks/test_guard_concurrency.py::test_g15_concurrent_first_resolve[2] 1288.6711693232185 iter/sec (stddev: 0.0002188524151275646) 1327.7632191013151 iter/sec (stddev: 0.00017288226483966492) 1.03
benchmarks/test_guard_concurrency.py::test_g15_concurrent_first_resolve[4] 940.5024585788044 iter/sec (stddev: 0.00022056601928849807) 960.0010675205933 iter/sec (stddev: 0.00017975799786761426) 1.02
benchmarks/test_guard_concurrency.py::test_g15b_concurrent_first_resolve_sibling_children[1] 1374.3536515012963 iter/sec (stddev: 0.0011070350239969046) 1407.057453110696 iter/sec (stddev: 0.0010831166068909466) 1.02
benchmarks/test_guard_concurrency.py::test_g15b_concurrent_first_resolve_sibling_children[2] 1185.7698839239843 iter/sec (stddev: 0.00020215614254054) 1175.7928128429965 iter/sec (stddev: 0.00021455490282242838) 0.99
benchmarks/test_guard_concurrency.py::test_g15b_concurrent_first_resolve_sibling_children[4] 778.1712788184489 iter/sec (stddev: 0.00021488662164968644) 784.9046406926733 iter/sec (stddev: 0.00021119103540343572) 1.01
benchmarks/test_guard_lifecycle.py::test_g6_build_child_container 796539.656494995 iter/sec (stddev: 8.011063330980443e-8) 826944.4808698264 iter/sec (stddev: 4.169575359621365e-8) 1.04
benchmarks/test_guard_lifecycle.py::test_g6b_build_child_container_auto_scope 747572.5012636248 iter/sec (stddev: 3.221394233493295e-8) 754895.2503574233 iter/sec (stddev: 3.0409338412035246e-8) 1.01
benchmarks/test_guard_lifecycle.py::test_g7_request_lifecycle_batch 2431.4785084129617 iter/sec (stddev: 0.000012488611974332034) 2421.0815300750833 iter/sec (stddev: 0.000020424490014428993) 1.00
benchmarks/test_guard_lifecycle.py::test_g7c_event_loop_floor_control 57529.847612067155 iter/sec (stddev: 0.0000017872600510757674) 58408.76624586848 iter/sec (stddev: 0.0000018447825779836061) 1.02
benchmarks/test_guard_lifecycle.py::test_g13_teardown_at_scale 42945.49700083617 iter/sec (stddev: 0.0000020475882427175123) 43876.32191693938 iter/sec (stddev: 0.0000021012125198676007) 1.02
benchmarks/test_guard_lifecycle.py::test_g13b_teardown_at_scale_async_no_finalizers 563.9215062472709 iter/sec (stddev: 0.00005542602302767615) 553.8315819315635 iter/sec (stddev: 0.00011049984251667817) 0.98
benchmarks/test_guard_resolve.py::test_g1_transient_resolve 1900274.632422568 iter/sec (stddev: 1.3686158160282804e-7) 2179414.0503717246 iter/sec (stddev: 3.2116689283894473e-8) 1.15
benchmarks/test_guard_resolve.py::test_g2_cached_resolve 2899247.3002947364 iter/sec (stddev: 4.8477024749926025e-8) 3331944.800863088 iter/sec (stddev: 1.8996420430089775e-8) 1.15
benchmarks/test_guard_resolve.py::test_g3_deep_chain 752708.5558763844 iter/sec (stddev: 4.0035094894919106e-8) 728489.2646086639 iter/sec (stddev: 6.251243141025456e-8) 0.97
benchmarks/test_guard_resolve.py::test_g4_wide_resolve 444608.44568234106 iter/sec (stddev: 3.1322811703966714e-7) 468680.21058674285 iter/sec (stddev: 3.2602527219035675e-7) 1.05
benchmarks/test_guard_resolve.py::test_g5_cross_scope 1907910.775202175 iter/sec (stddev: 3.479432838538956e-8) 1866879.1921924949 iter/sec (stddev: 3.339221547534178e-8) 0.98
benchmarks/test_guard_resolve.py::test_g9_context_resolve 1056971.72737985 iter/sec (stddev: 1.41289514972713e-7) 1052288.8650783815 iter/sec (stddev: 1.333290563243788e-7) 1.00
benchmarks/test_guard_resolve.py::test_g12_override_active_resolve 738354.8155178382 iter/sec (stddev: 3.8913936358735685e-8) 720244.7622185523 iter/sec (stddev: 6.1118782837122e-8) 0.98
benchmarks/test_guard_resolve.py::test_g18_alias_hop 1848670.1194007634 iter/sec (stddev: 2.3468255093165935e-8) 1889630.0710914063 iter/sec (stddev: 4.658060565489605e-8) 1.02
benchmarks/test_guard_validate.py::test_g10_validate_deep_chain 22732.44108541361 iter/sec (stddev: 0.00002673276849368589) 22333.268360870607 iter/sec (stddev: 0.00003390432019260961) 0.98
benchmarks/test_guard_validate.py::test_g11_validate_wide 14042.647097976584 iter/sec (stddev: 0.000026936938996214267) 14119.363707672732 iter/sec (stddev: 0.000028698284721104412) 1.01

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

@lesnik512
lesnik512 merged commit 3024599 into main Oct 3, 2026
10 checks passed
@lesnik512
lesnik512 deleted the fix/positional-only-error-advice branch October 3, 2026 09:53
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