wireup 2.9.0__tar.gz → 2.11.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {wireup-2.9.0 → wireup-2.11.0}/.github/contributing.md +1 -1
- {wireup-2.9.0 → wireup-2.11.0}/.github/workflows/run_all.yml +2 -2
- {wireup-2.9.0 → wireup-2.11.0}/PKG-INFO +5 -8
- {wireup-2.9.0 → wireup-2.11.0}/benchmarks/bench_runner.py +27 -22
- {wireup-2.9.0 → wireup-2.11.0}/benchmarks/generate_charts.py +6 -6
- {wireup-2.9.0 → wireup-2.11.0}/benchmarks/generate_versions.py +2 -3
- {wireup-2.9.0 → wireup-2.11.0}/benchmarks/wireup_benchmarks/aioinject_setup.py +2 -3
- {wireup-2.9.0 → wireup-2.11.0}/benchmarks/wireup_benchmarks/dependency_injector_setup.py +4 -4
- {wireup-2.9.0 → wireup-2.11.0}/benchmarks/wireup_benchmarks/dishka_setup.py +2 -4
- {wireup-2.9.0 → wireup-2.11.0}/benchmarks/wireup_benchmarks/diwire_setup.py +2 -4
- {wireup-2.9.0 → wireup-2.11.0}/benchmarks/wireup_benchmarks/fastapi_setup.py +4 -4
- {wireup-2.9.0 → wireup-2.11.0}/benchmarks/wireup_benchmarks/globals_setup.py +2 -3
- {wireup-2.9.0 → wireup-2.11.0}/benchmarks/wireup_benchmarks/injector_setup.py +2 -4
- {wireup-2.9.0 → wireup-2.11.0}/benchmarks/wireup_benchmarks/lagom_setup.py +3 -3
- {wireup-2.9.0 → wireup-2.11.0}/benchmarks/wireup_benchmarks/services.py +8 -8
- {wireup-2.9.0 → wireup-2.11.0}/benchmarks/wireup_benchmarks/svcs_setup.py +2 -3
- {wireup-2.9.0 → wireup-2.11.0}/benchmarks/wireup_benchmarks/that_depends_setup.py +1 -1
- {wireup-2.9.0 → wireup-2.11.0}/benchmarks/wireup_benchmarks/wireup_cbr_setup.py +2 -4
- {wireup-2.9.0 → wireup-2.11.0}/benchmarks/wireup_benchmarks/wireup_setup.py +2 -4
- wireup-2.11.0/docs/.cache/10005938810451227853 +4 -0
- wireup-2.11.0/docs/.cache/10030112338242773854 +109 -0
- wireup-2.11.0/docs/.cache/10065798489776974677 +198 -0
- wireup-2.11.0/docs/.cache/10112708023018233778 +4 -0
- wireup-2.11.0/docs/.cache/10244736634308090200 +84 -0
- wireup-2.11.0/docs/.cache/1026833386043599887 +4 -0
- wireup-2.11.0/docs/.cache/1076323475707195139 +4 -0
- wireup-2.11.0/docs/.cache/10791388457198634538 +125 -0
- wireup-2.11.0/docs/.cache/10945278607770312194 +192 -0
- wireup-2.11.0/docs/.cache/11305474245948282721 +190 -0
- wireup-2.11.0/docs/.cache/11383899734388964016 +4 -0
- wireup-2.11.0/docs/.cache/11392774134316685928 +380 -0
- wireup-2.11.0/docs/.cache/11501566918120132822 +4 -0
- wireup-2.11.0/docs/.cache/11707090198648621574 +93 -0
- wireup-2.11.0/docs/.cache/11936269499361824977 +143 -0
- wireup-2.11.0/docs/.cache/12137072172860686655 +230 -0
- wireup-2.11.0/docs/.cache/12219371046269359732 +4 -0
- wireup-2.11.0/docs/.cache/12241555142324881061 +125 -0
- wireup-2.11.0/docs/.cache/12382052977275466893 +77 -0
- wireup-2.11.0/docs/.cache/12499315425330180004 +93 -0
- wireup-2.11.0/docs/.cache/12549328558144052424 +4 -0
- wireup-2.11.0/docs/.cache/1271758769353586558 +4 -0
- wireup-2.11.0/docs/.cache/12752882211929243556 +4 -0
- wireup-2.11.0/docs/.cache/12783426531917578909 +4 -0
- wireup-2.11.0/docs/.cache/13014544647268190247 +4 -0
- wireup-2.11.0/docs/.cache/13370773888390464336 +4 -0
- wireup-2.11.0/docs/.cache/13403801197489695949 +4 -0
- wireup-2.11.0/docs/.cache/13586038107580246457 +77 -0
- wireup-2.11.0/docs/.cache/13775377501054353309 +4 -0
- wireup-2.11.0/docs/.cache/13953017239477616146 +4 -0
- wireup-2.11.0/docs/.cache/14256755113028278147 +4 -0
- wireup-2.11.0/docs/.cache/14282878143828754773 +190 -0
- wireup-2.11.0/docs/.cache/14427624141156888631 +132 -0
- wireup-2.11.0/docs/.cache/14837314323412076685 +4 -0
- wireup-2.11.0/docs/.cache/14882785289163986794 +36 -0
- wireup-2.11.0/docs/.cache/15059192794541587955 +127 -0
- wireup-2.11.0/docs/.cache/15137346072215138130 +4 -0
- wireup-2.11.0/docs/.cache/1531676072290125443 +159 -0
- wireup-2.11.0/docs/.cache/15401149629531751292 +77 -0
- wireup-2.11.0/docs/.cache/15405362896761939504 +128 -0
- wireup-2.11.0/docs/.cache/15746470211891335948 +4 -0
- wireup-2.11.0/docs/.cache/15830373033601161010 +109 -0
- wireup-2.11.0/docs/.cache/15996300901764263280 +4 -0
- wireup-2.11.0/docs/.cache/16124785681570184387 +4 -0
- wireup-2.11.0/docs/.cache/16306461914818170209 +4 -0
- wireup-2.11.0/docs/.cache/16448785645681680385 +61 -0
- wireup-2.11.0/docs/.cache/16478468651222211581 +4 -0
- wireup-2.11.0/docs/.cache/16510109783858621727 +4 -0
- wireup-2.11.0/docs/.cache/17002821459511253445 +61 -0
- wireup-2.11.0/docs/.cache/17090714770585531732 +4 -0
- wireup-2.11.0/docs/.cache/17101920600852032286 +4 -0
- wireup-2.11.0/docs/.cache/17321209195288004123 +4 -0
- wireup-2.11.0/docs/.cache/17346873189989222451 +4 -0
- wireup-2.11.0/docs/.cache/17399689833194377406 +4 -0
- wireup-2.11.0/docs/.cache/17539328537605741444 +4 -0
- wireup-2.11.0/docs/.cache/1756490492350570913 +4 -0
- wireup-2.11.0/docs/.cache/17943827649124903849 +4 -0
- wireup-2.11.0/docs/.cache/1799571417771229608 +4 -0
- wireup-2.11.0/docs/.cache/18069537654268463088 +149 -0
- wireup-2.11.0/docs/.cache/18074172183194207813 +280 -0
- wireup-2.11.0/docs/.cache/18211141398983955737 +94 -0
- wireup-2.11.0/docs/.cache/1848436715989309717 +325 -0
- wireup-2.11.0/docs/.cache/1868758371972416416 +125 -0
- wireup-2.11.0/docs/.cache/1960420391844333246 +4 -0
- wireup-2.11.0/docs/.cache/2225968555155049922 +199 -0
- wireup-2.11.0/docs/.cache/2511243215163562241 +4 -0
- wireup-2.11.0/docs/.cache/2704554805010621494 +125 -0
- wireup-2.11.0/docs/.cache/2931921865184755692 +229 -0
- wireup-2.11.0/docs/.cache/2999542103112937171 +4 -0
- wireup-2.11.0/docs/.cache/3004620347508363551 +4 -0
- wireup-2.11.0/docs/.cache/3009442721481581974 +63 -0
- wireup-2.11.0/docs/.cache/3010889225596071568 +4 -0
- wireup-2.11.0/docs/.cache/302750424423738729 +192 -0
- wireup-2.11.0/docs/.cache/3124270596782374079 +4 -0
- wireup-2.11.0/docs/.cache/3319413828709818644 +173 -0
- wireup-2.11.0/docs/.cache/3390750149037931623 +61 -0
- wireup-2.11.0/docs/.cache/3471250444467953394 +77 -0
- wireup-2.11.0/docs/.cache/3476900567878811119 +4 -0
- wireup-2.11.0/docs/.cache/3590638867109995915 +177 -0
- wireup-2.11.0/docs/.cache/4001189077132631890 +251 -0
- wireup-2.11.0/docs/.cache/4016878668695078294 +354 -0
- wireup-2.11.0/docs/.cache/4120072738616698585 +125 -0
- wireup-2.11.0/docs/.cache/4201971366852234974 +4 -0
- wireup-2.11.0/docs/.cache/4248594428038296655 +4 -0
- wireup-2.11.0/docs/.cache/4538524138372188801 +158 -0
- wireup-2.11.0/docs/.cache/4539372728326409028 +189 -0
- wireup-2.11.0/docs/.cache/4911927025649090134 +4 -0
- wireup-2.11.0/docs/.cache/4917619758752164905 +109 -0
- wireup-2.11.0/docs/.cache/4976624484461351302 +109 -0
- wireup-2.11.0/docs/.cache/5103964541648405045 +418 -0
- wireup-2.11.0/docs/.cache/5173634529580760672 +61 -0
- wireup-2.11.0/docs/.cache/5185194694646499661 +4 -0
- wireup-2.11.0/docs/.cache/5447557034043968735 +4 -0
- wireup-2.11.0/docs/.cache/5542091736194061637 +143 -0
- wireup-2.11.0/docs/.cache/5578944129928319191 +4 -0
- wireup-2.11.0/docs/.cache/5959636093060972256 +36 -0
- wireup-2.11.0/docs/.cache/6275054343417753723 +4 -0
- wireup-2.11.0/docs/.cache/6290230159377794661 +4 -0
- wireup-2.11.0/docs/.cache/6340746870840489245 +141 -0
- wireup-2.11.0/docs/.cache/6893863845257079106 +182 -0
- wireup-2.11.0/docs/.cache/6908721224100469549 +61 -0
- wireup-2.11.0/docs/.cache/7197171008315212702 +4 -0
- wireup-2.11.0/docs/.cache/732882584140681833 +151 -0
- wireup-2.11.0/docs/.cache/7498583298967102244 +127 -0
- wireup-2.11.0/docs/.cache/7585250964433932046 +4 -0
- wireup-2.11.0/docs/.cache/7614840176187686366 +93 -0
- wireup-2.11.0/docs/.cache/7815757281852325210 +4 -0
- wireup-2.11.0/docs/.cache/8050531324635461127 +84 -0
- wireup-2.11.0/docs/.cache/8359729865024621021 +52 -0
- wireup-2.11.0/docs/.cache/8465230536178924220 +4 -0
- wireup-2.11.0/docs/.cache/8473505901324974434 +157 -0
- wireup-2.11.0/docs/.cache/8499329960173449201 +4 -0
- wireup-2.11.0/docs/.cache/8522518034566956890 +4 -0
- wireup-2.11.0/docs/.cache/8564882904539593724 +127 -0
- wireup-2.11.0/docs/.cache/864979656035717678 +95 -0
- wireup-2.11.0/docs/.cache/8861449551378947148 +4 -0
- wireup-2.11.0/docs/.cache/9109427361955673233 +127 -0
- wireup-2.11.0/docs/.cache/9231702844672586930 +4 -0
- wireup-2.11.0/docs/.cache/9252445419859529063 +4 -0
- wireup-2.11.0/docs/.cache/9492146019118239685 +4 -0
- wireup-2.11.0/docs/.cache/9571741227041167117 +4 -0
- wireup-2.11.0/docs/.cache/9664925752586579503 +125 -0
- wireup-2.11.0/docs/.cache/9860729219353091761 +4 -0
- wireup-2.11.0/docs/.cache/9961436229075698645 +4 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/mkdocs.yml +2 -0
- wireup-2.11.0/docs/pages/class/fastapi_integration.md +8 -0
- wireup-2.11.0/docs/pages/class/starlette_integration.md +8 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/container.md +40 -19
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/index.md +5 -44
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/aiohttp/index.md +7 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/click/index.md +7 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/django/index.md +11 -1
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/fastapi/background_tasks.md +1 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/fastapi/index.md +8 -1
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/flask/index.md +7 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/starlette/background_tasks.md +1 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/typer/index.md +7 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/interfaces.md +179 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/lifetimes_and_scopes.md +47 -1
- wireup-2.11.0/docs/pages/packaging_injectables.md +108 -0
- wireup-2.11.0/docs/pages/stylesheets/extra.css +32 -0
- wireup-2.11.0/docs/pages/testing.md +255 -0
- wireup-2.11.0/docs/pages/what_wireup_validates.md +352 -0
- wireup-2.11.0/pet_store_demo_app/README.md +20 -0
- wireup-2.11.0/pet_store_demo_app/__init__.py +1 -0
- wireup-2.11.0/pet_store_demo_app/cbr.py +29 -0
- wireup-2.11.0/pet_store_demo_app/factories.py +22 -0
- wireup-2.11.0/pet_store_demo_app/fastapi_services.py +29 -0
- wireup-2.11.0/pet_store_demo_app/flask_main.py +84 -0
- wireup-2.11.0/pet_store_demo_app/main.py +89 -0
- wireup-2.11.0/pet_store_demo_app/services/__init__.py +17 -0
- wireup-2.11.0/pet_store_demo_app/services/adoption.py +35 -0
- wireup-2.11.0/pet_store_demo_app/services/audit.py +21 -0
- wireup-2.11.0/pet_store_demo_app/services/infra.py +27 -0
- wireup-2.11.0/pet_store_demo_app/services/owners.py +28 -0
- wireup-2.11.0/pet_store_demo_app/services/pets.py +41 -0
- wireup-2.11.0/pet_store_demo_app/services/session.py +23 -0
- {wireup-2.9.0 → wireup-2.11.0}/pyproject.toml +4 -6
- {wireup-2.9.0 → wireup-2.11.0}/readme.md +3 -4
- {wireup-2.9.0 → wireup-2.11.0}/test/conftest.py +1 -3
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/aiohttp/test_aiohttp_integration.py +1 -1
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/asgi/test_asgi_integration.py +1 -1
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/celery/test_celery_integration.py +1 -1
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/click/test_click_integration.py +2 -1
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/test_django_integration.py +9 -8
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/view.py +2 -1
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/fastapi/cbr.py +2 -2
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/fastapi/router.py +4 -5
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/fastapi/test_fastapi_integration.py +110 -11
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/flask/bp.py +2 -3
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/flask/services/is_test_service.py +1 -1
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/flask/test_flask_integration.py +2 -1
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/starlette/test_starlette_integration.py +103 -1
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/typer/test_typer_integration.py +2 -3
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/services/with_annotations/env/__init__.py +2 -1
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/services/with_annotations/services.py +1 -1
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_as_type.py +9 -7
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_compiler_code_generation.py +4 -2
- wireup-2.11.0/test/unit/test_container_collection_injection.py +367 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_container_core.py +28 -17
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_container_creation.py +59 -17
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_container_generator_factory.py +2 -1
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_container_override.py +75 -3
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_container_scope.py +36 -1
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_eval_type.py +1 -1
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_exit_stack.py +1 -1
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_inject_from_container.py +42 -18
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_inject_from_container_optional_types.py +17 -13
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_inject_from_container_stringified_types.py +1 -1
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_instance.py +2 -1
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_optional_type.py +30 -11
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_pos_only_validation.py +2 -1
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_service_registry.py +3 -4
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_signature_hiding.py +1 -1
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_type_analysis.py +24 -11
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_util.py +2 -2
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/util.py +4 -1
- {wireup-2.9.0 → wireup-2.11.0}/uv.lock +250 -1720
- {wireup-2.9.0 → wireup-2.11.0}/wireup/__init__.py +4 -4
- {wireup-2.9.0 → wireup-2.11.0}/wireup/_annotations.py +3 -3
- {wireup-2.9.0 → wireup-2.11.0}/wireup/_decorators.py +22 -14
- {wireup-2.9.0 → wireup-2.11.0}/wireup/_discovery.py +4 -1
- {wireup-2.9.0 → wireup-2.11.0}/wireup/_instance.py +3 -1
- {wireup-2.9.0 → wireup-2.11.0}/wireup/_wrapper_compiler.py +3 -1
- {wireup-2.9.0 → wireup-2.11.0}/wireup/codegen.py +1 -3
- {wireup-2.9.0 → wireup-2.11.0}/wireup/errors.py +58 -1
- {wireup-2.9.0 → wireup-2.11.0}/wireup/integration/aiohttp.py +5 -4
- {wireup-2.9.0 → wireup-2.11.0}/wireup/integration/celery.py +3 -1
- {wireup-2.9.0 → wireup-2.11.0}/wireup/integration/django/apps.py +6 -5
- {wireup-2.9.0 → wireup-2.11.0}/wireup/integration/django/decorators.py +2 -1
- {wireup-2.9.0 → wireup-2.11.0}/wireup/integration/fastapi.py +7 -14
- {wireup-2.9.0 → wireup-2.11.0}/wireup/integration/flask.py +1 -3
- {wireup-2.9.0 → wireup-2.11.0}/wireup/integration/starlette.py +14 -2
- {wireup-2.9.0 → wireup-2.11.0}/wireup/ioc/_exit_stack.py +2 -9
- {wireup-2.9.0 → wireup-2.11.0}/wireup/ioc/configuration.py +2 -3
- {wireup-2.9.0 → wireup-2.11.0}/wireup/ioc/container/__init__.py +17 -3
- {wireup-2.9.0 → wireup-2.11.0}/wireup/ioc/container/async_container.py +12 -5
- {wireup-2.9.0 → wireup-2.11.0}/wireup/ioc/container/base_container.py +2 -1
- {wireup-2.9.0 → wireup-2.11.0}/wireup/ioc/container/sync_container.py +5 -2
- {wireup-2.9.0 → wireup-2.11.0}/wireup/ioc/dependency_introspection.py +0 -2
- {wireup-2.9.0 → wireup-2.11.0}/wireup/ioc/factory_compiler.py +11 -3
- {wireup-2.9.0 → wireup-2.11.0}/wireup/ioc/override_manager.py +2 -2
- {wireup-2.9.0 → wireup-2.11.0}/wireup/ioc/registry.py +149 -10
- {wireup-2.9.0 → wireup-2.11.0}/wireup/ioc/registry_validation.py +12 -1
- {wireup-2.9.0 → wireup-2.11.0}/wireup/ioc/type_analysis.py +14 -15
- {wireup-2.9.0 → wireup-2.11.0}/wireup/ioc/types.py +6 -8
- {wireup-2.9.0 → wireup-2.11.0}/wireup/ioc/util.py +3 -3
- {wireup-2.9.0 → wireup-2.11.0}/wireup/util.py +1 -4
- wireup-2.11.0/z_docs/.obsidian/appearance.json +3 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_docs/.obsidian/workspace.json +24 -14
- wireup-2.11.0/z_docs/drafts/codex_r_fastapi_post copy.md +84 -0
- wireup-2.11.0/z_docs/drafts/codex_r_fastapi_post.md +81 -0
- wireup-2.11.0/z_docs/ideas/collection_injection_docs_draft.md +276 -0
- wireup-2.11.0/z_docs/ideas/config_and_qualified_type_sugar.md +98 -0
- wireup-2.11.0/z_docs/ideas/docs_map_for_default_llm_choice.md +323 -0
- wireup-2.11.0/z_docs/ideas/lazy.md +513 -0
- wireup-2.11.0/z_docs/ideas/mapping_collection_injection_api.md +469 -0
- wireup-2.11.0/z_docs/ideas/readme update - advanced section.md +12 -0
- wireup-2.11.0/z_docs/ideas/scoped_override.md +304 -0
- wireup-2.11.0/z_docs/ideas/tagged_collection_injection_sketch.md +527 -0
- wireup-2.11.0/z_docs/ideas/tmp_sequence_filter_demo.py +80 -0
- wireup-2.11.0/z_docs/ideas/wrap_with_dependencies.md +78 -0
- wireup-2.11.0/z_sugar.py +28 -0
- wireup-2.11.0/z_test.py +36 -0
- wireup-2.11.0/z_test_2.py +19 -0
- wireup-2.11.0/z_test_3.py +24 -0
- wireup-2.11.0/z_test_bug.py +9 -0
- wireup-2.11.0/z_test_services/__init__.py +0 -0
- wireup-2.11.0/z_z.py +70 -0
- wireup-2.11.0/z_zz.py +105 -0
- wireup-2.9.0/.agent/rules.md +0 -3
- wireup-2.9.0/docs/pages/class/fastapi_integration.md +0 -3
- wireup-2.9.0/docs/pages/class/starlette_integration.md +0 -3
- wireup-2.9.0/docs/pages/stylesheets/extra.css +0 -83
- wireup-2.9.0/docs/pages/testing.md +0 -220
- wireup-2.9.0/z_docs/.obsidian/appearance.json +0 -3
- wireup-2.9.0/z_docs/drafts/codex_r_fastapi_post.md +0 -88
- wireup-2.9.0/z_docs/ideas/z_test_glm_testing_report.md +0 -479
- wireup-2.9.0/z_docs/ideas/z_test_new_integrations.md +0 -134
- wireup-2.9.0/z_test.py +0 -10
- wireup-2.9.0/z_test_2.8.0_release.md +0 -97
- wireup-2.9.0/z_test_bug.py +0 -12
- {wireup-2.9.0/.agent → wireup-2.11.0/.agents}/workflows/context.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/.gitignore +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/10044845188665810066 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/10294724371649670728 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/1076323475707195139 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/11070404547826992651 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/11124823139456244859 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/11293014782143221354 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/1226111022864589093 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/12549328558144052424 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/1271758769353586558 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/12733979256433392731 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/12752882211929243556 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/12783426531917578909 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/12830345886006928062 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/13014544647268190247 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/13083424730640715152 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/13128933095426148813 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/13370773888390464336 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/13403801197489695949 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/1361555227596880095 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/13775377501054353309 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/1439640565749963662 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/14761872988004119841 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/14837314323412076685 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/15018906666218230475 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/15137346072215138130 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/15746470211891335948 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/16124785681570184387 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/16306461914818170209 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/17346873189989222451 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/17539328537605741444 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/1756490492350570913 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/17695288524157522424 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/17993352065017356676 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/2491296543125450213 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/2511243215163562241 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/2989687286403812976 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/3004183706503532835 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/3121150246064866450 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/3124270596782374079 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/3476900567878811119 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/3702806183923662406 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/4201971366852234974 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/4248594428038296655 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/4328746867122106743 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/453810864507090243 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/4607165423255654887 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/4655087458686603143 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/4911927025649090134 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/5545364815676479752 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/5582803025959560496 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/6446587083349335436 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/7197171008315212702 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/7815757281852325210 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/7940362391983581688 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/8465230536178924220 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/8499329960173449201 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/8504618348287803373 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/8761805547931915049 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/918853441261096549 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/9231702844672586930 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/9252445419859529063 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/9597896872206851048 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/9860729219353091761 +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.cache/9961436229075698645 +0 -0
- /wireup-2.9.0/benchmarks/wireup_benchmarks/__init__.py → /wireup-2.11.0/.codex +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.github/workflows/run_integration_tests.yml +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.gitignore +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.vscode/launch.json +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/.vscode/settings.json +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/Makefile +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/benchmarks/benchmark_meta.json +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/benchmarks/benchmark_results.csv +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/benchmarks/benchmark_run_metrics.csv +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/benchmarks/generate_tables.py +0 -0
- {wireup-2.9.0/test → wireup-2.11.0/benchmarks/wireup_benchmarks}/__init__.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/benchmarks/wireup_benchmarks/app.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/.cache/.gitignore +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/overrides/main.html +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/benchmarks.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/class/aiohttp_integration.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/class/asgi_integration.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/class/celery_integration.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/class/click_integration.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/class/config_store.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/class/django_integration.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/class/fastmcp_integration.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/class/flask_integration.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/class/override_manager.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/class/typer_integration.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/class/wireup.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/conditional_registration.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/configuration.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/factories.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/function_injection.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/generic_dependencies.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/getting_started.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/img/benchmarks_scoped_dark.svg +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/img/benchmarks_scoped_light.svg +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/img/benchmarks_singleton_dark.svg +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/img/benchmarks_singleton_light.svg +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/injectables.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/aiohttp/class_based_handlers.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/asgi/generic_asgi.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/celery/index.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/django/app_injection.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/django/request_time_injection.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/django/setup.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/django/testing.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/django/troubleshooting.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/django/view_injection.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/fastapi/class_based_handlers.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/fastapi/context_in_services.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/fastapi/inject_in_routes.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/fastapi/request_time_injection.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/fastapi/testing.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/fastapi/troubleshooting.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/fastmcp/index.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/index.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/starlette/index.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/strawberry/index.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/migrate_to_wireup/dependency_injector.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/migrate_to_wireup/fastapi_depends.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/migrate_to_wireup/index.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/resources.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/reusable_bundles.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/upgrading.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/docs/pages/versioning.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/license.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/profile_tests.py +0 -0
- {wireup-2.9.0/test/integration → wireup-2.11.0/test}/__init__.py +0 -0
- {wireup-2.9.0/test/integration/aiohttp → wireup-2.11.0/test/integration}/__init__.py +0 -0
- {wireup-2.9.0/test/integration/click → wireup-2.11.0/test/integration/aiohttp}/__init__.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/aiohttp/handler.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/aiohttp/routes.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/aiohttp/services.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/asgi/__init__.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/celery/__init__.py +0 -0
- {wireup-2.9.0/test/integration/django → wireup-2.11.0/test/integration/click}/__init__.py +0 -0
- {wireup-2.9.0/test/integration/django/apps → wireup-2.11.0/test/integration/django}/__init__.py +0 -0
- {wireup-2.9.0/test/integration/django/apps/app_1 → wireup-2.11.0/test/integration/django/apps}/__init__.py +0 -0
- {wireup-2.9.0/test/integration/django/apps/app_2 → wireup-2.11.0/test/integration/django/apps/app_1}/__init__.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/apps/app_1/app.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/apps/app_1/management/__init__.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/apps/app_1/management/commands/__init__.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/apps/app_1/management/commands/wireup_greet.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/apps/app_1/urls.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/apps/app_1/views.py +0 -0
- {wireup-2.9.0/test/integration/django/apps/drf_app → wireup-2.11.0/test/integration/django/apps/app_2}/__init__.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/apps/app_2/app.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/apps/app_2/urls.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/apps/app_2/views.py +0 -0
- {wireup-2.9.0/test/integration/django/apps/ninja_app → wireup-2.11.0/test/integration/django/apps/drf_app}/__init__.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/apps/drf_app/app.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/apps/drf_app/urls.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/apps/drf_app/views.py +0 -0
- {wireup-2.9.0/test/integration/django/factory → wireup-2.11.0/test/integration/django/apps/ninja_app}/__init__.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/apps/ninja_app/app.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/apps/ninja_app/urls.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/apps/ninja_app/views.py +0 -0
- {wireup-2.9.0/test/integration/django/injectable → wireup-2.11.0/test/integration/django/factory}/__init__.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/factory/factories.py +0 -0
- {wireup-2.9.0/test/integration/fastapi → wireup-2.11.0/test/integration/django/injectable}/__init__.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/injectable/current_request_service.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/injectable/random_service.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/templates/bar.html +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/templates/foo.html +0 -0
- {wireup-2.9.0/test/integration/flask → wireup-2.11.0/test/integration/fastapi}/__init__.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/fastapi/services.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/fastapi/test_fastapi_codegen_snapshots.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/fastapi/wireup_route.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/fastmcp/__init__.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/fastmcp/test_fastmcp_standalone_usage.py +0 -0
- {wireup-2.9.0/test/integration/flask/services → wireup-2.11.0/test/integration/flask}/__init__.py +0 -0
- {wireup-2.9.0/test/integration/starlette → wireup-2.11.0/test/integration/flask/services}/__init__.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/flask/services/factories.py +0 -0
- {wireup-2.9.0/test/shared → wireup-2.11.0/test/integration/starlette}/__init__.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/strawberry/__init__.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/strawberry/test_strawberry_django_usage.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/strawberry/test_strawberry_fastapi_usage.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/strawberry/test_strawberry_starlette_usage.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/integration/typer/__init__.py +0 -0
- {wireup-2.9.0/test/shared/shared_services → wireup-2.11.0/test/shared}/__init__.py +0 -0
- {wireup-2.9.0/test/unit → wireup-2.11.0/test/shared/shared_services}/__init__.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/shared/shared_services/greeter.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/shared/shared_services/rand.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/shared/shared_services/scoped.py +0 -0
- {wireup-2.9.0/test/unit/services/no_annotations/random → wireup-2.11.0/test/unit}/__init__.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/service_refs/__init__.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/services/__init__.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/services/abstract_multiple_bases.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/services/async_reg.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/services/inheritance_test/__init__.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/services/inheritance_test/base.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/services/no_annotations/__init__.py +0 -0
- {wireup-2.9.0/test/unit/services/with_annotations → wireup-2.11.0/test/unit/services/no_annotations/random}/__init__.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/services/no_annotations/random/random_service.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/services/no_annotations/random/truly_random_service.py +0 -0
- {wireup-2.9.0/wireup/integration → wireup-2.11.0/test/unit/services/with_annotations}/__init__.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_concurrency.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_module_loading.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_parameter.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_service_deprecation.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/tox.ini +0 -0
- {wireup-2.9.0/wireup/ioc → wireup-2.11.0/wireup/integration}/__init__.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/wireup/integration/asgi.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/wireup/integration/click.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/wireup/integration/django/__init__.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/wireup/integration/fastmcp.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/wireup/integration/typer.py +0 -0
- {wireup-2.9.0/z_prep → wireup-2.11.0/wireup/ioc}/__init__.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/wireup/ioc/container/lock_registry.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/wireup/py.typed +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_docs/.obsidian/app.json +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_docs/.obsidian/core-plugins.json +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_docs/drafts/codex_djangoforum.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_docs/drafts/codex_fastmcp_post.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_docs/drafts/coxed_fastapi_discussion.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_docs/drafts/coxed_fastmcp_post.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_docs/drafts/coxed_strawberry_discussion.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_docs/drafts/dodona_march_en.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_docs/drafts/hrt.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_docs/drafts/open_generics.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_docs/ideas/nested scopes.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_docs/ideas/post_aggregates_followups.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_docs/ideas/transactional.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_docs/ideas/wireup_provided.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_docs/ideas/z_test_community_engagement.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_docs/ideas/z_test_dependency_injector.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_docs/ideas/z_test_seo_plan.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_docs/ideas/z_test_wireup_seo_plan_2026.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_docs/style/docs_voice.md +0 -0
- {wireup-2.9.0/z_test_services → wireup-2.11.0/z_prep}/__init__.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_prep/js_stack.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_cit_code1.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_cit_code2.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_cit_palindrome.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_citadel_oa1.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt10.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt11.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt12.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt13.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt14.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt15.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt16.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt17.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt18.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt2.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt3.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt4.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt5.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt6.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt7.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt8.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt9.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_js_code1.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_js_code2.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_py.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_test_benchmark.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_test_dict.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_test_fastapi.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_test_get_typeform.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_test_hash.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_test_inject_from_container.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_test_instance.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_test_leetcode_arrays_lists.md +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_test_misc.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_test_provider_style.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_test_reusable.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_test_services/bar.py +0 -0
- {wireup-2.9.0 → wireup-2.11.0}/z_test_services/foo.py +0 -0
|
@@ -38,7 +38,7 @@ make lint test
|
|
|
38
38
|
|
|
39
39
|
## Guidelines
|
|
40
40
|
|
|
41
|
-
- **Python Support**: Target Python 3.
|
|
41
|
+
- **Python Support**: Target Python 3.10+ compatibility
|
|
42
42
|
- **Dependencies**: No new dependencies without approval
|
|
43
43
|
- **Documentation**: Update docs for user-facing changes
|
|
44
44
|
- **Testing**: Maintain test coverage for new code
|
|
@@ -13,7 +13,7 @@ jobs:
|
|
|
13
13
|
- name: Set up Python
|
|
14
14
|
uses: actions/setup-python@v4
|
|
15
15
|
with:
|
|
16
|
-
python-version: "3.
|
|
16
|
+
python-version: "3.10"
|
|
17
17
|
- name: Install uv
|
|
18
18
|
uses: astral-sh/setup-uv@v5
|
|
19
19
|
- name: Install dependencies
|
|
@@ -46,7 +46,7 @@ jobs:
|
|
|
46
46
|
runs-on: ubuntu-latest
|
|
47
47
|
strategy:
|
|
48
48
|
matrix:
|
|
49
|
-
python-version: ["3.
|
|
49
|
+
python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
|
|
50
50
|
steps:
|
|
51
51
|
- uses: actions/checkout@v3
|
|
52
52
|
- name: Set up Python ${{ matrix.python-version }}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: wireup
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.11.0
|
|
4
4
|
Summary: Python Dependency Injection Library
|
|
5
5
|
Project-URL: Homepage, https://github.com/maldoinc/wireup
|
|
6
6
|
Project-URL: Repository, https://github.com/maldoinc/wireup
|
|
@@ -21,8 +21,6 @@ Classifier: License :: OSI Approved :: MIT License
|
|
|
21
21
|
Classifier: Operating System :: OS Independent
|
|
22
22
|
Classifier: Programming Language :: Python
|
|
23
23
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
24
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
25
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
26
24
|
Classifier: Programming Language :: Python :: 3.10
|
|
27
25
|
Classifier: Programming Language :: Python :: 3.11
|
|
28
26
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -30,7 +28,7 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
30
28
|
Classifier: Programming Language :: Python :: 3.14
|
|
31
29
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
32
30
|
Classifier: Typing :: Typed
|
|
33
|
-
Requires-Python: >=3.
|
|
31
|
+
Requires-Python: >=3.10
|
|
34
32
|
Requires-Dist: typing-extensions>=4.7
|
|
35
33
|
Provides-Extra: eval-type
|
|
36
34
|
Requires-Dist: eval-type-backport>=0.2.0; (python_version < '3.11') and extra == 'eval-type'
|
|
@@ -67,7 +65,7 @@ Reuse the same application code in APIs, CLIs, workers, and scripts without rewr
|
|
|
67
65
|
</td>
|
|
68
66
|
<td align="center" valign="top" width="33%">
|
|
69
67
|
<h3>✅ Correct by Default</h3>
|
|
70
|
-
If the container starts, your dependency graph is valid. Wireup checks for missing or misconfigured dependencies to avoid surprises at runtime.
|
|
68
|
+
If the container starts, your dependency graph is valid. Wireup checks for missing or misconfigured dependencies to avoid surprises at runtime. See <a href="https://maldoinc.github.io/wireup/latest/what_wireup_validates/">What Wireup Validates</a>
|
|
71
69
|
</td>
|
|
72
70
|
<td align="center" valign="top" width="33%">
|
|
73
71
|
<h3>🌐 Framework-Ready</h3>
|
|
@@ -83,8 +81,7 @@ Resolve singleton constructor dependencies once at startup in <a href="https://m
|
|
|
83
81
|
<h3>🧩 Advanced Wiring</h3>
|
|
84
82
|
Go beyond simple constructor injection with
|
|
85
83
|
<a href="https://maldoinc.github.io/wireup/latest/reusable_bundles/">reusable bundles</a>,
|
|
86
|
-
<a href="https://maldoinc.github.io/wireup/latest/lifetimes_and_scopes/">explicit scope context sharing</a>, and
|
|
87
|
-
more using plain Python.
|
|
84
|
+
<a href="https://maldoinc.github.io/wireup/latest/lifetimes_and_scopes/">explicit scope context sharing</a>, <a href="https://maldoinc.github.io/wireup/latest/interfaces/#collection-injection">collection injection</a>, and more using plain Python.
|
|
88
85
|
</td>
|
|
89
86
|
<td align="center" valign="top">
|
|
90
87
|
<h3>🧪 Easy to test</h3>
|
|
@@ -311,7 +308,7 @@ class OrderProcessor:
|
|
|
311
308
|
|
|
312
309
|
### 🛡️ Startup Validation
|
|
313
310
|
|
|
314
|
-
Wireup validates the dependency graph when the container is created.
|
|
311
|
+
Wireup validates the dependency graph when the container is created. See <a href="https://maldoinc.github.io/wireup/latest/what_wireup_validates/">What Wireup Validates</a> for the full rules and limits.
|
|
315
312
|
|
|
316
313
|
```python
|
|
317
314
|
# Missing dependencies: caught at startup, not at runtime
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
# /// script
|
|
2
4
|
# dependencies = [
|
|
3
5
|
# "rich==14.2.0",
|
|
@@ -35,7 +37,7 @@ import urllib.error
|
|
|
35
37
|
import urllib.request
|
|
36
38
|
from contextlib import suppress
|
|
37
39
|
from io import StringIO
|
|
38
|
-
from typing import
|
|
40
|
+
from typing import TYPE_CHECKING, Any, TextIO
|
|
39
41
|
|
|
40
42
|
import psutil
|
|
41
43
|
from rich.console import Console, Group
|
|
@@ -44,6 +46,9 @@ from rich.panel import Panel
|
|
|
44
46
|
from rich.text import Text
|
|
45
47
|
from rich.table import Table
|
|
46
48
|
|
|
49
|
+
if TYPE_CHECKING:
|
|
50
|
+
from collections.abc import Callable
|
|
51
|
+
|
|
47
52
|
# Configuration
|
|
48
53
|
PROJECTS = {
|
|
49
54
|
"globals": "Manual Wiring (No DI)",
|
|
@@ -68,8 +73,8 @@ SERVER_LOG = "benchmarks/server.log"
|
|
|
68
73
|
HEY_BIN = "hey"
|
|
69
74
|
STARTUP_TIMEOUT_S = 20.0
|
|
70
75
|
STARTUP_POLL_INTERVAL_S = 0.1
|
|
71
|
-
BenchIteration =
|
|
72
|
-
BenchResult =
|
|
76
|
+
BenchIteration = dict[str, Any]
|
|
77
|
+
BenchResult = dict[str, Any]
|
|
73
78
|
TIMING_COLUMNS = [
|
|
74
79
|
("response-time", "latency"),
|
|
75
80
|
]
|
|
@@ -130,7 +135,7 @@ def get_free_port() -> int:
|
|
|
130
135
|
return s.getsockname()[1]
|
|
131
136
|
|
|
132
137
|
|
|
133
|
-
def resolve_repo_paths() ->
|
|
138
|
+
def resolve_repo_paths() -> tuple[str, str]:
|
|
134
139
|
benchmarks_dir = os.path.dirname(os.path.abspath(__file__))
|
|
135
140
|
repo_root = os.path.dirname(benchmarks_dir)
|
|
136
141
|
return repo_root, benchmarks_dir
|
|
@@ -138,7 +143,7 @@ def resolve_repo_paths() -> Tuple[str, str]:
|
|
|
138
143
|
|
|
139
144
|
def build_runner_env(
|
|
140
145
|
project: str, bench_assert: bool, use_local_version: bool, repo_root: str, benchmarks_dir: str
|
|
141
|
-
) ->
|
|
146
|
+
) -> dict[str, str]:
|
|
142
147
|
env = os.environ.copy()
|
|
143
148
|
env["PROJECT"] = project
|
|
144
149
|
if bench_assert:
|
|
@@ -178,7 +183,7 @@ def wait_for_server_ready(process: subprocess.Popen[Any], port: int, timeout_s:
|
|
|
178
183
|
raise TimeoutError(msg)
|
|
179
184
|
|
|
180
185
|
|
|
181
|
-
def start_server(port: int, env:
|
|
186
|
+
def start_server(port: int, env: dict[str, str], benchmarks_dir: str, log_file: TextIO) -> subprocess.Popen[Any]:
|
|
182
187
|
cmd = [sys.executable, "-m", "uvicorn", "wireup_benchmarks.app:app", "--port", str(port)]
|
|
183
188
|
log_file.flush()
|
|
184
189
|
process = subprocess.Popen(
|
|
@@ -201,7 +206,7 @@ def start_server(port: int, env: Dict[str, str], benchmarks_dir: str, log_file:
|
|
|
201
206
|
return process
|
|
202
207
|
|
|
203
208
|
|
|
204
|
-
def percentile(values:
|
|
209
|
+
def percentile(values: list[float], p: float) -> float:
|
|
205
210
|
if not values:
|
|
206
211
|
return 0.0
|
|
207
212
|
if p <= 0:
|
|
@@ -216,7 +221,7 @@ def percentile(values: List[float], p: float) -> float:
|
|
|
216
221
|
return values[lo] + (values[hi] - values[lo]) * (idx - lo)
|
|
217
222
|
|
|
218
223
|
|
|
219
|
-
def compute_series_stats_ms(values_seconds:
|
|
224
|
+
def compute_series_stats_ms(values_seconds: list[float]) -> dict[str, float]:
|
|
220
225
|
if not values_seconds:
|
|
221
226
|
return {
|
|
222
227
|
"p50_ms": 0.0,
|
|
@@ -238,7 +243,7 @@ def compute_series_stats_ms(values_seconds: List[float]) -> Dict[str, float]:
|
|
|
238
243
|
|
|
239
244
|
def monitor_memory_usage(
|
|
240
245
|
process: psutil.Process, stop_event: threading.Event, sample_interval_s: float = 0.02
|
|
241
|
-
) ->
|
|
246
|
+
) -> dict[str, float]:
|
|
242
247
|
rss_peak = 0.0
|
|
243
248
|
|
|
244
249
|
while not stop_event.is_set():
|
|
@@ -252,9 +257,9 @@ def monitor_memory_usage(
|
|
|
252
257
|
return {"rss_peak_mb": rss_peak}
|
|
253
258
|
|
|
254
259
|
|
|
255
|
-
def run_load_test(url: str, total_requests: int, concurrency: int) ->
|
|
256
|
-
latencies:
|
|
257
|
-
status_codes:
|
|
260
|
+
def run_load_test(url: str, total_requests: int, concurrency: int) -> dict[str, Any]:
|
|
261
|
+
latencies: list[float] = []
|
|
262
|
+
status_codes: list[int] = []
|
|
258
263
|
|
|
259
264
|
cmd = [HEY_BIN, "-n", str(total_requests), "-c", str(concurrency), "-o", "csv", url]
|
|
260
265
|
start_global = time.perf_counter()
|
|
@@ -310,7 +315,7 @@ def run_load_test(url: str, total_requests: int, concurrency: int) -> Dict[str,
|
|
|
310
315
|
}
|
|
311
316
|
|
|
312
317
|
|
|
313
|
-
def assert_workload(port: int) ->
|
|
318
|
+
def assert_workload(port: int) -> tuple[bool, dict[str, Any]]:
|
|
314
319
|
url = f"http://127.0.0.1:{port}/assert-workload"
|
|
315
320
|
try:
|
|
316
321
|
with urllib.request.urlopen(url) as response: # noqa: S310
|
|
@@ -333,7 +338,7 @@ def run_benchmark(
|
|
|
333
338
|
warmup_requests: int,
|
|
334
339
|
use_local_version: bool,
|
|
335
340
|
bench_assert: bool,
|
|
336
|
-
) ->
|
|
341
|
+
) -> BenchIteration | None:
|
|
337
342
|
print(f"--- Benchmarking {project} - {test_name} ---")
|
|
338
343
|
|
|
339
344
|
# Start Server
|
|
@@ -360,7 +365,7 @@ def run_benchmark(
|
|
|
360
365
|
|
|
361
366
|
# Run single measured load test
|
|
362
367
|
stop_event = threading.Event()
|
|
363
|
-
monitor_result:
|
|
368
|
+
monitor_result: dict[str, float] = {"rss_peak_mb": 0.0}
|
|
364
369
|
|
|
365
370
|
def sample_memory() -> None:
|
|
366
371
|
nonlocal monitor_result
|
|
@@ -422,7 +427,7 @@ def run_benchmark(
|
|
|
422
427
|
def summarize_runs(
|
|
423
428
|
project_id: str,
|
|
424
429
|
test_name: str,
|
|
425
|
-
runs:
|
|
430
|
+
runs: list[BenchIteration],
|
|
426
431
|
runs_completed: int,
|
|
427
432
|
runs_total: int,
|
|
428
433
|
) -> BenchResult:
|
|
@@ -502,10 +507,10 @@ def main() -> None:
|
|
|
502
507
|
completed_runs = 0
|
|
503
508
|
benchmark_start = time.perf_counter()
|
|
504
509
|
|
|
505
|
-
all_results:
|
|
510
|
+
all_results: list[BenchResult] = []
|
|
506
511
|
fieldnames = SUMMARY_FIELDNAMES
|
|
507
512
|
run_fieldnames = RUN_FIELDNAMES
|
|
508
|
-
run_state:
|
|
513
|
+
run_state: dict[tuple[str, str], list[BenchIteration]] = {pair: [] for pair in pairs}
|
|
509
514
|
|
|
510
515
|
# Ensure output directory exists
|
|
511
516
|
output_dir = os.path.dirname(args.output)
|
|
@@ -525,7 +530,7 @@ def main() -> None:
|
|
|
525
530
|
|
|
526
531
|
console = Console()
|
|
527
532
|
|
|
528
|
-
def build_table(title: str, results:
|
|
533
|
+
def build_table(title: str, results: list[BenchResult]) -> Table | None:
|
|
529
534
|
if not results:
|
|
530
535
|
return None
|
|
531
536
|
|
|
@@ -557,7 +562,7 @@ def main() -> None:
|
|
|
557
562
|
|
|
558
563
|
return table
|
|
559
564
|
|
|
560
|
-
in_progress:
|
|
565
|
+
in_progress: dict[tuple[str, str], BenchResult] = {}
|
|
561
566
|
current_iteration_line = ""
|
|
562
567
|
current_iteration_progress = ""
|
|
563
568
|
|
|
@@ -581,7 +586,7 @@ def main() -> None:
|
|
|
581
586
|
f"Elapsed: {format_duration(elapsed)} ETA: {format_duration(eta)}"
|
|
582
587
|
)
|
|
583
588
|
|
|
584
|
-
parts:
|
|
589
|
+
parts: list[Any] = []
|
|
585
590
|
parts.append(Panel(progress, title="Progress", expand=False))
|
|
586
591
|
singleton_table = build_table("Benchmark Results - Singleton (So Far)", singleton_results)
|
|
587
592
|
scoped_table = build_table("Benchmark Results - Scoped (So Far)", scoped_results)
|
|
@@ -642,7 +647,7 @@ def main() -> None:
|
|
|
642
647
|
bench_assert=args.bench_assert,
|
|
643
648
|
)
|
|
644
649
|
if res:
|
|
645
|
-
run_row:
|
|
650
|
+
run_row: dict[str, Any] = dict.fromkeys(run_fieldnames, "")
|
|
646
651
|
run_row.update(
|
|
647
652
|
{
|
|
648
653
|
"project_id": project_id,
|
|
@@ -7,7 +7,7 @@ import argparse
|
|
|
7
7
|
import csv
|
|
8
8
|
import os
|
|
9
9
|
from collections import defaultdict
|
|
10
|
-
from typing import
|
|
10
|
+
from typing import TypedDict
|
|
11
11
|
|
|
12
12
|
import matplotlib.pyplot as plt
|
|
13
13
|
|
|
@@ -23,9 +23,9 @@ class ChartItem(TypedDict):
|
|
|
23
23
|
rps: float
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
def load_data(csv_path: str) ->
|
|
26
|
+
def load_data(csv_path: str) -> dict[str, list[ChartItem]]:
|
|
27
27
|
"""Loads CSV data and returns a dict grouped by test type."""
|
|
28
|
-
data_by_test:
|
|
28
|
+
data_by_test: defaultdict[str, list[ChartItem]] = defaultdict(list)
|
|
29
29
|
|
|
30
30
|
with open(csv_path, encoding="utf-8") as f:
|
|
31
31
|
reader = csv.DictReader(f)
|
|
@@ -40,7 +40,7 @@ def load_data(csv_path: str) -> Dict[str, List[ChartItem]]:
|
|
|
40
40
|
return data_by_test
|
|
41
41
|
|
|
42
42
|
|
|
43
|
-
def create_chart(title: str, data:
|
|
43
|
+
def create_chart(title: str, data: list[ChartItem], filename: str, text_color: str = "black") -> None:
|
|
44
44
|
if not data:
|
|
45
45
|
return
|
|
46
46
|
|
|
@@ -62,7 +62,7 @@ def create_chart(title: str, data: List[ChartItem], filename: str, text_color: s
|
|
|
62
62
|
bars = ax.barh(names, rps_values, color=colors, height=0.6) # Slightly thinner bars
|
|
63
63
|
|
|
64
64
|
# Make "Manual Wiring (No DI)" visually distinct: outline + diagonal hatch.
|
|
65
|
-
for bar, item in zip(bars, data):
|
|
65
|
+
for bar, item in zip(bars, data, strict=False):
|
|
66
66
|
if item["name"].lower().startswith("globals"):
|
|
67
67
|
outline = "#cecece" if text_color == "black" else "#cecece"
|
|
68
68
|
bar.set_facecolor("none")
|
|
@@ -88,7 +88,7 @@ def create_chart(title: str, data: List[ChartItem], filename: str, text_color: s
|
|
|
88
88
|
ax.set_xlim(0, max_rps + label_pad * 8)
|
|
89
89
|
|
|
90
90
|
# Add value labels
|
|
91
|
-
for bar, item in zip(bars, data):
|
|
91
|
+
for bar, item in zip(bars, data, strict=False):
|
|
92
92
|
width = bar.get_width()
|
|
93
93
|
is_wireup = "wireup" in item["name"].lower()
|
|
94
94
|
|
|
@@ -1,18 +1,17 @@
|
|
|
1
1
|
import re
|
|
2
2
|
import os
|
|
3
|
-
from typing import List
|
|
4
3
|
|
|
5
4
|
# Configuration
|
|
6
5
|
RUNNER_PATH = "benchmarks/bench_runner.py"
|
|
7
6
|
DOCS_PATH = "docs/pages/benchmarks.md"
|
|
8
7
|
|
|
9
8
|
|
|
10
|
-
def extract_versions() ->
|
|
9
|
+
def extract_versions() -> list[str]:
|
|
11
10
|
with open(RUNNER_PATH, "r") as f:
|
|
12
11
|
content = f.read()
|
|
13
12
|
|
|
14
13
|
lines = content.splitlines()
|
|
15
|
-
dep_lines:
|
|
14
|
+
dep_lines: list[str] = []
|
|
16
15
|
in_deps = False
|
|
17
16
|
|
|
18
17
|
for line in lines:
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import contextlib
|
|
2
|
-
from typing import Dict
|
|
3
2
|
|
|
4
3
|
import aioinject
|
|
5
4
|
import fastapi
|
|
@@ -28,7 +27,7 @@ router = fastapi.APIRouter()
|
|
|
28
27
|
|
|
29
28
|
@router.get("/aioinject/singleton")
|
|
30
29
|
@inject
|
|
31
|
-
async def wireup_singleton(a: Injected[A], b: Injected[B]) ->
|
|
30
|
+
async def wireup_singleton(a: Injected[A], b: Injected[B]) -> dict[str, str]:
|
|
32
31
|
services.record_request("singleton")
|
|
33
32
|
assert a.start == 10
|
|
34
33
|
assert isinstance(a, A)
|
|
@@ -49,7 +48,7 @@ async def wireup_scoped(
|
|
|
49
48
|
g: Injected[G],
|
|
50
49
|
h: Injected[H],
|
|
51
50
|
i: Injected[I],
|
|
52
|
-
) ->
|
|
51
|
+
) -> dict[str, str]:
|
|
53
52
|
services.record_request("scoped")
|
|
54
53
|
assert isinstance(c, C)
|
|
55
54
|
assert c is cc
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
from typing import Any
|
|
1
|
+
from typing import Any
|
|
2
2
|
|
|
3
3
|
import fastapi
|
|
4
4
|
from dependency_injector import containers, providers
|
|
5
5
|
from dependency_injector.wiring import Provide, inject
|
|
6
6
|
from fastapi import Depends
|
|
7
|
-
from
|
|
7
|
+
from typing import Annotated
|
|
8
8
|
|
|
9
9
|
from wireup_benchmarks import services
|
|
10
10
|
|
|
@@ -34,7 +34,7 @@ router = fastapi.APIRouter()
|
|
|
34
34
|
async def dependency_injector_singleton(
|
|
35
35
|
a: Annotated[services.A, Depends(Provide[Container.a])],
|
|
36
36
|
b: Annotated[services.B, Depends(Provide[Container.b])],
|
|
37
|
-
) ->
|
|
37
|
+
) -> dict[str, Any]:
|
|
38
38
|
services.record_request("singleton")
|
|
39
39
|
assert a.start == 10
|
|
40
40
|
assert isinstance(a, services.A)
|
|
@@ -55,7 +55,7 @@ async def dependency_injector_scoped(
|
|
|
55
55
|
g: Annotated[services.G, Depends(Provide[Container.g])],
|
|
56
56
|
h: Annotated[services.H, Depends(Provide[Container.h])],
|
|
57
57
|
i: Annotated[services.I, Depends(Provide[Container.i])],
|
|
58
|
-
) ->
|
|
58
|
+
) -> dict[str, Any]:
|
|
59
59
|
services.record_request("scoped")
|
|
60
60
|
assert isinstance(c, services.C)
|
|
61
61
|
assert c is cc
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from typing import Dict
|
|
2
|
-
|
|
3
1
|
import dishka
|
|
4
2
|
import fastapi
|
|
5
3
|
from dishka.integrations.fastapi import FromDishka, inject
|
|
@@ -24,7 +22,7 @@ router = fastapi.APIRouter()
|
|
|
24
22
|
|
|
25
23
|
@router.get("/dishka/singleton")
|
|
26
24
|
@inject
|
|
27
|
-
async def dishka_singleton(a: FromDishka[A], b: FromDishka[B]) ->
|
|
25
|
+
async def dishka_singleton(a: FromDishka[A], b: FromDishka[B]) -> dict[str, str]:
|
|
28
26
|
services.record_request("singleton")
|
|
29
27
|
assert a.start == 10
|
|
30
28
|
assert isinstance(a, A)
|
|
@@ -45,7 +43,7 @@ async def dishka_scoped(
|
|
|
45
43
|
g: FromDishka[G],
|
|
46
44
|
h: FromDishka[H],
|
|
47
45
|
i: FromDishka[I],
|
|
48
|
-
) ->
|
|
46
|
+
) -> dict[str, str]:
|
|
49
47
|
services.record_request("scoped")
|
|
50
48
|
assert isinstance(c, C)
|
|
51
49
|
assert c is cc
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from typing import Dict
|
|
2
|
-
|
|
3
1
|
import fastapi
|
|
4
2
|
from diwire import Container, Injected, Lifetime, Scope, resolver_context
|
|
5
3
|
|
|
@@ -24,7 +22,7 @@ router = fastapi.APIRouter()
|
|
|
24
22
|
|
|
25
23
|
@router.get("/diwire/singleton")
|
|
26
24
|
@resolver_context.inject(scope=Scope.REQUEST)
|
|
27
|
-
async def diwire_singleton(a: Injected[A], b: Injected[B]) ->
|
|
25
|
+
async def diwire_singleton(a: Injected[A], b: Injected[B]) -> dict[str, str]:
|
|
28
26
|
services.record_request("singleton")
|
|
29
27
|
assert a.start == 10
|
|
30
28
|
assert isinstance(a, A)
|
|
@@ -45,7 +43,7 @@ async def diwire_scoped(
|
|
|
45
43
|
g: Injected[G],
|
|
46
44
|
h: Injected[H],
|
|
47
45
|
i: Injected[I],
|
|
48
|
-
) ->
|
|
46
|
+
) -> dict[str, str]:
|
|
49
47
|
services.record_request("scoped")
|
|
50
48
|
assert isinstance(c, C)
|
|
51
49
|
assert c is cc
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
from functools import lru_cache
|
|
2
|
-
from
|
|
2
|
+
from collections.abc import AsyncIterator, Iterator
|
|
3
3
|
|
|
4
4
|
import fastapi
|
|
5
|
-
from
|
|
5
|
+
from typing import Annotated
|
|
6
6
|
|
|
7
7
|
from wireup_benchmarks import services
|
|
8
8
|
from wireup_benchmarks.services import A, B, C, D, E, F, G, H, I, Settings, make_h, make_i
|
|
@@ -74,7 +74,7 @@ router = fastapi.APIRouter()
|
|
|
74
74
|
@router.get("/fastapi/singleton")
|
|
75
75
|
async def fastapi_singleton(
|
|
76
76
|
a: Annotated[A, fastapi.Depends(get_a)], b: Annotated[B, fastapi.Depends(get_b)]
|
|
77
|
-
) ->
|
|
77
|
+
) -> dict[str, str]:
|
|
78
78
|
services.record_request("singleton")
|
|
79
79
|
assert a.start == 10
|
|
80
80
|
assert isinstance(a, A)
|
|
@@ -94,7 +94,7 @@ async def fastapi_scoped(
|
|
|
94
94
|
g: Annotated[G, fastapi.Depends(get_g)],
|
|
95
95
|
h: Annotated[H, fastapi.Depends(get_h)],
|
|
96
96
|
i: Annotated[I, fastapi.Depends(get_i)],
|
|
97
|
-
) ->
|
|
97
|
+
) -> dict[str, str]:
|
|
98
98
|
services.record_request("scoped")
|
|
99
99
|
assert isinstance(c, C)
|
|
100
100
|
assert c is cc
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import contextlib
|
|
2
|
-
from typing import Dict
|
|
3
2
|
|
|
4
3
|
import fastapi
|
|
5
4
|
|
|
@@ -15,7 +14,7 @@ router = fastapi.APIRouter()
|
|
|
15
14
|
|
|
16
15
|
|
|
17
16
|
@router.get("/globals/singleton")
|
|
18
|
-
async def fastapi_singleton() ->
|
|
17
|
+
async def fastapi_singleton() -> dict[str, str]:
|
|
19
18
|
services.record_request("singleton")
|
|
20
19
|
assert a.start == 10
|
|
21
20
|
assert isinstance(a, A)
|
|
@@ -24,7 +23,7 @@ async def fastapi_singleton() -> Dict[str, str]:
|
|
|
24
23
|
|
|
25
24
|
|
|
26
25
|
@router.get("/globals/scoped")
|
|
27
|
-
async def globals_scoped() ->
|
|
26
|
+
async def globals_scoped() -> dict[str, str]:
|
|
28
27
|
services.record_request("scoped")
|
|
29
28
|
c = C()
|
|
30
29
|
d = D(c=c)
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from typing import Dict
|
|
2
|
-
|
|
3
1
|
import fastapi
|
|
4
2
|
from fastapi_injector import (
|
|
5
3
|
Injected,
|
|
@@ -87,7 +85,7 @@ def setup_injector(app: fastapi.FastAPI) -> None:
|
|
|
87
85
|
async def injector_singleton(
|
|
88
86
|
a: A = Injected(A),
|
|
89
87
|
b: B = Injected(B),
|
|
90
|
-
) ->
|
|
88
|
+
) -> dict[str, str]:
|
|
91
89
|
services.record_request("singleton")
|
|
92
90
|
assert a.start == 10
|
|
93
91
|
assert isinstance(a, A)
|
|
@@ -107,7 +105,7 @@ async def injector_scoped(
|
|
|
107
105
|
g: G = Injected(G),
|
|
108
106
|
h: H = Injected(H),
|
|
109
107
|
i: I = Injected(I),
|
|
110
|
-
) ->
|
|
108
|
+
) -> dict[str, str]:
|
|
111
109
|
services.record_request("scoped")
|
|
112
110
|
assert isinstance(c, C)
|
|
113
111
|
assert c is cc
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
from
|
|
1
|
+
from collections.abc import Iterator
|
|
2
2
|
|
|
3
3
|
import fastapi
|
|
4
4
|
from lagom import Container, Singleton, context_dependency_definition
|
|
@@ -43,7 +43,7 @@ deps = FastApiIntegration(container, request_singletons=[C, D, E, F, G], request
|
|
|
43
43
|
async def lagom_singleton(
|
|
44
44
|
a=deps.depends(A),
|
|
45
45
|
b=deps.depends(B),
|
|
46
|
-
) ->
|
|
46
|
+
) -> dict[str, str]:
|
|
47
47
|
services.record_request("singleton")
|
|
48
48
|
assert a.start == 10
|
|
49
49
|
assert isinstance(a, A)
|
|
@@ -63,7 +63,7 @@ async def lagom_scoped(
|
|
|
63
63
|
g=deps.depends(G),
|
|
64
64
|
h=deps.depends(H),
|
|
65
65
|
i=deps.depends(I),
|
|
66
|
-
) ->
|
|
66
|
+
) -> dict[str, str]:
|
|
67
67
|
services.record_request("scoped")
|
|
68
68
|
assert isinstance(c, C)
|
|
69
69
|
assert c is cc
|
|
@@ -8,9 +8,9 @@ to avoid code duplication.
|
|
|
8
8
|
import os
|
|
9
9
|
from dataclasses import dataclass
|
|
10
10
|
from threading import Lock
|
|
11
|
-
from
|
|
11
|
+
from collections.abc import AsyncIterator, Iterator
|
|
12
12
|
|
|
13
|
-
_COUNTERS:
|
|
13
|
+
_COUNTERS: dict[str, int] = {}
|
|
14
14
|
_COUNTER_LOCK = Lock()
|
|
15
15
|
_ASSERT_ENABLED = os.getenv("BENCH_ASSERT") == "1"
|
|
16
16
|
|
|
@@ -38,7 +38,7 @@ def record_exit(name: str) -> None:
|
|
|
38
38
|
_inc(f"exit.{name}")
|
|
39
39
|
|
|
40
40
|
|
|
41
|
-
def get_counters() ->
|
|
41
|
+
def get_counters() -> dict[str, int]:
|
|
42
42
|
if not _ASSERT_ENABLED:
|
|
43
43
|
return {}
|
|
44
44
|
with _COUNTER_LOCK:
|
|
@@ -52,8 +52,8 @@ def reset_counters() -> None:
|
|
|
52
52
|
_COUNTERS.clear()
|
|
53
53
|
|
|
54
54
|
|
|
55
|
-
def _expected_counts(requests_singleton: int, requests_scoped: int) ->
|
|
56
|
-
expected:
|
|
55
|
+
def _expected_counts(requests_singleton: int, requests_scoped: int) -> dict[str, int]:
|
|
56
|
+
expected: dict[str, int] = {}
|
|
57
57
|
singleton_expected = 1 if requests_singleton > 0 else 0
|
|
58
58
|
for name in ("Settings", "A", "B"):
|
|
59
59
|
expected[f"create.{name}"] = singleton_expected
|
|
@@ -69,8 +69,8 @@ def _expected_counts(requests_singleton: int, requests_scoped: int) -> Dict[str,
|
|
|
69
69
|
|
|
70
70
|
|
|
71
71
|
def assert_workload(
|
|
72
|
-
overrides:
|
|
73
|
-
) ->
|
|
72
|
+
overrides: dict[str, int] | None = None,
|
|
73
|
+
) -> tuple[bool, dict[str, int], dict[str, int], dict[str, int]]:
|
|
74
74
|
if not _ASSERT_ENABLED:
|
|
75
75
|
return True, {}, {}, {}
|
|
76
76
|
counters = get_counters()
|
|
@@ -79,7 +79,7 @@ def assert_workload(
|
|
|
79
79
|
expected = _expected_counts(requests_singleton, requests_scoped)
|
|
80
80
|
if overrides:
|
|
81
81
|
expected.update(overrides)
|
|
82
|
-
mismatches:
|
|
82
|
+
mismatches: dict[str, int] = {}
|
|
83
83
|
singleton_create_keys = {"create.Settings", "create.A", "create.B"}
|
|
84
84
|
for key, expected_value in expected.items():
|
|
85
85
|
actual_value = counters.get(key, 0)
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
from contextlib import asynccontextmanager
|
|
2
|
-
from typing import Dict
|
|
3
2
|
|
|
4
3
|
import fastapi
|
|
5
4
|
import svcs
|
|
@@ -131,7 +130,7 @@ lifespan = svcs.fastapi.lifespan(_lifespan, registry=registry)
|
|
|
131
130
|
|
|
132
131
|
|
|
133
132
|
@router.get("/svcs/singleton")
|
|
134
|
-
async def svcs_singleton(container: DepContainer) ->
|
|
133
|
+
async def svcs_singleton(container: DepContainer) -> dict[str, str]:
|
|
135
134
|
services.record_request("singleton")
|
|
136
135
|
a = container.get(A)
|
|
137
136
|
b = container.get(B)
|
|
@@ -143,7 +142,7 @@ async def svcs_singleton(container: DepContainer) -> Dict[str, str]:
|
|
|
143
142
|
|
|
144
143
|
|
|
145
144
|
@router.get("/svcs/scoped")
|
|
146
|
-
async def svcs_scoped(container: DepContainer) ->
|
|
145
|
+
async def svcs_scoped(container: DepContainer) -> dict[str, str]:
|
|
147
146
|
services.record_request("scoped")
|
|
148
147
|
c = container.get(C)
|
|
149
148
|
cc = container.get(C)
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from typing import Dict
|
|
2
|
-
|
|
3
1
|
import fastapi
|
|
4
2
|
from wireup import Injected
|
|
5
3
|
from wireup.integration.fastapi import WireupRoute
|
|
@@ -17,7 +15,7 @@ class WireupSingletonBenchController:
|
|
|
17
15
|
self.b = b
|
|
18
16
|
|
|
19
17
|
@router.get("/singleton")
|
|
20
|
-
async def wireup_singleton(self) ->
|
|
18
|
+
async def wireup_singleton(self) -> dict[str, str]:
|
|
21
19
|
services.record_request("singleton")
|
|
22
20
|
assert self.a.start == 10
|
|
23
21
|
assert isinstance(self.a, A)
|
|
@@ -41,7 +39,7 @@ class WireupScopedBenchController:
|
|
|
41
39
|
g: Injected[G],
|
|
42
40
|
h: Injected[H],
|
|
43
41
|
i: Injected[I],
|
|
44
|
-
) ->
|
|
42
|
+
) -> dict[str, str]:
|
|
45
43
|
services.record_request("scoped")
|
|
46
44
|
assert isinstance(c, C)
|
|
47
45
|
assert c is cc
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
from typing import Dict
|
|
2
|
-
|
|
3
1
|
import fastapi
|
|
4
2
|
import wireup
|
|
5
3
|
from wireup import Injected
|
|
@@ -27,7 +25,7 @@ container = wireup.create_async_container(
|
|
|
27
25
|
|
|
28
26
|
|
|
29
27
|
@router.get("/wireup/singleton")
|
|
30
|
-
async def wireup_singleton(a: Injected[A], b: Injected[B]) ->
|
|
28
|
+
async def wireup_singleton(a: Injected[A], b: Injected[B]) -> dict[str, str]:
|
|
31
29
|
services.record_request("singleton")
|
|
32
30
|
assert a.start == 10
|
|
33
31
|
assert isinstance(a, A)
|
|
@@ -47,7 +45,7 @@ async def wireup_scoped(
|
|
|
47
45
|
g: Injected[G],
|
|
48
46
|
h: Injected[H],
|
|
49
47
|
i: Injected[I],
|
|
50
|
-
) ->
|
|
48
|
+
) -> dict[str, str]:
|
|
51
49
|
services.record_request("scoped")
|
|
52
50
|
assert isinstance(c, C)
|
|
53
51
|
assert c is cc
|