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.
Files changed (554) hide show
  1. {wireup-2.9.0 → wireup-2.11.0}/.github/contributing.md +1 -1
  2. {wireup-2.9.0 → wireup-2.11.0}/.github/workflows/run_all.yml +2 -2
  3. {wireup-2.9.0 → wireup-2.11.0}/PKG-INFO +5 -8
  4. {wireup-2.9.0 → wireup-2.11.0}/benchmarks/bench_runner.py +27 -22
  5. {wireup-2.9.0 → wireup-2.11.0}/benchmarks/generate_charts.py +6 -6
  6. {wireup-2.9.0 → wireup-2.11.0}/benchmarks/generate_versions.py +2 -3
  7. {wireup-2.9.0 → wireup-2.11.0}/benchmarks/wireup_benchmarks/aioinject_setup.py +2 -3
  8. {wireup-2.9.0 → wireup-2.11.0}/benchmarks/wireup_benchmarks/dependency_injector_setup.py +4 -4
  9. {wireup-2.9.0 → wireup-2.11.0}/benchmarks/wireup_benchmarks/dishka_setup.py +2 -4
  10. {wireup-2.9.0 → wireup-2.11.0}/benchmarks/wireup_benchmarks/diwire_setup.py +2 -4
  11. {wireup-2.9.0 → wireup-2.11.0}/benchmarks/wireup_benchmarks/fastapi_setup.py +4 -4
  12. {wireup-2.9.0 → wireup-2.11.0}/benchmarks/wireup_benchmarks/globals_setup.py +2 -3
  13. {wireup-2.9.0 → wireup-2.11.0}/benchmarks/wireup_benchmarks/injector_setup.py +2 -4
  14. {wireup-2.9.0 → wireup-2.11.0}/benchmarks/wireup_benchmarks/lagom_setup.py +3 -3
  15. {wireup-2.9.0 → wireup-2.11.0}/benchmarks/wireup_benchmarks/services.py +8 -8
  16. {wireup-2.9.0 → wireup-2.11.0}/benchmarks/wireup_benchmarks/svcs_setup.py +2 -3
  17. {wireup-2.9.0 → wireup-2.11.0}/benchmarks/wireup_benchmarks/that_depends_setup.py +1 -1
  18. {wireup-2.9.0 → wireup-2.11.0}/benchmarks/wireup_benchmarks/wireup_cbr_setup.py +2 -4
  19. {wireup-2.9.0 → wireup-2.11.0}/benchmarks/wireup_benchmarks/wireup_setup.py +2 -4
  20. wireup-2.11.0/docs/.cache/10005938810451227853 +4 -0
  21. wireup-2.11.0/docs/.cache/10030112338242773854 +109 -0
  22. wireup-2.11.0/docs/.cache/10065798489776974677 +198 -0
  23. wireup-2.11.0/docs/.cache/10112708023018233778 +4 -0
  24. wireup-2.11.0/docs/.cache/10244736634308090200 +84 -0
  25. wireup-2.11.0/docs/.cache/1026833386043599887 +4 -0
  26. wireup-2.11.0/docs/.cache/1076323475707195139 +4 -0
  27. wireup-2.11.0/docs/.cache/10791388457198634538 +125 -0
  28. wireup-2.11.0/docs/.cache/10945278607770312194 +192 -0
  29. wireup-2.11.0/docs/.cache/11305474245948282721 +190 -0
  30. wireup-2.11.0/docs/.cache/11383899734388964016 +4 -0
  31. wireup-2.11.0/docs/.cache/11392774134316685928 +380 -0
  32. wireup-2.11.0/docs/.cache/11501566918120132822 +4 -0
  33. wireup-2.11.0/docs/.cache/11707090198648621574 +93 -0
  34. wireup-2.11.0/docs/.cache/11936269499361824977 +143 -0
  35. wireup-2.11.0/docs/.cache/12137072172860686655 +230 -0
  36. wireup-2.11.0/docs/.cache/12219371046269359732 +4 -0
  37. wireup-2.11.0/docs/.cache/12241555142324881061 +125 -0
  38. wireup-2.11.0/docs/.cache/12382052977275466893 +77 -0
  39. wireup-2.11.0/docs/.cache/12499315425330180004 +93 -0
  40. wireup-2.11.0/docs/.cache/12549328558144052424 +4 -0
  41. wireup-2.11.0/docs/.cache/1271758769353586558 +4 -0
  42. wireup-2.11.0/docs/.cache/12752882211929243556 +4 -0
  43. wireup-2.11.0/docs/.cache/12783426531917578909 +4 -0
  44. wireup-2.11.0/docs/.cache/13014544647268190247 +4 -0
  45. wireup-2.11.0/docs/.cache/13370773888390464336 +4 -0
  46. wireup-2.11.0/docs/.cache/13403801197489695949 +4 -0
  47. wireup-2.11.0/docs/.cache/13586038107580246457 +77 -0
  48. wireup-2.11.0/docs/.cache/13775377501054353309 +4 -0
  49. wireup-2.11.0/docs/.cache/13953017239477616146 +4 -0
  50. wireup-2.11.0/docs/.cache/14256755113028278147 +4 -0
  51. wireup-2.11.0/docs/.cache/14282878143828754773 +190 -0
  52. wireup-2.11.0/docs/.cache/14427624141156888631 +132 -0
  53. wireup-2.11.0/docs/.cache/14837314323412076685 +4 -0
  54. wireup-2.11.0/docs/.cache/14882785289163986794 +36 -0
  55. wireup-2.11.0/docs/.cache/15059192794541587955 +127 -0
  56. wireup-2.11.0/docs/.cache/15137346072215138130 +4 -0
  57. wireup-2.11.0/docs/.cache/1531676072290125443 +159 -0
  58. wireup-2.11.0/docs/.cache/15401149629531751292 +77 -0
  59. wireup-2.11.0/docs/.cache/15405362896761939504 +128 -0
  60. wireup-2.11.0/docs/.cache/15746470211891335948 +4 -0
  61. wireup-2.11.0/docs/.cache/15830373033601161010 +109 -0
  62. wireup-2.11.0/docs/.cache/15996300901764263280 +4 -0
  63. wireup-2.11.0/docs/.cache/16124785681570184387 +4 -0
  64. wireup-2.11.0/docs/.cache/16306461914818170209 +4 -0
  65. wireup-2.11.0/docs/.cache/16448785645681680385 +61 -0
  66. wireup-2.11.0/docs/.cache/16478468651222211581 +4 -0
  67. wireup-2.11.0/docs/.cache/16510109783858621727 +4 -0
  68. wireup-2.11.0/docs/.cache/17002821459511253445 +61 -0
  69. wireup-2.11.0/docs/.cache/17090714770585531732 +4 -0
  70. wireup-2.11.0/docs/.cache/17101920600852032286 +4 -0
  71. wireup-2.11.0/docs/.cache/17321209195288004123 +4 -0
  72. wireup-2.11.0/docs/.cache/17346873189989222451 +4 -0
  73. wireup-2.11.0/docs/.cache/17399689833194377406 +4 -0
  74. wireup-2.11.0/docs/.cache/17539328537605741444 +4 -0
  75. wireup-2.11.0/docs/.cache/1756490492350570913 +4 -0
  76. wireup-2.11.0/docs/.cache/17943827649124903849 +4 -0
  77. wireup-2.11.0/docs/.cache/1799571417771229608 +4 -0
  78. wireup-2.11.0/docs/.cache/18069537654268463088 +149 -0
  79. wireup-2.11.0/docs/.cache/18074172183194207813 +280 -0
  80. wireup-2.11.0/docs/.cache/18211141398983955737 +94 -0
  81. wireup-2.11.0/docs/.cache/1848436715989309717 +325 -0
  82. wireup-2.11.0/docs/.cache/1868758371972416416 +125 -0
  83. wireup-2.11.0/docs/.cache/1960420391844333246 +4 -0
  84. wireup-2.11.0/docs/.cache/2225968555155049922 +199 -0
  85. wireup-2.11.0/docs/.cache/2511243215163562241 +4 -0
  86. wireup-2.11.0/docs/.cache/2704554805010621494 +125 -0
  87. wireup-2.11.0/docs/.cache/2931921865184755692 +229 -0
  88. wireup-2.11.0/docs/.cache/2999542103112937171 +4 -0
  89. wireup-2.11.0/docs/.cache/3004620347508363551 +4 -0
  90. wireup-2.11.0/docs/.cache/3009442721481581974 +63 -0
  91. wireup-2.11.0/docs/.cache/3010889225596071568 +4 -0
  92. wireup-2.11.0/docs/.cache/302750424423738729 +192 -0
  93. wireup-2.11.0/docs/.cache/3124270596782374079 +4 -0
  94. wireup-2.11.0/docs/.cache/3319413828709818644 +173 -0
  95. wireup-2.11.0/docs/.cache/3390750149037931623 +61 -0
  96. wireup-2.11.0/docs/.cache/3471250444467953394 +77 -0
  97. wireup-2.11.0/docs/.cache/3476900567878811119 +4 -0
  98. wireup-2.11.0/docs/.cache/3590638867109995915 +177 -0
  99. wireup-2.11.0/docs/.cache/4001189077132631890 +251 -0
  100. wireup-2.11.0/docs/.cache/4016878668695078294 +354 -0
  101. wireup-2.11.0/docs/.cache/4120072738616698585 +125 -0
  102. wireup-2.11.0/docs/.cache/4201971366852234974 +4 -0
  103. wireup-2.11.0/docs/.cache/4248594428038296655 +4 -0
  104. wireup-2.11.0/docs/.cache/4538524138372188801 +158 -0
  105. wireup-2.11.0/docs/.cache/4539372728326409028 +189 -0
  106. wireup-2.11.0/docs/.cache/4911927025649090134 +4 -0
  107. wireup-2.11.0/docs/.cache/4917619758752164905 +109 -0
  108. wireup-2.11.0/docs/.cache/4976624484461351302 +109 -0
  109. wireup-2.11.0/docs/.cache/5103964541648405045 +418 -0
  110. wireup-2.11.0/docs/.cache/5173634529580760672 +61 -0
  111. wireup-2.11.0/docs/.cache/5185194694646499661 +4 -0
  112. wireup-2.11.0/docs/.cache/5447557034043968735 +4 -0
  113. wireup-2.11.0/docs/.cache/5542091736194061637 +143 -0
  114. wireup-2.11.0/docs/.cache/5578944129928319191 +4 -0
  115. wireup-2.11.0/docs/.cache/5959636093060972256 +36 -0
  116. wireup-2.11.0/docs/.cache/6275054343417753723 +4 -0
  117. wireup-2.11.0/docs/.cache/6290230159377794661 +4 -0
  118. wireup-2.11.0/docs/.cache/6340746870840489245 +141 -0
  119. wireup-2.11.0/docs/.cache/6893863845257079106 +182 -0
  120. wireup-2.11.0/docs/.cache/6908721224100469549 +61 -0
  121. wireup-2.11.0/docs/.cache/7197171008315212702 +4 -0
  122. wireup-2.11.0/docs/.cache/732882584140681833 +151 -0
  123. wireup-2.11.0/docs/.cache/7498583298967102244 +127 -0
  124. wireup-2.11.0/docs/.cache/7585250964433932046 +4 -0
  125. wireup-2.11.0/docs/.cache/7614840176187686366 +93 -0
  126. wireup-2.11.0/docs/.cache/7815757281852325210 +4 -0
  127. wireup-2.11.0/docs/.cache/8050531324635461127 +84 -0
  128. wireup-2.11.0/docs/.cache/8359729865024621021 +52 -0
  129. wireup-2.11.0/docs/.cache/8465230536178924220 +4 -0
  130. wireup-2.11.0/docs/.cache/8473505901324974434 +157 -0
  131. wireup-2.11.0/docs/.cache/8499329960173449201 +4 -0
  132. wireup-2.11.0/docs/.cache/8522518034566956890 +4 -0
  133. wireup-2.11.0/docs/.cache/8564882904539593724 +127 -0
  134. wireup-2.11.0/docs/.cache/864979656035717678 +95 -0
  135. wireup-2.11.0/docs/.cache/8861449551378947148 +4 -0
  136. wireup-2.11.0/docs/.cache/9109427361955673233 +127 -0
  137. wireup-2.11.0/docs/.cache/9231702844672586930 +4 -0
  138. wireup-2.11.0/docs/.cache/9252445419859529063 +4 -0
  139. wireup-2.11.0/docs/.cache/9492146019118239685 +4 -0
  140. wireup-2.11.0/docs/.cache/9571741227041167117 +4 -0
  141. wireup-2.11.0/docs/.cache/9664925752586579503 +125 -0
  142. wireup-2.11.0/docs/.cache/9860729219353091761 +4 -0
  143. wireup-2.11.0/docs/.cache/9961436229075698645 +4 -0
  144. {wireup-2.9.0 → wireup-2.11.0}/docs/mkdocs.yml +2 -0
  145. wireup-2.11.0/docs/pages/class/fastapi_integration.md +8 -0
  146. wireup-2.11.0/docs/pages/class/starlette_integration.md +8 -0
  147. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/container.md +40 -19
  148. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/index.md +5 -44
  149. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/aiohttp/index.md +7 -0
  150. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/click/index.md +7 -0
  151. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/django/index.md +11 -1
  152. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/fastapi/background_tasks.md +1 -0
  153. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/fastapi/index.md +8 -1
  154. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/flask/index.md +7 -0
  155. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/starlette/background_tasks.md +1 -0
  156. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/typer/index.md +7 -0
  157. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/interfaces.md +179 -0
  158. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/lifetimes_and_scopes.md +47 -1
  159. wireup-2.11.0/docs/pages/packaging_injectables.md +108 -0
  160. wireup-2.11.0/docs/pages/stylesheets/extra.css +32 -0
  161. wireup-2.11.0/docs/pages/testing.md +255 -0
  162. wireup-2.11.0/docs/pages/what_wireup_validates.md +352 -0
  163. wireup-2.11.0/pet_store_demo_app/README.md +20 -0
  164. wireup-2.11.0/pet_store_demo_app/__init__.py +1 -0
  165. wireup-2.11.0/pet_store_demo_app/cbr.py +29 -0
  166. wireup-2.11.0/pet_store_demo_app/factories.py +22 -0
  167. wireup-2.11.0/pet_store_demo_app/fastapi_services.py +29 -0
  168. wireup-2.11.0/pet_store_demo_app/flask_main.py +84 -0
  169. wireup-2.11.0/pet_store_demo_app/main.py +89 -0
  170. wireup-2.11.0/pet_store_demo_app/services/__init__.py +17 -0
  171. wireup-2.11.0/pet_store_demo_app/services/adoption.py +35 -0
  172. wireup-2.11.0/pet_store_demo_app/services/audit.py +21 -0
  173. wireup-2.11.0/pet_store_demo_app/services/infra.py +27 -0
  174. wireup-2.11.0/pet_store_demo_app/services/owners.py +28 -0
  175. wireup-2.11.0/pet_store_demo_app/services/pets.py +41 -0
  176. wireup-2.11.0/pet_store_demo_app/services/session.py +23 -0
  177. {wireup-2.9.0 → wireup-2.11.0}/pyproject.toml +4 -6
  178. {wireup-2.9.0 → wireup-2.11.0}/readme.md +3 -4
  179. {wireup-2.9.0 → wireup-2.11.0}/test/conftest.py +1 -3
  180. {wireup-2.9.0 → wireup-2.11.0}/test/integration/aiohttp/test_aiohttp_integration.py +1 -1
  181. {wireup-2.9.0 → wireup-2.11.0}/test/integration/asgi/test_asgi_integration.py +1 -1
  182. {wireup-2.9.0 → wireup-2.11.0}/test/integration/celery/test_celery_integration.py +1 -1
  183. {wireup-2.9.0 → wireup-2.11.0}/test/integration/click/test_click_integration.py +2 -1
  184. {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/test_django_integration.py +9 -8
  185. {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/view.py +2 -1
  186. {wireup-2.9.0 → wireup-2.11.0}/test/integration/fastapi/cbr.py +2 -2
  187. {wireup-2.9.0 → wireup-2.11.0}/test/integration/fastapi/router.py +4 -5
  188. {wireup-2.9.0 → wireup-2.11.0}/test/integration/fastapi/test_fastapi_integration.py +110 -11
  189. {wireup-2.9.0 → wireup-2.11.0}/test/integration/flask/bp.py +2 -3
  190. {wireup-2.9.0 → wireup-2.11.0}/test/integration/flask/services/is_test_service.py +1 -1
  191. {wireup-2.9.0 → wireup-2.11.0}/test/integration/flask/test_flask_integration.py +2 -1
  192. {wireup-2.9.0 → wireup-2.11.0}/test/integration/starlette/test_starlette_integration.py +103 -1
  193. {wireup-2.9.0 → wireup-2.11.0}/test/integration/typer/test_typer_integration.py +2 -3
  194. {wireup-2.9.0 → wireup-2.11.0}/test/unit/services/with_annotations/env/__init__.py +2 -1
  195. {wireup-2.9.0 → wireup-2.11.0}/test/unit/services/with_annotations/services.py +1 -1
  196. {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_as_type.py +9 -7
  197. {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_compiler_code_generation.py +4 -2
  198. wireup-2.11.0/test/unit/test_container_collection_injection.py +367 -0
  199. {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_container_core.py +28 -17
  200. {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_container_creation.py +59 -17
  201. {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_container_generator_factory.py +2 -1
  202. {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_container_override.py +75 -3
  203. {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_container_scope.py +36 -1
  204. {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_eval_type.py +1 -1
  205. {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_exit_stack.py +1 -1
  206. {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_inject_from_container.py +42 -18
  207. {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_inject_from_container_optional_types.py +17 -13
  208. {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_inject_from_container_stringified_types.py +1 -1
  209. {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_instance.py +2 -1
  210. {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_optional_type.py +30 -11
  211. {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_pos_only_validation.py +2 -1
  212. {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_service_registry.py +3 -4
  213. {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_signature_hiding.py +1 -1
  214. {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_type_analysis.py +24 -11
  215. {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_util.py +2 -2
  216. {wireup-2.9.0 → wireup-2.11.0}/test/unit/util.py +4 -1
  217. {wireup-2.9.0 → wireup-2.11.0}/uv.lock +250 -1720
  218. {wireup-2.9.0 → wireup-2.11.0}/wireup/__init__.py +4 -4
  219. {wireup-2.9.0 → wireup-2.11.0}/wireup/_annotations.py +3 -3
  220. {wireup-2.9.0 → wireup-2.11.0}/wireup/_decorators.py +22 -14
  221. {wireup-2.9.0 → wireup-2.11.0}/wireup/_discovery.py +4 -1
  222. {wireup-2.9.0 → wireup-2.11.0}/wireup/_instance.py +3 -1
  223. {wireup-2.9.0 → wireup-2.11.0}/wireup/_wrapper_compiler.py +3 -1
  224. {wireup-2.9.0 → wireup-2.11.0}/wireup/codegen.py +1 -3
  225. {wireup-2.9.0 → wireup-2.11.0}/wireup/errors.py +58 -1
  226. {wireup-2.9.0 → wireup-2.11.0}/wireup/integration/aiohttp.py +5 -4
  227. {wireup-2.9.0 → wireup-2.11.0}/wireup/integration/celery.py +3 -1
  228. {wireup-2.9.0 → wireup-2.11.0}/wireup/integration/django/apps.py +6 -5
  229. {wireup-2.9.0 → wireup-2.11.0}/wireup/integration/django/decorators.py +2 -1
  230. {wireup-2.9.0 → wireup-2.11.0}/wireup/integration/fastapi.py +7 -14
  231. {wireup-2.9.0 → wireup-2.11.0}/wireup/integration/flask.py +1 -3
  232. {wireup-2.9.0 → wireup-2.11.0}/wireup/integration/starlette.py +14 -2
  233. {wireup-2.9.0 → wireup-2.11.0}/wireup/ioc/_exit_stack.py +2 -9
  234. {wireup-2.9.0 → wireup-2.11.0}/wireup/ioc/configuration.py +2 -3
  235. {wireup-2.9.0 → wireup-2.11.0}/wireup/ioc/container/__init__.py +17 -3
  236. {wireup-2.9.0 → wireup-2.11.0}/wireup/ioc/container/async_container.py +12 -5
  237. {wireup-2.9.0 → wireup-2.11.0}/wireup/ioc/container/base_container.py +2 -1
  238. {wireup-2.9.0 → wireup-2.11.0}/wireup/ioc/container/sync_container.py +5 -2
  239. {wireup-2.9.0 → wireup-2.11.0}/wireup/ioc/dependency_introspection.py +0 -2
  240. {wireup-2.9.0 → wireup-2.11.0}/wireup/ioc/factory_compiler.py +11 -3
  241. {wireup-2.9.0 → wireup-2.11.0}/wireup/ioc/override_manager.py +2 -2
  242. {wireup-2.9.0 → wireup-2.11.0}/wireup/ioc/registry.py +149 -10
  243. {wireup-2.9.0 → wireup-2.11.0}/wireup/ioc/registry_validation.py +12 -1
  244. {wireup-2.9.0 → wireup-2.11.0}/wireup/ioc/type_analysis.py +14 -15
  245. {wireup-2.9.0 → wireup-2.11.0}/wireup/ioc/types.py +6 -8
  246. {wireup-2.9.0 → wireup-2.11.0}/wireup/ioc/util.py +3 -3
  247. {wireup-2.9.0 → wireup-2.11.0}/wireup/util.py +1 -4
  248. wireup-2.11.0/z_docs/.obsidian/appearance.json +3 -0
  249. {wireup-2.9.0 → wireup-2.11.0}/z_docs/.obsidian/workspace.json +24 -14
  250. wireup-2.11.0/z_docs/drafts/codex_r_fastapi_post copy.md +84 -0
  251. wireup-2.11.0/z_docs/drafts/codex_r_fastapi_post.md +81 -0
  252. wireup-2.11.0/z_docs/ideas/collection_injection_docs_draft.md +276 -0
  253. wireup-2.11.0/z_docs/ideas/config_and_qualified_type_sugar.md +98 -0
  254. wireup-2.11.0/z_docs/ideas/docs_map_for_default_llm_choice.md +323 -0
  255. wireup-2.11.0/z_docs/ideas/lazy.md +513 -0
  256. wireup-2.11.0/z_docs/ideas/mapping_collection_injection_api.md +469 -0
  257. wireup-2.11.0/z_docs/ideas/readme update - advanced section.md +12 -0
  258. wireup-2.11.0/z_docs/ideas/scoped_override.md +304 -0
  259. wireup-2.11.0/z_docs/ideas/tagged_collection_injection_sketch.md +527 -0
  260. wireup-2.11.0/z_docs/ideas/tmp_sequence_filter_demo.py +80 -0
  261. wireup-2.11.0/z_docs/ideas/wrap_with_dependencies.md +78 -0
  262. wireup-2.11.0/z_sugar.py +28 -0
  263. wireup-2.11.0/z_test.py +36 -0
  264. wireup-2.11.0/z_test_2.py +19 -0
  265. wireup-2.11.0/z_test_3.py +24 -0
  266. wireup-2.11.0/z_test_bug.py +9 -0
  267. wireup-2.11.0/z_test_services/__init__.py +0 -0
  268. wireup-2.11.0/z_z.py +70 -0
  269. wireup-2.11.0/z_zz.py +105 -0
  270. wireup-2.9.0/.agent/rules.md +0 -3
  271. wireup-2.9.0/docs/pages/class/fastapi_integration.md +0 -3
  272. wireup-2.9.0/docs/pages/class/starlette_integration.md +0 -3
  273. wireup-2.9.0/docs/pages/stylesheets/extra.css +0 -83
  274. wireup-2.9.0/docs/pages/testing.md +0 -220
  275. wireup-2.9.0/z_docs/.obsidian/appearance.json +0 -3
  276. wireup-2.9.0/z_docs/drafts/codex_r_fastapi_post.md +0 -88
  277. wireup-2.9.0/z_docs/ideas/z_test_glm_testing_report.md +0 -479
  278. wireup-2.9.0/z_docs/ideas/z_test_new_integrations.md +0 -134
  279. wireup-2.9.0/z_test.py +0 -10
  280. wireup-2.9.0/z_test_2.8.0_release.md +0 -97
  281. wireup-2.9.0/z_test_bug.py +0 -12
  282. {wireup-2.9.0/.agent → wireup-2.11.0/.agents}/workflows/context.md +0 -0
  283. {wireup-2.9.0 → wireup-2.11.0}/.cache/.gitignore +0 -0
  284. {wireup-2.9.0 → wireup-2.11.0}/.cache/10044845188665810066 +0 -0
  285. {wireup-2.9.0 → wireup-2.11.0}/.cache/10294724371649670728 +0 -0
  286. {wireup-2.9.0 → wireup-2.11.0}/.cache/1076323475707195139 +0 -0
  287. {wireup-2.9.0 → wireup-2.11.0}/.cache/11070404547826992651 +0 -0
  288. {wireup-2.9.0 → wireup-2.11.0}/.cache/11124823139456244859 +0 -0
  289. {wireup-2.9.0 → wireup-2.11.0}/.cache/11293014782143221354 +0 -0
  290. {wireup-2.9.0 → wireup-2.11.0}/.cache/1226111022864589093 +0 -0
  291. {wireup-2.9.0 → wireup-2.11.0}/.cache/12549328558144052424 +0 -0
  292. {wireup-2.9.0 → wireup-2.11.0}/.cache/1271758769353586558 +0 -0
  293. {wireup-2.9.0 → wireup-2.11.0}/.cache/12733979256433392731 +0 -0
  294. {wireup-2.9.0 → wireup-2.11.0}/.cache/12752882211929243556 +0 -0
  295. {wireup-2.9.0 → wireup-2.11.0}/.cache/12783426531917578909 +0 -0
  296. {wireup-2.9.0 → wireup-2.11.0}/.cache/12830345886006928062 +0 -0
  297. {wireup-2.9.0 → wireup-2.11.0}/.cache/13014544647268190247 +0 -0
  298. {wireup-2.9.0 → wireup-2.11.0}/.cache/13083424730640715152 +0 -0
  299. {wireup-2.9.0 → wireup-2.11.0}/.cache/13128933095426148813 +0 -0
  300. {wireup-2.9.0 → wireup-2.11.0}/.cache/13370773888390464336 +0 -0
  301. {wireup-2.9.0 → wireup-2.11.0}/.cache/13403801197489695949 +0 -0
  302. {wireup-2.9.0 → wireup-2.11.0}/.cache/1361555227596880095 +0 -0
  303. {wireup-2.9.0 → wireup-2.11.0}/.cache/13775377501054353309 +0 -0
  304. {wireup-2.9.0 → wireup-2.11.0}/.cache/1439640565749963662 +0 -0
  305. {wireup-2.9.0 → wireup-2.11.0}/.cache/14761872988004119841 +0 -0
  306. {wireup-2.9.0 → wireup-2.11.0}/.cache/14837314323412076685 +0 -0
  307. {wireup-2.9.0 → wireup-2.11.0}/.cache/15018906666218230475 +0 -0
  308. {wireup-2.9.0 → wireup-2.11.0}/.cache/15137346072215138130 +0 -0
  309. {wireup-2.9.0 → wireup-2.11.0}/.cache/15746470211891335948 +0 -0
  310. {wireup-2.9.0 → wireup-2.11.0}/.cache/16124785681570184387 +0 -0
  311. {wireup-2.9.0 → wireup-2.11.0}/.cache/16306461914818170209 +0 -0
  312. {wireup-2.9.0 → wireup-2.11.0}/.cache/17346873189989222451 +0 -0
  313. {wireup-2.9.0 → wireup-2.11.0}/.cache/17539328537605741444 +0 -0
  314. {wireup-2.9.0 → wireup-2.11.0}/.cache/1756490492350570913 +0 -0
  315. {wireup-2.9.0 → wireup-2.11.0}/.cache/17695288524157522424 +0 -0
  316. {wireup-2.9.0 → wireup-2.11.0}/.cache/17993352065017356676 +0 -0
  317. {wireup-2.9.0 → wireup-2.11.0}/.cache/2491296543125450213 +0 -0
  318. {wireup-2.9.0 → wireup-2.11.0}/.cache/2511243215163562241 +0 -0
  319. {wireup-2.9.0 → wireup-2.11.0}/.cache/2989687286403812976 +0 -0
  320. {wireup-2.9.0 → wireup-2.11.0}/.cache/3004183706503532835 +0 -0
  321. {wireup-2.9.0 → wireup-2.11.0}/.cache/3121150246064866450 +0 -0
  322. {wireup-2.9.0 → wireup-2.11.0}/.cache/3124270596782374079 +0 -0
  323. {wireup-2.9.0 → wireup-2.11.0}/.cache/3476900567878811119 +0 -0
  324. {wireup-2.9.0 → wireup-2.11.0}/.cache/3702806183923662406 +0 -0
  325. {wireup-2.9.0 → wireup-2.11.0}/.cache/4201971366852234974 +0 -0
  326. {wireup-2.9.0 → wireup-2.11.0}/.cache/4248594428038296655 +0 -0
  327. {wireup-2.9.0 → wireup-2.11.0}/.cache/4328746867122106743 +0 -0
  328. {wireup-2.9.0 → wireup-2.11.0}/.cache/453810864507090243 +0 -0
  329. {wireup-2.9.0 → wireup-2.11.0}/.cache/4607165423255654887 +0 -0
  330. {wireup-2.9.0 → wireup-2.11.0}/.cache/4655087458686603143 +0 -0
  331. {wireup-2.9.0 → wireup-2.11.0}/.cache/4911927025649090134 +0 -0
  332. {wireup-2.9.0 → wireup-2.11.0}/.cache/5545364815676479752 +0 -0
  333. {wireup-2.9.0 → wireup-2.11.0}/.cache/5582803025959560496 +0 -0
  334. {wireup-2.9.0 → wireup-2.11.0}/.cache/6446587083349335436 +0 -0
  335. {wireup-2.9.0 → wireup-2.11.0}/.cache/7197171008315212702 +0 -0
  336. {wireup-2.9.0 → wireup-2.11.0}/.cache/7815757281852325210 +0 -0
  337. {wireup-2.9.0 → wireup-2.11.0}/.cache/7940362391983581688 +0 -0
  338. {wireup-2.9.0 → wireup-2.11.0}/.cache/8465230536178924220 +0 -0
  339. {wireup-2.9.0 → wireup-2.11.0}/.cache/8499329960173449201 +0 -0
  340. {wireup-2.9.0 → wireup-2.11.0}/.cache/8504618348287803373 +0 -0
  341. {wireup-2.9.0 → wireup-2.11.0}/.cache/8761805547931915049 +0 -0
  342. {wireup-2.9.0 → wireup-2.11.0}/.cache/918853441261096549 +0 -0
  343. {wireup-2.9.0 → wireup-2.11.0}/.cache/9231702844672586930 +0 -0
  344. {wireup-2.9.0 → wireup-2.11.0}/.cache/9252445419859529063 +0 -0
  345. {wireup-2.9.0 → wireup-2.11.0}/.cache/9597896872206851048 +0 -0
  346. {wireup-2.9.0 → wireup-2.11.0}/.cache/9860729219353091761 +0 -0
  347. {wireup-2.9.0 → wireup-2.11.0}/.cache/9961436229075698645 +0 -0
  348. /wireup-2.9.0/benchmarks/wireup_benchmarks/__init__.py → /wireup-2.11.0/.codex +0 -0
  349. {wireup-2.9.0 → wireup-2.11.0}/.github/workflows/run_integration_tests.yml +0 -0
  350. {wireup-2.9.0 → wireup-2.11.0}/.gitignore +0 -0
  351. {wireup-2.9.0 → wireup-2.11.0}/.vscode/launch.json +0 -0
  352. {wireup-2.9.0 → wireup-2.11.0}/.vscode/settings.json +0 -0
  353. {wireup-2.9.0 → wireup-2.11.0}/Makefile +0 -0
  354. {wireup-2.9.0 → wireup-2.11.0}/benchmarks/benchmark_meta.json +0 -0
  355. {wireup-2.9.0 → wireup-2.11.0}/benchmarks/benchmark_results.csv +0 -0
  356. {wireup-2.9.0 → wireup-2.11.0}/benchmarks/benchmark_run_metrics.csv +0 -0
  357. {wireup-2.9.0 → wireup-2.11.0}/benchmarks/generate_tables.py +0 -0
  358. {wireup-2.9.0/test → wireup-2.11.0/benchmarks/wireup_benchmarks}/__init__.py +0 -0
  359. {wireup-2.9.0 → wireup-2.11.0}/benchmarks/wireup_benchmarks/app.py +0 -0
  360. {wireup-2.9.0 → wireup-2.11.0}/docs/.cache/.gitignore +0 -0
  361. {wireup-2.9.0 → wireup-2.11.0}/docs/overrides/main.html +0 -0
  362. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/benchmarks.md +0 -0
  363. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/class/aiohttp_integration.md +0 -0
  364. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/class/asgi_integration.md +0 -0
  365. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/class/celery_integration.md +0 -0
  366. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/class/click_integration.md +0 -0
  367. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/class/config_store.md +0 -0
  368. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/class/django_integration.md +0 -0
  369. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/class/fastmcp_integration.md +0 -0
  370. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/class/flask_integration.md +0 -0
  371. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/class/override_manager.md +0 -0
  372. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/class/typer_integration.md +0 -0
  373. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/class/wireup.md +0 -0
  374. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/conditional_registration.md +0 -0
  375. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/configuration.md +0 -0
  376. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/factories.md +0 -0
  377. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/function_injection.md +0 -0
  378. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/generic_dependencies.md +0 -0
  379. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/getting_started.md +0 -0
  380. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/img/benchmarks_scoped_dark.svg +0 -0
  381. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/img/benchmarks_scoped_light.svg +0 -0
  382. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/img/benchmarks_singleton_dark.svg +0 -0
  383. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/img/benchmarks_singleton_light.svg +0 -0
  384. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/injectables.md +0 -0
  385. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/aiohttp/class_based_handlers.md +0 -0
  386. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/asgi/generic_asgi.md +0 -0
  387. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/celery/index.md +0 -0
  388. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/django/app_injection.md +0 -0
  389. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/django/request_time_injection.md +0 -0
  390. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/django/setup.md +0 -0
  391. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/django/testing.md +0 -0
  392. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/django/troubleshooting.md +0 -0
  393. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/django/view_injection.md +0 -0
  394. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/fastapi/class_based_handlers.md +0 -0
  395. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/fastapi/context_in_services.md +0 -0
  396. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/fastapi/inject_in_routes.md +0 -0
  397. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/fastapi/request_time_injection.md +0 -0
  398. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/fastapi/testing.md +0 -0
  399. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/fastapi/troubleshooting.md +0 -0
  400. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/fastmcp/index.md +0 -0
  401. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/index.md +0 -0
  402. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/starlette/index.md +0 -0
  403. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/integrations/strawberry/index.md +0 -0
  404. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/migrate_to_wireup/dependency_injector.md +0 -0
  405. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/migrate_to_wireup/fastapi_depends.md +0 -0
  406. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/migrate_to_wireup/index.md +0 -0
  407. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/resources.md +0 -0
  408. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/reusable_bundles.md +0 -0
  409. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/upgrading.md +0 -0
  410. {wireup-2.9.0 → wireup-2.11.0}/docs/pages/versioning.md +0 -0
  411. {wireup-2.9.0 → wireup-2.11.0}/license.md +0 -0
  412. {wireup-2.9.0 → wireup-2.11.0}/profile_tests.py +0 -0
  413. {wireup-2.9.0/test/integration → wireup-2.11.0/test}/__init__.py +0 -0
  414. {wireup-2.9.0/test/integration/aiohttp → wireup-2.11.0/test/integration}/__init__.py +0 -0
  415. {wireup-2.9.0/test/integration/click → wireup-2.11.0/test/integration/aiohttp}/__init__.py +0 -0
  416. {wireup-2.9.0 → wireup-2.11.0}/test/integration/aiohttp/handler.py +0 -0
  417. {wireup-2.9.0 → wireup-2.11.0}/test/integration/aiohttp/routes.py +0 -0
  418. {wireup-2.9.0 → wireup-2.11.0}/test/integration/aiohttp/services.py +0 -0
  419. {wireup-2.9.0 → wireup-2.11.0}/test/integration/asgi/__init__.py +0 -0
  420. {wireup-2.9.0 → wireup-2.11.0}/test/integration/celery/__init__.py +0 -0
  421. {wireup-2.9.0/test/integration/django → wireup-2.11.0/test/integration/click}/__init__.py +0 -0
  422. {wireup-2.9.0/test/integration/django/apps → wireup-2.11.0/test/integration/django}/__init__.py +0 -0
  423. {wireup-2.9.0/test/integration/django/apps/app_1 → wireup-2.11.0/test/integration/django/apps}/__init__.py +0 -0
  424. {wireup-2.9.0/test/integration/django/apps/app_2 → wireup-2.11.0/test/integration/django/apps/app_1}/__init__.py +0 -0
  425. {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/apps/app_1/app.py +0 -0
  426. {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/apps/app_1/management/__init__.py +0 -0
  427. {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/apps/app_1/management/commands/__init__.py +0 -0
  428. {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/apps/app_1/management/commands/wireup_greet.py +0 -0
  429. {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/apps/app_1/urls.py +0 -0
  430. {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/apps/app_1/views.py +0 -0
  431. {wireup-2.9.0/test/integration/django/apps/drf_app → wireup-2.11.0/test/integration/django/apps/app_2}/__init__.py +0 -0
  432. {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/apps/app_2/app.py +0 -0
  433. {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/apps/app_2/urls.py +0 -0
  434. {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/apps/app_2/views.py +0 -0
  435. {wireup-2.9.0/test/integration/django/apps/ninja_app → wireup-2.11.0/test/integration/django/apps/drf_app}/__init__.py +0 -0
  436. {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/apps/drf_app/app.py +0 -0
  437. {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/apps/drf_app/urls.py +0 -0
  438. {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/apps/drf_app/views.py +0 -0
  439. {wireup-2.9.0/test/integration/django/factory → wireup-2.11.0/test/integration/django/apps/ninja_app}/__init__.py +0 -0
  440. {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/apps/ninja_app/app.py +0 -0
  441. {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/apps/ninja_app/urls.py +0 -0
  442. {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/apps/ninja_app/views.py +0 -0
  443. {wireup-2.9.0/test/integration/django/injectable → wireup-2.11.0/test/integration/django/factory}/__init__.py +0 -0
  444. {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/factory/factories.py +0 -0
  445. {wireup-2.9.0/test/integration/fastapi → wireup-2.11.0/test/integration/django/injectable}/__init__.py +0 -0
  446. {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/injectable/current_request_service.py +0 -0
  447. {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/injectable/random_service.py +0 -0
  448. {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/templates/bar.html +0 -0
  449. {wireup-2.9.0 → wireup-2.11.0}/test/integration/django/templates/foo.html +0 -0
  450. {wireup-2.9.0/test/integration/flask → wireup-2.11.0/test/integration/fastapi}/__init__.py +0 -0
  451. {wireup-2.9.0 → wireup-2.11.0}/test/integration/fastapi/services.py +0 -0
  452. {wireup-2.9.0 → wireup-2.11.0}/test/integration/fastapi/test_fastapi_codegen_snapshots.py +0 -0
  453. {wireup-2.9.0 → wireup-2.11.0}/test/integration/fastapi/wireup_route.py +0 -0
  454. {wireup-2.9.0 → wireup-2.11.0}/test/integration/fastmcp/__init__.py +0 -0
  455. {wireup-2.9.0 → wireup-2.11.0}/test/integration/fastmcp/test_fastmcp_standalone_usage.py +0 -0
  456. {wireup-2.9.0/test/integration/flask/services → wireup-2.11.0/test/integration/flask}/__init__.py +0 -0
  457. {wireup-2.9.0/test/integration/starlette → wireup-2.11.0/test/integration/flask/services}/__init__.py +0 -0
  458. {wireup-2.9.0 → wireup-2.11.0}/test/integration/flask/services/factories.py +0 -0
  459. {wireup-2.9.0/test/shared → wireup-2.11.0/test/integration/starlette}/__init__.py +0 -0
  460. {wireup-2.9.0 → wireup-2.11.0}/test/integration/strawberry/__init__.py +0 -0
  461. {wireup-2.9.0 → wireup-2.11.0}/test/integration/strawberry/test_strawberry_django_usage.py +0 -0
  462. {wireup-2.9.0 → wireup-2.11.0}/test/integration/strawberry/test_strawberry_fastapi_usage.py +0 -0
  463. {wireup-2.9.0 → wireup-2.11.0}/test/integration/strawberry/test_strawberry_starlette_usage.py +0 -0
  464. {wireup-2.9.0 → wireup-2.11.0}/test/integration/typer/__init__.py +0 -0
  465. {wireup-2.9.0/test/shared/shared_services → wireup-2.11.0/test/shared}/__init__.py +0 -0
  466. {wireup-2.9.0/test/unit → wireup-2.11.0/test/shared/shared_services}/__init__.py +0 -0
  467. {wireup-2.9.0 → wireup-2.11.0}/test/shared/shared_services/greeter.py +0 -0
  468. {wireup-2.9.0 → wireup-2.11.0}/test/shared/shared_services/rand.py +0 -0
  469. {wireup-2.9.0 → wireup-2.11.0}/test/shared/shared_services/scoped.py +0 -0
  470. {wireup-2.9.0/test/unit/services/no_annotations/random → wireup-2.11.0/test/unit}/__init__.py +0 -0
  471. {wireup-2.9.0 → wireup-2.11.0}/test/unit/service_refs/__init__.py +0 -0
  472. {wireup-2.9.0 → wireup-2.11.0}/test/unit/services/__init__.py +0 -0
  473. {wireup-2.9.0 → wireup-2.11.0}/test/unit/services/abstract_multiple_bases.py +0 -0
  474. {wireup-2.9.0 → wireup-2.11.0}/test/unit/services/async_reg.py +0 -0
  475. {wireup-2.9.0 → wireup-2.11.0}/test/unit/services/inheritance_test/__init__.py +0 -0
  476. {wireup-2.9.0 → wireup-2.11.0}/test/unit/services/inheritance_test/base.py +0 -0
  477. {wireup-2.9.0 → wireup-2.11.0}/test/unit/services/no_annotations/__init__.py +0 -0
  478. {wireup-2.9.0/test/unit/services/with_annotations → wireup-2.11.0/test/unit/services/no_annotations/random}/__init__.py +0 -0
  479. {wireup-2.9.0 → wireup-2.11.0}/test/unit/services/no_annotations/random/random_service.py +0 -0
  480. {wireup-2.9.0 → wireup-2.11.0}/test/unit/services/no_annotations/random/truly_random_service.py +0 -0
  481. {wireup-2.9.0/wireup/integration → wireup-2.11.0/test/unit/services/with_annotations}/__init__.py +0 -0
  482. {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_concurrency.py +0 -0
  483. {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_module_loading.py +0 -0
  484. {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_parameter.py +0 -0
  485. {wireup-2.9.0 → wireup-2.11.0}/test/unit/test_service_deprecation.py +0 -0
  486. {wireup-2.9.0 → wireup-2.11.0}/tox.ini +0 -0
  487. {wireup-2.9.0/wireup/ioc → wireup-2.11.0/wireup/integration}/__init__.py +0 -0
  488. {wireup-2.9.0 → wireup-2.11.0}/wireup/integration/asgi.py +0 -0
  489. {wireup-2.9.0 → wireup-2.11.0}/wireup/integration/click.py +0 -0
  490. {wireup-2.9.0 → wireup-2.11.0}/wireup/integration/django/__init__.py +0 -0
  491. {wireup-2.9.0 → wireup-2.11.0}/wireup/integration/fastmcp.py +0 -0
  492. {wireup-2.9.0 → wireup-2.11.0}/wireup/integration/typer.py +0 -0
  493. {wireup-2.9.0/z_prep → wireup-2.11.0/wireup/ioc}/__init__.py +0 -0
  494. {wireup-2.9.0 → wireup-2.11.0}/wireup/ioc/container/lock_registry.py +0 -0
  495. {wireup-2.9.0 → wireup-2.11.0}/wireup/py.typed +0 -0
  496. {wireup-2.9.0 → wireup-2.11.0}/z_docs/.obsidian/app.json +0 -0
  497. {wireup-2.9.0 → wireup-2.11.0}/z_docs/.obsidian/core-plugins.json +0 -0
  498. {wireup-2.9.0 → wireup-2.11.0}/z_docs/drafts/codex_djangoforum.md +0 -0
  499. {wireup-2.9.0 → wireup-2.11.0}/z_docs/drafts/codex_fastmcp_post.md +0 -0
  500. {wireup-2.9.0 → wireup-2.11.0}/z_docs/drafts/coxed_fastapi_discussion.md +0 -0
  501. {wireup-2.9.0 → wireup-2.11.0}/z_docs/drafts/coxed_fastmcp_post.md +0 -0
  502. {wireup-2.9.0 → wireup-2.11.0}/z_docs/drafts/coxed_strawberry_discussion.md +0 -0
  503. {wireup-2.9.0 → wireup-2.11.0}/z_docs/drafts/dodona_march_en.md +0 -0
  504. {wireup-2.9.0 → wireup-2.11.0}/z_docs/drafts/hrt.md +0 -0
  505. {wireup-2.9.0 → wireup-2.11.0}/z_docs/drafts/open_generics.md +0 -0
  506. {wireup-2.9.0 → wireup-2.11.0}/z_docs/ideas/nested scopes.md +0 -0
  507. {wireup-2.9.0 → wireup-2.11.0}/z_docs/ideas/post_aggregates_followups.md +0 -0
  508. {wireup-2.9.0 → wireup-2.11.0}/z_docs/ideas/transactional.md +0 -0
  509. {wireup-2.9.0 → wireup-2.11.0}/z_docs/ideas/wireup_provided.md +0 -0
  510. {wireup-2.9.0 → wireup-2.11.0}/z_docs/ideas/z_test_community_engagement.md +0 -0
  511. {wireup-2.9.0 → wireup-2.11.0}/z_docs/ideas/z_test_dependency_injector.md +0 -0
  512. {wireup-2.9.0 → wireup-2.11.0}/z_docs/ideas/z_test_seo_plan.md +0 -0
  513. {wireup-2.9.0 → wireup-2.11.0}/z_docs/ideas/z_test_wireup_seo_plan_2026.md +0 -0
  514. {wireup-2.9.0 → wireup-2.11.0}/z_docs/style/docs_voice.md +0 -0
  515. {wireup-2.9.0/z_test_services → wireup-2.11.0/z_prep}/__init__.py +0 -0
  516. {wireup-2.9.0 → wireup-2.11.0}/z_prep/js_stack.py +0 -0
  517. {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_cit_code1.py +0 -0
  518. {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_cit_code2.py +0 -0
  519. {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_cit_palindrome.py +0 -0
  520. {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_citadel_oa1.py +0 -0
  521. {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt.py +0 -0
  522. {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt10.py +0 -0
  523. {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt11.py +0 -0
  524. {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt12.py +0 -0
  525. {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt13.py +0 -0
  526. {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt14.py +0 -0
  527. {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt15.py +0 -0
  528. {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt16.py +0 -0
  529. {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt17.py +0 -0
  530. {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt18.py +0 -0
  531. {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt2.py +0 -0
  532. {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt3.py +0 -0
  533. {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt4.py +0 -0
  534. {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt5.py +0 -0
  535. {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt6.py +0 -0
  536. {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt7.py +0 -0
  537. {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt8.py +0 -0
  538. {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_hrt9.py +0 -0
  539. {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_js_code1.py +0 -0
  540. {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_js_code2.py +0 -0
  541. {wireup-2.9.0 → wireup-2.11.0}/z_prep/z_test_py.py +0 -0
  542. {wireup-2.9.0 → wireup-2.11.0}/z_test_benchmark.py +0 -0
  543. {wireup-2.9.0 → wireup-2.11.0}/z_test_dict.py +0 -0
  544. {wireup-2.9.0 → wireup-2.11.0}/z_test_fastapi.py +0 -0
  545. {wireup-2.9.0 → wireup-2.11.0}/z_test_get_typeform.py +0 -0
  546. {wireup-2.9.0 → wireup-2.11.0}/z_test_hash.py +0 -0
  547. {wireup-2.9.0 → wireup-2.11.0}/z_test_inject_from_container.py +0 -0
  548. {wireup-2.9.0 → wireup-2.11.0}/z_test_instance.py +0 -0
  549. {wireup-2.9.0 → wireup-2.11.0}/z_test_leetcode_arrays_lists.md +0 -0
  550. {wireup-2.9.0 → wireup-2.11.0}/z_test_misc.py +0 -0
  551. {wireup-2.9.0 → wireup-2.11.0}/z_test_provider_style.py +0 -0
  552. {wireup-2.9.0 → wireup-2.11.0}/z_test_reusable.py +0 -0
  553. {wireup-2.9.0 → wireup-2.11.0}/z_test_services/bar.py +0 -0
  554. {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.8+ compatibility
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.8"
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.8", "3.9", "3.10", "3.11", "3.12", "3.13", "3.14"]
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.9.0
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.8
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 Any, Callable, Dict, List, Optional, TextIO, Tuple
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 = Dict[str, Any]
72
- BenchResult = Dict[str, Any]
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() -> Tuple[str, str]:
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
- ) -> Dict[str, str]:
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: Dict[str, str], benchmarks_dir: str, log_file: TextIO) -> subprocess.Popen[Any]:
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: List[float], p: float) -> float:
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: List[float]) -> Dict[str, float]:
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
- ) -> Dict[str, float]:
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) -> Dict[str, Any]:
256
- latencies: List[float] = []
257
- status_codes: List[int] = []
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) -> Tuple[bool, Dict[str, Any]]:
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
- ) -> Optional[BenchIteration]:
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: Dict[str, float] = {"rss_peak_mb": 0.0}
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: List[BenchIteration],
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: List[BenchResult] = []
510
+ all_results: list[BenchResult] = []
506
511
  fieldnames = SUMMARY_FIELDNAMES
507
512
  run_fieldnames = RUN_FIELDNAMES
508
- run_state: Dict[Tuple[str, str], List[BenchIteration]] = {pair: [] for pair in pairs}
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: List[BenchResult]) -> Optional[Table]:
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: Dict[Tuple[str, str], BenchResult] = {}
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: List[Any] = []
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: Dict[str, Any] = dict.fromkeys(run_fieldnames, "")
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 DefaultDict, Dict, List, TypedDict
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) -> Dict[str, List[ChartItem]]:
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: DefaultDict[str, List[ChartItem]] = defaultdict(list)
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: List[ChartItem], filename: str, text_color: str = "black") -> None:
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() -> List[str]:
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: List[str] = []
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]) -> Dict[str, str]:
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
- ) -> Dict[str, str]:
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, Dict
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 typing_extensions import Annotated
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
- ) -> Dict[str, Any]:
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
- ) -> Dict[str, Any]:
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]) -> Dict[str, str]:
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
- ) -> Dict[str, str]:
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]) -> Dict[str, str]:
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
- ) -> Dict[str, str]:
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 typing import AsyncIterator, Dict, Iterator
2
+ from collections.abc import AsyncIterator, Iterator
3
3
 
4
4
  import fastapi
5
- from typing_extensions import Annotated
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
- ) -> Dict[str, str]:
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
- ) -> Dict[str, str]:
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() -> Dict[str, str]:
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() -> Dict[str, str]:
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
- ) -> Dict[str, str]:
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
- ) -> Dict[str, str]:
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 typing import Dict, Iterator
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
- ) -> Dict[str, str]:
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
- ) -> Dict[str, str]:
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 typing import AsyncIterator, Dict, Iterator, Optional, Tuple
11
+ from collections.abc import AsyncIterator, Iterator
12
12
 
13
- _COUNTERS: Dict[str, int] = {}
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() -> Dict[str, int]:
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) -> Dict[str, int]:
56
- expected: Dict[str, int] = {}
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: Optional[Dict[str, int]] = None,
73
- ) -> Tuple[bool, Dict[str, int], Dict[str, int], Dict[str, int]]:
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: Dict[str, int] = {}
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) -> Dict[str, str]:
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) -> Dict[str, str]:
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,4 +1,4 @@
1
- from typing_extensions import Annotated
1
+ from typing import Annotated
2
2
 
3
3
  from fastapi import APIRouter, Depends
4
4
  from that_depends import BaseContainer, providers
@@ -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) -> Dict[str, str]:
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
- ) -> Dict[str, str]:
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]) -> Dict[str, str]:
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
- ) -> Dict[str, str]:
48
+ ) -> dict[str, str]:
51
49
  services.record_request("scoped")
52
50
  assert isinstance(c, C)
53
51
  assert c is cc