notslowapi 0.1.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 (1264) hide show
  1. notslowapi-0.1.0/LICENSE +21 -0
  2. notslowapi-0.1.0/PKG-INFO +163 -0
  3. notslowapi-0.1.0/README.md +94 -0
  4. notslowapi-0.1.0/docs/en/docs/img/favicon.png +0 -0
  5. notslowapi-0.1.0/docs_src/additional_responses/__init__.py +0 -0
  6. notslowapi-0.1.0/docs_src/additional_responses/tutorial001_py310.py +22 -0
  7. notslowapi-0.1.0/docs_src/additional_responses/tutorial002_py310.py +28 -0
  8. notslowapi-0.1.0/docs_src/additional_responses/tutorial003_py310.py +37 -0
  9. notslowapi-0.1.0/docs_src/additional_responses/tutorial004_py310.py +30 -0
  10. notslowapi-0.1.0/docs_src/additional_status_codes/__init__.py +0 -0
  11. notslowapi-0.1.0/docs_src/additional_status_codes/tutorial001_an_py310.py +25 -0
  12. notslowapi-0.1.0/docs_src/additional_status_codes/tutorial001_py310.py +23 -0
  13. notslowapi-0.1.0/docs_src/advanced_middleware/__init__.py +0 -0
  14. notslowapi-0.1.0/docs_src/advanced_middleware/tutorial001_py310.py +11 -0
  15. notslowapi-0.1.0/docs_src/advanced_middleware/tutorial002_py310.py +13 -0
  16. notslowapi-0.1.0/docs_src/advanced_middleware/tutorial003_py310.py +11 -0
  17. notslowapi-0.1.0/docs_src/app_testing/__init__.py +0 -0
  18. notslowapi-0.1.0/docs_src/app_testing/app_a_py310/__init__.py +0 -0
  19. notslowapi-0.1.0/docs_src/app_testing/app_a_py310/main.py +8 -0
  20. notslowapi-0.1.0/docs_src/app_testing/app_a_py310/test_main.py +11 -0
  21. notslowapi-0.1.0/docs_src/app_testing/app_b_an_py310/__init__.py +0 -0
  22. notslowapi-0.1.0/docs_src/app_testing/app_b_an_py310/main.py +38 -0
  23. notslowapi-0.1.0/docs_src/app_testing/app_b_an_py310/test_main.py +65 -0
  24. notslowapi-0.1.0/docs_src/app_testing/app_b_py310/__init__.py +0 -0
  25. notslowapi-0.1.0/docs_src/app_testing/app_b_py310/main.py +36 -0
  26. notslowapi-0.1.0/docs_src/app_testing/app_b_py310/test_main.py +65 -0
  27. notslowapi-0.1.0/docs_src/app_testing/tutorial001_py310.py +18 -0
  28. notslowapi-0.1.0/docs_src/app_testing/tutorial002_py310.py +31 -0
  29. notslowapi-0.1.0/docs_src/app_testing/tutorial003_py310.py +24 -0
  30. notslowapi-0.1.0/docs_src/app_testing/tutorial004_py310.py +43 -0
  31. notslowapi-0.1.0/docs_src/async_tests/__init__.py +0 -0
  32. notslowapi-0.1.0/docs_src/async_tests/app_a_py310/__init__.py +0 -0
  33. notslowapi-0.1.0/docs_src/async_tests/app_a_py310/main.py +8 -0
  34. notslowapi-0.1.0/docs_src/async_tests/app_a_py310/test_main.py +14 -0
  35. notslowapi-0.1.0/docs_src/authentication_error_status_code/__init__.py +0 -0
  36. notslowapi-0.1.0/docs_src/authentication_error_status_code/tutorial001_an_py310.py +21 -0
  37. notslowapi-0.1.0/docs_src/background_tasks/__init__.py +0 -0
  38. notslowapi-0.1.0/docs_src/background_tasks/tutorial001_py310.py +15 -0
  39. notslowapi-0.1.0/docs_src/background_tasks/tutorial002_an_py310.py +26 -0
  40. notslowapi-0.1.0/docs_src/background_tasks/tutorial002_py310.py +24 -0
  41. notslowapi-0.1.0/docs_src/behind_a_proxy/__init__.py +0 -0
  42. notslowapi-0.1.0/docs_src/behind_a_proxy/tutorial001_01_py310.py +8 -0
  43. notslowapi-0.1.0/docs_src/behind_a_proxy/tutorial001_py310.py +8 -0
  44. notslowapi-0.1.0/docs_src/behind_a_proxy/tutorial002_py310.py +8 -0
  45. notslowapi-0.1.0/docs_src/behind_a_proxy/tutorial003_py310.py +14 -0
  46. notslowapi-0.1.0/docs_src/behind_a_proxy/tutorial004_py310.py +15 -0
  47. notslowapi-0.1.0/docs_src/bigger_applications/__init__.py +0 -0
  48. notslowapi-0.1.0/docs_src/bigger_applications/app_an_py310/__init__.py +0 -0
  49. notslowapi-0.1.0/docs_src/bigger_applications/app_an_py310/dependencies.py +13 -0
  50. notslowapi-0.1.0/docs_src/bigger_applications/app_an_py310/internal/__init__.py +0 -0
  51. notslowapi-0.1.0/docs_src/bigger_applications/app_an_py310/internal/admin.py +8 -0
  52. notslowapi-0.1.0/docs_src/bigger_applications/app_an_py310/main.py +23 -0
  53. notslowapi-0.1.0/docs_src/bigger_applications/app_an_py310/routers/__init__.py +0 -0
  54. notslowapi-0.1.0/docs_src/bigger_applications/app_an_py310/routers/items.py +38 -0
  55. notslowapi-0.1.0/docs_src/bigger_applications/app_an_py310/routers/users.py +18 -0
  56. notslowapi-0.1.0/docs_src/body/__init__.py +0 -0
  57. notslowapi-0.1.0/docs_src/body/tutorial001_py310.py +17 -0
  58. notslowapi-0.1.0/docs_src/body/tutorial002_py310.py +21 -0
  59. notslowapi-0.1.0/docs_src/body/tutorial003_py310.py +17 -0
  60. notslowapi-0.1.0/docs_src/body/tutorial004_py310.py +20 -0
  61. notslowapi-0.1.0/docs_src/body_fields/__init__.py +0 -0
  62. notslowapi-0.1.0/docs_src/body_fields/tutorial001_an_py310.py +21 -0
  63. notslowapi-0.1.0/docs_src/body_fields/tutorial001_py310.py +19 -0
  64. notslowapi-0.1.0/docs_src/body_multiple_params/__init__.py +0 -0
  65. notslowapi-0.1.0/docs_src/body_multiple_params/tutorial001_an_py310.py +27 -0
  66. notslowapi-0.1.0/docs_src/body_multiple_params/tutorial001_py310.py +26 -0
  67. notslowapi-0.1.0/docs_src/body_multiple_params/tutorial002_py310.py +22 -0
  68. notslowapi-0.1.0/docs_src/body_multiple_params/tutorial003_an_py310.py +26 -0
  69. notslowapi-0.1.0/docs_src/body_multiple_params/tutorial003_py310.py +22 -0
  70. notslowapi-0.1.0/docs_src/body_multiple_params/tutorial004_an_py310.py +33 -0
  71. notslowapi-0.1.0/docs_src/body_multiple_params/tutorial004_py310.py +31 -0
  72. notslowapi-0.1.0/docs_src/body_multiple_params/tutorial005_an_py310.py +19 -0
  73. notslowapi-0.1.0/docs_src/body_multiple_params/tutorial005_py310.py +17 -0
  74. notslowapi-0.1.0/docs_src/body_nested_models/__init__.py +0 -0
  75. notslowapi-0.1.0/docs_src/body_nested_models/tutorial001_py310.py +18 -0
  76. notslowapi-0.1.0/docs_src/body_nested_models/tutorial002_py310.py +18 -0
  77. notslowapi-0.1.0/docs_src/body_nested_models/tutorial003_py310.py +18 -0
  78. notslowapi-0.1.0/docs_src/body_nested_models/tutorial004_py310.py +24 -0
  79. notslowapi-0.1.0/docs_src/body_nested_models/tutorial005_py310.py +24 -0
  80. notslowapi-0.1.0/docs_src/body_nested_models/tutorial006_py310.py +24 -0
  81. notslowapi-0.1.0/docs_src/body_nested_models/tutorial007_py310.py +30 -0
  82. notslowapi-0.1.0/docs_src/body_nested_models/tutorial008_py310.py +14 -0
  83. notslowapi-0.1.0/docs_src/body_nested_models/tutorial009_py310.py +8 -0
  84. notslowapi-0.1.0/docs_src/body_updates/__init__.py +0 -0
  85. notslowapi-0.1.0/docs_src/body_updates/tutorial001_py310.py +32 -0
  86. notslowapi-0.1.0/docs_src/body_updates/tutorial002_py310.py +35 -0
  87. notslowapi-0.1.0/docs_src/conditional_openapi/__init__.py +0 -0
  88. notslowapi-0.1.0/docs_src/conditional_openapi/tutorial001_py310.py +16 -0
  89. notslowapi-0.1.0/docs_src/configure_swagger_ui/__init__.py +0 -0
  90. notslowapi-0.1.0/docs_src/configure_swagger_ui/tutorial001_py310.py +8 -0
  91. notslowapi-0.1.0/docs_src/configure_swagger_ui/tutorial002_py310.py +8 -0
  92. notslowapi-0.1.0/docs_src/configure_swagger_ui/tutorial003_py310.py +8 -0
  93. notslowapi-0.1.0/docs_src/cookie_param_models/__init__.py +0 -0
  94. notslowapi-0.1.0/docs_src/cookie_param_models/tutorial001_an_py310.py +17 -0
  95. notslowapi-0.1.0/docs_src/cookie_param_models/tutorial001_py310.py +15 -0
  96. notslowapi-0.1.0/docs_src/cookie_param_models/tutorial002_an_py310.py +19 -0
  97. notslowapi-0.1.0/docs_src/cookie_param_models/tutorial002_py310.py +17 -0
  98. notslowapi-0.1.0/docs_src/cookie_params/__init__.py +0 -0
  99. notslowapi-0.1.0/docs_src/cookie_params/tutorial001_an_py310.py +10 -0
  100. notslowapi-0.1.0/docs_src/cookie_params/tutorial001_py310.py +8 -0
  101. notslowapi-0.1.0/docs_src/cors/__init__.py +0 -0
  102. notslowapi-0.1.0/docs_src/cors/tutorial001_py310.py +24 -0
  103. notslowapi-0.1.0/docs_src/custom_docs_ui/__init__.py +0 -0
  104. notslowapi-0.1.0/docs_src/custom_docs_ui/tutorial001_py310.py +38 -0
  105. notslowapi-0.1.0/docs_src/custom_docs_ui/tutorial002_py310.py +41 -0
  106. notslowapi-0.1.0/docs_src/custom_request_and_route/__init__.py +0 -0
  107. notslowapi-0.1.0/docs_src/custom_request_and_route/tutorial001_an_py310.py +36 -0
  108. notslowapi-0.1.0/docs_src/custom_request_and_route/tutorial001_py310.py +35 -0
  109. notslowapi-0.1.0/docs_src/custom_request_and_route/tutorial002_an_py310.py +30 -0
  110. notslowapi-0.1.0/docs_src/custom_request_and_route/tutorial002_py310.py +29 -0
  111. notslowapi-0.1.0/docs_src/custom_request_and_route/tutorial003_py310.py +39 -0
  112. notslowapi-0.1.0/docs_src/custom_response/__init__.py +0 -0
  113. notslowapi-0.1.0/docs_src/custom_response/tutorial001_py310.py +9 -0
  114. notslowapi-0.1.0/docs_src/custom_response/tutorial001b_py310.py +9 -0
  115. notslowapi-0.1.0/docs_src/custom_response/tutorial002_py310.py +18 -0
  116. notslowapi-0.1.0/docs_src/custom_response/tutorial003_py310.py +19 -0
  117. notslowapi-0.1.0/docs_src/custom_response/tutorial004_py310.py +23 -0
  118. notslowapi-0.1.0/docs_src/custom_response/tutorial005_py310.py +9 -0
  119. notslowapi-0.1.0/docs_src/custom_response/tutorial006_py310.py +9 -0
  120. notslowapi-0.1.0/docs_src/custom_response/tutorial006b_py310.py +9 -0
  121. notslowapi-0.1.0/docs_src/custom_response/tutorial006c_py310.py +9 -0
  122. notslowapi-0.1.0/docs_src/custom_response/tutorial007_py310.py +16 -0
  123. notslowapi-0.1.0/docs_src/custom_response/tutorial008_py310.py +14 -0
  124. notslowapi-0.1.0/docs_src/custom_response/tutorial009_py310.py +10 -0
  125. notslowapi-0.1.0/docs_src/custom_response/tutorial009b_py310.py +10 -0
  126. notslowapi-0.1.0/docs_src/custom_response/tutorial009c_py310.py +19 -0
  127. notslowapi-0.1.0/docs_src/custom_response/tutorial010_py310.py +9 -0
  128. notslowapi-0.1.0/docs_src/dataclasses_/__init__.py +0 -0
  129. notslowapi-0.1.0/docs_src/dataclasses_/tutorial001_py310.py +19 -0
  130. notslowapi-0.1.0/docs_src/dataclasses_/tutorial002_py310.py +25 -0
  131. notslowapi-0.1.0/docs_src/dataclasses_/tutorial003_py310.py +54 -0
  132. notslowapi-0.1.0/docs_src/debugging/__init__.py +0 -0
  133. notslowapi-0.1.0/docs_src/debugging/tutorial001_py310.py +15 -0
  134. notslowapi-0.1.0/docs_src/dependencies/__init__.py +0 -0
  135. notslowapi-0.1.0/docs_src/dependencies/tutorial001_02_an_py310.py +22 -0
  136. notslowapi-0.1.0/docs_src/dependencies/tutorial001_an_py310.py +19 -0
  137. notslowapi-0.1.0/docs_src/dependencies/tutorial001_py310.py +17 -0
  138. notslowapi-0.1.0/docs_src/dependencies/tutorial002_an_py310.py +25 -0
  139. notslowapi-0.1.0/docs_src/dependencies/tutorial002_py310.py +23 -0
  140. notslowapi-0.1.0/docs_src/dependencies/tutorial003_an_py310.py +25 -0
  141. notslowapi-0.1.0/docs_src/dependencies/tutorial003_py310.py +23 -0
  142. notslowapi-0.1.0/docs_src/dependencies/tutorial004_an_py310.py +25 -0
  143. notslowapi-0.1.0/docs_src/dependencies/tutorial004_py310.py +23 -0
  144. notslowapi-0.1.0/docs_src/dependencies/tutorial005_an_py310.py +25 -0
  145. notslowapi-0.1.0/docs_src/dependencies/tutorial005_py310.py +20 -0
  146. notslowapi-0.1.0/docs_src/dependencies/tutorial006_an_py310.py +21 -0
  147. notslowapi-0.1.0/docs_src/dependencies/tutorial006_py310.py +19 -0
  148. notslowapi-0.1.0/docs_src/dependencies/tutorial007_py310.py +6 -0
  149. notslowapi-0.1.0/docs_src/dependencies/tutorial008_an_py310.py +27 -0
  150. notslowapi-0.1.0/docs_src/dependencies/tutorial008_py310.py +25 -0
  151. notslowapi-0.1.0/docs_src/dependencies/tutorial008b_an_py310.py +32 -0
  152. notslowapi-0.1.0/docs_src/dependencies/tutorial008b_py310.py +30 -0
  153. notslowapi-0.1.0/docs_src/dependencies/tutorial008c_an_py310.py +29 -0
  154. notslowapi-0.1.0/docs_src/dependencies/tutorial008c_py310.py +27 -0
  155. notslowapi-0.1.0/docs_src/dependencies/tutorial008d_an_py310.py +30 -0
  156. notslowapi-0.1.0/docs_src/dependencies/tutorial008d_py310.py +28 -0
  157. notslowapi-0.1.0/docs_src/dependencies/tutorial008e_an_py310.py +17 -0
  158. notslowapi-0.1.0/docs_src/dependencies/tutorial008e_py310.py +15 -0
  159. notslowapi-0.1.0/docs_src/dependencies/tutorial010_py310.py +14 -0
  160. notslowapi-0.1.0/docs_src/dependencies/tutorial011_an_py310.py +23 -0
  161. notslowapi-0.1.0/docs_src/dependencies/tutorial011_py310.py +21 -0
  162. notslowapi-0.1.0/docs_src/dependencies/tutorial012_an_py310.py +27 -0
  163. notslowapi-0.1.0/docs_src/dependencies/tutorial012_py310.py +25 -0
  164. notslowapi-0.1.0/docs_src/dependencies/tutorial013_an_py310.py +38 -0
  165. notslowapi-0.1.0/docs_src/dependencies/tutorial014_an_py310.py +39 -0
  166. notslowapi-0.1.0/docs_src/dependency_testing/__init__.py +0 -0
  167. notslowapi-0.1.0/docs_src/dependency_testing/tutorial001_an_py310.py +57 -0
  168. notslowapi-0.1.0/docs_src/dependency_testing/tutorial001_py310.py +55 -0
  169. notslowapi-0.1.0/docs_src/encoder/__init__.py +0 -0
  170. notslowapi-0.1.0/docs_src/encoder/tutorial001_py310.py +22 -0
  171. notslowapi-0.1.0/docs_src/events/__init__.py +0 -0
  172. notslowapi-0.1.0/docs_src/events/tutorial001_py310.py +16 -0
  173. notslowapi-0.1.0/docs_src/events/tutorial002_py310.py +14 -0
  174. notslowapi-0.1.0/docs_src/events/tutorial003_py310.py +28 -0
  175. notslowapi-0.1.0/docs_src/extending_openapi/__init__.py +0 -0
  176. notslowapi-0.1.0/docs_src/extending_openapi/tutorial001_py310.py +29 -0
  177. notslowapi-0.1.0/docs_src/extra_data_types/__init__.py +0 -0
  178. notslowapi-0.1.0/docs_src/extra_data_types/tutorial001_an_py310.py +28 -0
  179. notslowapi-0.1.0/docs_src/extra_data_types/tutorial001_py310.py +27 -0
  180. notslowapi-0.1.0/docs_src/extra_models/__init__.py +0 -0
  181. notslowapi-0.1.0/docs_src/extra_models/tutorial001_py310.py +41 -0
  182. notslowapi-0.1.0/docs_src/extra_models/tutorial002_py310.py +39 -0
  183. notslowapi-0.1.0/docs_src/extra_models/tutorial003_py310.py +33 -0
  184. notslowapi-0.1.0/docs_src/extra_models/tutorial004_py310.py +20 -0
  185. notslowapi-0.1.0/docs_src/extra_models/tutorial005_py310.py +8 -0
  186. notslowapi-0.1.0/docs_src/first_steps/__init__.py +0 -0
  187. notslowapi-0.1.0/docs_src/first_steps/tutorial001_py310.py +8 -0
  188. notslowapi-0.1.0/docs_src/first_steps/tutorial003_py310.py +8 -0
  189. notslowapi-0.1.0/docs_src/frontend/__init__.py +0 -0
  190. notslowapi-0.1.0/docs_src/frontend/tutorial001_py310.py +5 -0
  191. notslowapi-0.1.0/docs_src/frontend/tutorial002_py310.py +5 -0
  192. notslowapi-0.1.0/docs_src/frontend/tutorial003_py310.py +5 -0
  193. notslowapi-0.1.0/docs_src/frontend/tutorial004_py310.py +7 -0
  194. notslowapi-0.1.0/docs_src/frontend/tutorial005_py310.py +5 -0
  195. notslowapi-0.1.0/docs_src/frontend/tutorial006_py310.py +5 -0
  196. notslowapi-0.1.0/docs_src/generate_clients/__init__.py +0 -0
  197. notslowapi-0.1.0/docs_src/generate_clients/tutorial001_py310.py +26 -0
  198. notslowapi-0.1.0/docs_src/generate_clients/tutorial002_py310.py +36 -0
  199. notslowapi-0.1.0/docs_src/generate_clients/tutorial003_py310.py +42 -0
  200. notslowapi-0.1.0/docs_src/generate_clients/tutorial004.js +36 -0
  201. notslowapi-0.1.0/docs_src/generate_clients/tutorial004_py310.py +15 -0
  202. notslowapi-0.1.0/docs_src/graphql_/__init__.py +0 -0
  203. notslowapi-0.1.0/docs_src/graphql_/tutorial001_py310.py +25 -0
  204. notslowapi-0.1.0/docs_src/handling_errors/__init__.py +0 -0
  205. notslowapi-0.1.0/docs_src/handling_errors/tutorial001_py310.py +12 -0
  206. notslowapi-0.1.0/docs_src/handling_errors/tutorial002_py310.py +16 -0
  207. notslowapi-0.1.0/docs_src/handling_errors/tutorial003_py310.py +25 -0
  208. notslowapi-0.1.0/docs_src/handling_errors/tutorial004_py310.py +26 -0
  209. notslowapi-0.1.0/docs_src/handling_errors/tutorial005_py310.py +25 -0
  210. notslowapi-0.1.0/docs_src/handling_errors/tutorial006_py310.py +28 -0
  211. notslowapi-0.1.0/docs_src/header_param_models/__init__.py +0 -0
  212. notslowapi-0.1.0/docs_src/header_param_models/tutorial001_an_py310.py +19 -0
  213. notslowapi-0.1.0/docs_src/header_param_models/tutorial001_py310.py +17 -0
  214. notslowapi-0.1.0/docs_src/header_param_models/tutorial002_an_py310.py +21 -0
  215. notslowapi-0.1.0/docs_src/header_param_models/tutorial002_py310.py +19 -0
  216. notslowapi-0.1.0/docs_src/header_param_models/tutorial003_an_py310.py +21 -0
  217. notslowapi-0.1.0/docs_src/header_param_models/tutorial003_py310.py +17 -0
  218. notslowapi-0.1.0/docs_src/header_params/__init__.py +0 -0
  219. notslowapi-0.1.0/docs_src/header_params/tutorial001_an_py310.py +10 -0
  220. notslowapi-0.1.0/docs_src/header_params/tutorial001_py310.py +8 -0
  221. notslowapi-0.1.0/docs_src/header_params/tutorial002_an_py310.py +12 -0
  222. notslowapi-0.1.0/docs_src/header_params/tutorial002_py310.py +10 -0
  223. notslowapi-0.1.0/docs_src/header_params/tutorial003_an_py310.py +10 -0
  224. notslowapi-0.1.0/docs_src/header_params/tutorial003_py310.py +8 -0
  225. notslowapi-0.1.0/docs_src/json_base64_bytes/__init__.py +0 -0
  226. notslowapi-0.1.0/docs_src/json_base64_bytes/tutorial001_py310.py +46 -0
  227. notslowapi-0.1.0/docs_src/metadata/__init__.py +0 -0
  228. notslowapi-0.1.0/docs_src/metadata/tutorial001_1_py310.py +38 -0
  229. notslowapi-0.1.0/docs_src/metadata/tutorial001_py310.py +38 -0
  230. notslowapi-0.1.0/docs_src/metadata/tutorial002_py310.py +8 -0
  231. notslowapi-0.1.0/docs_src/metadata/tutorial003_py310.py +8 -0
  232. notslowapi-0.1.0/docs_src/metadata/tutorial004_py310.py +28 -0
  233. notslowapi-0.1.0/docs_src/middleware/__init__.py +0 -0
  234. notslowapi-0.1.0/docs_src/middleware/tutorial001_py310.py +14 -0
  235. notslowapi-0.1.0/docs_src/openapi_callbacks/__init__.py +0 -0
  236. notslowapi-0.1.0/docs_src/openapi_callbacks/tutorial001_py310.py +51 -0
  237. notslowapi-0.1.0/docs_src/openapi_webhooks/__init__.py +0 -0
  238. notslowapi-0.1.0/docs_src/openapi_webhooks/tutorial001_py310.py +25 -0
  239. notslowapi-0.1.0/docs_src/path_operation_advanced_configuration/__init__.py +0 -0
  240. notslowapi-0.1.0/docs_src/path_operation_advanced_configuration/tutorial001_py310.py +8 -0
  241. notslowapi-0.1.0/docs_src/path_operation_advanced_configuration/tutorial002_py310.py +14 -0
  242. notslowapi-0.1.0/docs_src/path_operation_advanced_configuration/tutorial003_py310.py +8 -0
  243. notslowapi-0.1.0/docs_src/path_operation_advanced_configuration/tutorial004_py310.py +28 -0
  244. notslowapi-0.1.0/docs_src/path_operation_advanced_configuration/tutorial005_py310.py +8 -0
  245. notslowapi-0.1.0/docs_src/path_operation_advanced_configuration/tutorial006_py310.py +41 -0
  246. notslowapi-0.1.0/docs_src/path_operation_advanced_configuration/tutorial007_py310.py +32 -0
  247. notslowapi-0.1.0/docs_src/path_operation_configuration/__init__.py +0 -0
  248. notslowapi-0.1.0/docs_src/path_operation_configuration/tutorial001_py310.py +17 -0
  249. notslowapi-0.1.0/docs_src/path_operation_configuration/tutorial002_py310.py +27 -0
  250. notslowapi-0.1.0/docs_src/path_operation_configuration/tutorial002b_py310.py +20 -0
  251. notslowapi-0.1.0/docs_src/path_operation_configuration/tutorial003_py310.py +21 -0
  252. notslowapi-0.1.0/docs_src/path_operation_configuration/tutorial004_py310.py +26 -0
  253. notslowapi-0.1.0/docs_src/path_operation_configuration/tutorial005_py310.py +30 -0
  254. notslowapi-0.1.0/docs_src/path_operation_configuration/tutorial006_py310.py +18 -0
  255. notslowapi-0.1.0/docs_src/path_params/__init__.py +0 -0
  256. notslowapi-0.1.0/docs_src/path_params/tutorial001_py310.py +8 -0
  257. notslowapi-0.1.0/docs_src/path_params/tutorial002_py310.py +8 -0
  258. notslowapi-0.1.0/docs_src/path_params/tutorial003_py310.py +13 -0
  259. notslowapi-0.1.0/docs_src/path_params/tutorial003b_py310.py +13 -0
  260. notslowapi-0.1.0/docs_src/path_params/tutorial004_py310.py +8 -0
  261. notslowapi-0.1.0/docs_src/path_params/tutorial005_py310.py +23 -0
  262. notslowapi-0.1.0/docs_src/path_params_numeric_validations/__init__.py +0 -0
  263. notslowapi-0.1.0/docs_src/path_params_numeric_validations/tutorial001_an_py310.py +16 -0
  264. notslowapi-0.1.0/docs_src/path_params_numeric_validations/tutorial001_py310.py +14 -0
  265. notslowapi-0.1.0/docs_src/path_params_numeric_validations/tutorial002_an_py310.py +15 -0
  266. notslowapi-0.1.0/docs_src/path_params_numeric_validations/tutorial002_py310.py +11 -0
  267. notslowapi-0.1.0/docs_src/path_params_numeric_validations/tutorial003_an_py310.py +15 -0
  268. notslowapi-0.1.0/docs_src/path_params_numeric_validations/tutorial003_py310.py +11 -0
  269. notslowapi-0.1.0/docs_src/path_params_numeric_validations/tutorial004_an_py310.py +15 -0
  270. notslowapi-0.1.0/docs_src/path_params_numeric_validations/tutorial004_py310.py +13 -0
  271. notslowapi-0.1.0/docs_src/path_params_numeric_validations/tutorial005_an_py310.py +16 -0
  272. notslowapi-0.1.0/docs_src/path_params_numeric_validations/tutorial005_py310.py +15 -0
  273. notslowapi-0.1.0/docs_src/path_params_numeric_validations/tutorial006_an_py310.py +20 -0
  274. notslowapi-0.1.0/docs_src/path_params_numeric_validations/tutorial006_py310.py +18 -0
  275. notslowapi-0.1.0/docs_src/pydantic_v1_in_v2/__init__.py +0 -0
  276. notslowapi-0.1.0/docs_src/pydantic_v1_in_v2/tutorial001_an_py310.py +7 -0
  277. notslowapi-0.1.0/docs_src/pydantic_v1_in_v2/tutorial002_an_py310.py +16 -0
  278. notslowapi-0.1.0/docs_src/pydantic_v1_in_v2/tutorial003_an_py310.py +23 -0
  279. notslowapi-0.1.0/docs_src/pydantic_v1_in_v2/tutorial004_an_py310.py +19 -0
  280. notslowapi-0.1.0/docs_src/python_types/__init__.py +0 -0
  281. notslowapi-0.1.0/docs_src/python_types/tutorial001_py310.py +6 -0
  282. notslowapi-0.1.0/docs_src/python_types/tutorial002_py310.py +6 -0
  283. notslowapi-0.1.0/docs_src/python_types/tutorial003_py310.py +3 -0
  284. notslowapi-0.1.0/docs_src/python_types/tutorial004_py310.py +3 -0
  285. notslowapi-0.1.0/docs_src/python_types/tutorial005_py310.py +2 -0
  286. notslowapi-0.1.0/docs_src/python_types/tutorial006_py310.py +3 -0
  287. notslowapi-0.1.0/docs_src/python_types/tutorial007_py310.py +2 -0
  288. notslowapi-0.1.0/docs_src/python_types/tutorial008_py310.py +4 -0
  289. notslowapi-0.1.0/docs_src/python_types/tutorial008b_py310.py +2 -0
  290. notslowapi-0.1.0/docs_src/python_types/tutorial009_py310.py +5 -0
  291. notslowapi-0.1.0/docs_src/python_types/tutorial010_py310.py +7 -0
  292. notslowapi-0.1.0/docs_src/python_types/tutorial011_py310.py +22 -0
  293. notslowapi-0.1.0/docs_src/python_types/tutorial013_py310.py +5 -0
  294. notslowapi-0.1.0/docs_src/query_param_models/__init__.py +0 -0
  295. notslowapi-0.1.0/docs_src/query_param_models/tutorial001_an_py310.py +18 -0
  296. notslowapi-0.1.0/docs_src/query_param_models/tutorial001_py310.py +18 -0
  297. notslowapi-0.1.0/docs_src/query_param_models/tutorial002_an_py310.py +20 -0
  298. notslowapi-0.1.0/docs_src/query_param_models/tutorial002_py310.py +20 -0
  299. notslowapi-0.1.0/docs_src/query_params/__init__.py +0 -0
  300. notslowapi-0.1.0/docs_src/query_params/tutorial001_py310.py +10 -0
  301. notslowapi-0.1.0/docs_src/query_params/tutorial002_py310.py +10 -0
  302. notslowapi-0.1.0/docs_src/query_params/tutorial003_py310.py +15 -0
  303. notslowapi-0.1.0/docs_src/query_params/tutorial004_py310.py +17 -0
  304. notslowapi-0.1.0/docs_src/query_params/tutorial005_py310.py +9 -0
  305. notslowapi-0.1.0/docs_src/query_params/tutorial006_py310.py +11 -0
  306. notslowapi-0.1.0/docs_src/query_params_str_validations/__init__.py +0 -0
  307. notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial001_py310.py +11 -0
  308. notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial002_an_py310.py +13 -0
  309. notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial002_py310.py +11 -0
  310. notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial003_an_py310.py +15 -0
  311. notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial003_py310.py +11 -0
  312. notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial004_an_py310.py +17 -0
  313. notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial004_py310.py +15 -0
  314. notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial005_an_py310.py +13 -0
  315. notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial005_py310.py +11 -0
  316. notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial006_an_py310.py +13 -0
  317. notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial006_py310.py +11 -0
  318. notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial006c_an_py310.py +13 -0
  319. notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial006c_py310.py +11 -0
  320. notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial007_an_py310.py +15 -0
  321. notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial007_py310.py +13 -0
  322. notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial008_an_py310.py +22 -0
  323. notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial008_py310.py +18 -0
  324. notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial009_an_py310.py +13 -0
  325. notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial009_py310.py +11 -0
  326. notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial010_an_py310.py +26 -0
  327. notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial010_py310.py +22 -0
  328. notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial011_an_py310.py +11 -0
  329. notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial011_py310.py +9 -0
  330. notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial012_an_py310.py +11 -0
  331. notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial012_py310.py +9 -0
  332. notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial013_an_py310.py +11 -0
  333. notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial013_py310.py +9 -0
  334. notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial014_an_py310.py +15 -0
  335. notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial014_py310.py +13 -0
  336. notslowapi-0.1.0/docs_src/query_params_str_validations/tutorial015_an_py310.py +30 -0
  337. notslowapi-0.1.0/docs_src/request_files/__init__.py +0 -0
  338. notslowapi-0.1.0/docs_src/request_files/tutorial001_02_an_py310.py +21 -0
  339. notslowapi-0.1.0/docs_src/request_files/tutorial001_02_py310.py +19 -0
  340. notslowapi-0.1.0/docs_src/request_files/tutorial001_03_an_py310.py +17 -0
  341. notslowapi-0.1.0/docs_src/request_files/tutorial001_03_py310.py +15 -0
  342. notslowapi-0.1.0/docs_src/request_files/tutorial001_an_py310.py +15 -0
  343. notslowapi-0.1.0/docs_src/request_files/tutorial001_py310.py +13 -0
  344. notslowapi-0.1.0/docs_src/request_files/tutorial002_an_py310.py +33 -0
  345. notslowapi-0.1.0/docs_src/request_files/tutorial002_py310.py +31 -0
  346. notslowapi-0.1.0/docs_src/request_files/tutorial003_an_py310.py +39 -0
  347. notslowapi-0.1.0/docs_src/request_files/tutorial003_py310.py +35 -0
  348. notslowapi-0.1.0/docs_src/request_form_models/__init__.py +0 -0
  349. notslowapi-0.1.0/docs_src/request_form_models/tutorial001_an_py310.py +16 -0
  350. notslowapi-0.1.0/docs_src/request_form_models/tutorial001_py310.py +14 -0
  351. notslowapi-0.1.0/docs_src/request_form_models/tutorial002_an_py310.py +17 -0
  352. notslowapi-0.1.0/docs_src/request_form_models/tutorial002_py310.py +15 -0
  353. notslowapi-0.1.0/docs_src/request_forms/__init__.py +0 -0
  354. notslowapi-0.1.0/docs_src/request_forms/tutorial001_an_py310.py +10 -0
  355. notslowapi-0.1.0/docs_src/request_forms/tutorial001_py310.py +8 -0
  356. notslowapi-0.1.0/docs_src/request_forms_and_files/__init__.py +0 -0
  357. notslowapi-0.1.0/docs_src/request_forms_and_files/tutorial001_an_py310.py +18 -0
  358. notslowapi-0.1.0/docs_src/request_forms_and_files/tutorial001_py310.py +14 -0
  359. notslowapi-0.1.0/docs_src/response_change_status_code/__init__.py +0 -0
  360. notslowapi-0.1.0/docs_src/response_change_status_code/tutorial001_py310.py +13 -0
  361. notslowapi-0.1.0/docs_src/response_cookies/__init__.py +0 -0
  362. notslowapi-0.1.0/docs_src/response_cookies/tutorial001_py310.py +12 -0
  363. notslowapi-0.1.0/docs_src/response_cookies/tutorial002_py310.py +9 -0
  364. notslowapi-0.1.0/docs_src/response_directly/__init__.py +0 -0
  365. notslowapi-0.1.0/docs_src/response_directly/tutorial001_py310.py +21 -0
  366. notslowapi-0.1.0/docs_src/response_directly/tutorial002_py310.py +18 -0
  367. notslowapi-0.1.0/docs_src/response_headers/__init__.py +0 -0
  368. notslowapi-0.1.0/docs_src/response_headers/tutorial001_py310.py +11 -0
  369. notslowapi-0.1.0/docs_src/response_headers/tutorial002_py310.py +9 -0
  370. notslowapi-0.1.0/docs_src/response_model/__init__.py +0 -0
  371. notslowapi-0.1.0/docs_src/response_model/tutorial001_01_py310.py +25 -0
  372. notslowapi-0.1.0/docs_src/response_model/tutorial001_py310.py +27 -0
  373. notslowapi-0.1.0/docs_src/response_model/tutorial002_py310.py +17 -0
  374. notslowapi-0.1.0/docs_src/response_model/tutorial003_01_py310.py +19 -0
  375. notslowapi-0.1.0/docs_src/response_model/tutorial003_02_py310.py +11 -0
  376. notslowapi-0.1.0/docs_src/response_model/tutorial003_03_py310.py +9 -0
  377. notslowapi-0.1.0/docs_src/response_model/tutorial003_04_py310.py +11 -0
  378. notslowapi-0.1.0/docs_src/response_model/tutorial003_05_py310.py +11 -0
  379. notslowapi-0.1.0/docs_src/response_model/tutorial003_py310.py +24 -0
  380. notslowapi-0.1.0/docs_src/response_model/tutorial004_py310.py +24 -0
  381. notslowapi-0.1.0/docs_src/response_model/tutorial005_py310.py +37 -0
  382. notslowapi-0.1.0/docs_src/response_model/tutorial006_py310.py +37 -0
  383. notslowapi-0.1.0/docs_src/response_status_code/__init__.py +0 -0
  384. notslowapi-0.1.0/docs_src/response_status_code/tutorial001_py310.py +8 -0
  385. notslowapi-0.1.0/docs_src/response_status_code/tutorial002_py310.py +8 -0
  386. notslowapi-0.1.0/docs_src/schema_extra_example/__init__.py +0 -0
  387. notslowapi-0.1.0/docs_src/schema_extra_example/tutorial001_py310.py +30 -0
  388. notslowapi-0.1.0/docs_src/schema_extra_example/tutorial002_py310.py +17 -0
  389. notslowapi-0.1.0/docs_src/schema_extra_example/tutorial003_an_py310.py +34 -0
  390. notslowapi-0.1.0/docs_src/schema_extra_example/tutorial003_py310.py +29 -0
  391. notslowapi-0.1.0/docs_src/schema_extra_example/tutorial004_an_py310.py +43 -0
  392. notslowapi-0.1.0/docs_src/schema_extra_example/tutorial004_py310.py +38 -0
  393. notslowapi-0.1.0/docs_src/schema_extra_example/tutorial005_an_py310.py +54 -0
  394. notslowapi-0.1.0/docs_src/schema_extra_example/tutorial005_py310.py +49 -0
  395. notslowapi-0.1.0/docs_src/security/__init__.py +0 -0
  396. notslowapi-0.1.0/docs_src/security/tutorial001_an_py310.py +13 -0
  397. notslowapi-0.1.0/docs_src/security/tutorial001_py310.py +11 -0
  398. notslowapi-0.1.0/docs_src/security/tutorial002_an_py310.py +32 -0
  399. notslowapi-0.1.0/docs_src/security/tutorial002_py310.py +30 -0
  400. notslowapi-0.1.0/docs_src/security/tutorial003_an_py310.py +94 -0
  401. notslowapi-0.1.0/docs_src/security/tutorial003_py310.py +88 -0
  402. notslowapi-0.1.0/docs_src/security/tutorial004_an_py310.py +150 -0
  403. notslowapi-0.1.0/docs_src/security/tutorial004_py310.py +143 -0
  404. notslowapi-0.1.0/docs_src/security/tutorial005_an_py310.py +182 -0
  405. notslowapi-0.1.0/docs_src/security/tutorial005_py310.py +179 -0
  406. notslowapi-0.1.0/docs_src/security/tutorial006_an_py310.py +13 -0
  407. notslowapi-0.1.0/docs_src/security/tutorial006_py310.py +11 -0
  408. notslowapi-0.1.0/docs_src/security/tutorial007_an_py310.py +36 -0
  409. notslowapi-0.1.0/docs_src/security/tutorial007_py310.py +33 -0
  410. notslowapi-0.1.0/docs_src/separate_openapi_schemas/__init__.py +0 -0
  411. notslowapi-0.1.0/docs_src/separate_openapi_schemas/tutorial001_py310.py +26 -0
  412. notslowapi-0.1.0/docs_src/separate_openapi_schemas/tutorial002_py310.py +26 -0
  413. notslowapi-0.1.0/docs_src/server_sent_events/__init__.py +0 -0
  414. notslowapi-0.1.0/docs_src/server_sent_events/tutorial001_py310.py +43 -0
  415. notslowapi-0.1.0/docs_src/server_sent_events/tutorial002_py310.py +26 -0
  416. notslowapi-0.1.0/docs_src/server_sent_events/tutorial003_py310.py +17 -0
  417. notslowapi-0.1.0/docs_src/server_sent_events/tutorial004_py310.py +31 -0
  418. notslowapi-0.1.0/docs_src/server_sent_events/tutorial005_py310.py +19 -0
  419. notslowapi-0.1.0/docs_src/settings/__init__.py +0 -0
  420. notslowapi-0.1.0/docs_src/settings/app01_py310/__init__.py +0 -0
  421. notslowapi-0.1.0/docs_src/settings/app01_py310/config.py +10 -0
  422. notslowapi-0.1.0/docs_src/settings/app01_py310/main.py +14 -0
  423. notslowapi-0.1.0/docs_src/settings/app02_an_py310/__init__.py +0 -0
  424. notslowapi-0.1.0/docs_src/settings/app02_an_py310/config.py +7 -0
  425. notslowapi-0.1.0/docs_src/settings/app02_an_py310/main.py +22 -0
  426. notslowapi-0.1.0/docs_src/settings/app02_an_py310/test_main.py +23 -0
  427. notslowapi-0.1.0/docs_src/settings/app02_py310/__init__.py +0 -0
  428. notslowapi-0.1.0/docs_src/settings/app02_py310/config.py +7 -0
  429. notslowapi-0.1.0/docs_src/settings/app02_py310/main.py +21 -0
  430. notslowapi-0.1.0/docs_src/settings/app02_py310/test_main.py +23 -0
  431. notslowapi-0.1.0/docs_src/settings/app03_an_py310/__init__.py +0 -0
  432. notslowapi-0.1.0/docs_src/settings/app03_an_py310/config.py +9 -0
  433. notslowapi-0.1.0/docs_src/settings/app03_an_py310/main.py +22 -0
  434. notslowapi-0.1.0/docs_src/settings/app03_py310/__init__.py +0 -0
  435. notslowapi-0.1.0/docs_src/settings/app03_py310/config.py +9 -0
  436. notslowapi-0.1.0/docs_src/settings/app03_py310/main.py +21 -0
  437. notslowapi-0.1.0/docs_src/settings/tutorial001_py310.py +21 -0
  438. notslowapi-0.1.0/docs_src/sql_databases/__init__.py +0 -0
  439. notslowapi-0.1.0/docs_src/sql_databases/tutorial001_an_py310.py +73 -0
  440. notslowapi-0.1.0/docs_src/sql_databases/tutorial001_py310.py +69 -0
  441. notslowapi-0.1.0/docs_src/sql_databases/tutorial002_an_py310.py +103 -0
  442. notslowapi-0.1.0/docs_src/sql_databases/tutorial002_py310.py +102 -0
  443. notslowapi-0.1.0/docs_src/static_files/__init__.py +0 -0
  444. notslowapi-0.1.0/docs_src/static_files/tutorial001_py310.py +6 -0
  445. notslowapi-0.1.0/docs_src/stream_data/__init__.py +0 -0
  446. notslowapi-0.1.0/docs_src/stream_data/tutorial001_py310.py +65 -0
  447. notslowapi-0.1.0/docs_src/stream_data/tutorial002_py310.py +54 -0
  448. notslowapi-0.1.0/docs_src/stream_json_lines/__init__.py +0 -0
  449. notslowapi-0.1.0/docs_src/stream_json_lines/tutorial001_py310.py +42 -0
  450. notslowapi-0.1.0/docs_src/strict_content_type/__init__.py +0 -0
  451. notslowapi-0.1.0/docs_src/strict_content_type/tutorial001_py310.py +14 -0
  452. notslowapi-0.1.0/docs_src/sub_applications/__init__.py +0 -0
  453. notslowapi-0.1.0/docs_src/sub_applications/tutorial001_py310.py +19 -0
  454. notslowapi-0.1.0/docs_src/templates/__init__.py +0 -0
  455. notslowapi-0.1.0/docs_src/templates/static/__init__.py +0 -0
  456. notslowapi-0.1.0/docs_src/templates/static/styles.css +3 -0
  457. notslowapi-0.1.0/docs_src/templates/templates/__init__.py +0 -0
  458. notslowapi-0.1.0/docs_src/templates/templates/item.html +9 -0
  459. notslowapi-0.1.0/docs_src/templates/tutorial001_py310.py +18 -0
  460. notslowapi-0.1.0/docs_src/using_request_directly/__init__.py +0 -0
  461. notslowapi-0.1.0/docs_src/using_request_directly/tutorial001_py310.py +9 -0
  462. notslowapi-0.1.0/docs_src/websockets_/__init__.py +0 -0
  463. notslowapi-0.1.0/docs_src/websockets_/tutorial001_py310.py +51 -0
  464. notslowapi-0.1.0/docs_src/websockets_/tutorial002_an_py310.py +92 -0
  465. notslowapi-0.1.0/docs_src/websockets_/tutorial002_py310.py +89 -0
  466. notslowapi-0.1.0/docs_src/websockets_/tutorial003_py310.py +81 -0
  467. notslowapi-0.1.0/docs_src/wsgi/__init__.py +0 -0
  468. notslowapi-0.1.0/docs_src/wsgi/tutorial001_py310.py +23 -0
  469. notslowapi-0.1.0/notslowapi/.agents/skills/fastapi/SKILL.md +321 -0
  470. notslowapi-0.1.0/notslowapi/.agents/skills/fastapi/references/dependencies.md +142 -0
  471. notslowapi-0.1.0/notslowapi/.agents/skills/fastapi/references/other-tools.md +76 -0
  472. notslowapi-0.1.0/notslowapi/.agents/skills/fastapi/references/path-operations.md +93 -0
  473. notslowapi-0.1.0/notslowapi/.agents/skills/fastapi/references/pydantic.md +93 -0
  474. notslowapi-0.1.0/notslowapi/.agents/skills/fastapi/references/responses.md +79 -0
  475. notslowapi-0.1.0/notslowapi/.agents/skills/fastapi/references/streaming.md +105 -0
  476. notslowapi-0.1.0/notslowapi/__init__.py +27 -0
  477. notslowapi-0.1.0/notslowapi/__main__.py +3 -0
  478. notslowapi-0.1.0/notslowapi/_compat/__init__.py +40 -0
  479. notslowapi-0.1.0/notslowapi/_compat/shared.py +222 -0
  480. notslowapi-0.1.0/notslowapi/_compat/v2.py +504 -0
  481. notslowapi-0.1.0/notslowapi/applications.py +4778 -0
  482. notslowapi-0.1.0/notslowapi/background.py +61 -0
  483. notslowapi-0.1.0/notslowapi/cli.py +13 -0
  484. notslowapi-0.1.0/notslowapi/concurrency.py +45 -0
  485. notslowapi-0.1.0/notslowapi/datastructures.py +186 -0
  486. notslowapi-0.1.0/notslowapi/dependencies/__init__.py +0 -0
  487. notslowapi-0.1.0/notslowapi/dependencies/models.py +234 -0
  488. notslowapi-0.1.0/notslowapi/dependencies/utils.py +1057 -0
  489. notslowapi-0.1.0/notslowapi/encoders.py +394 -0
  490. notslowapi-0.1.0/notslowapi/exception_handlers.py +37 -0
  491. notslowapi-0.1.0/notslowapi/exceptions.py +258 -0
  492. notslowapi-0.1.0/notslowapi/logger.py +3 -0
  493. notslowapi-0.1.0/notslowapi/middleware/__init__.py +1 -0
  494. notslowapi-0.1.0/notslowapi/middleware/asyncexitstack.py +18 -0
  495. notslowapi-0.1.0/notslowapi/middleware/cors.py +1 -0
  496. notslowapi-0.1.0/notslowapi/middleware/exceptions.py +5 -0
  497. notslowapi-0.1.0/notslowapi/middleware/gzip.py +1 -0
  498. notslowapi-0.1.0/notslowapi/middleware/httpsredirect.py +3 -0
  499. notslowapi-0.1.0/notslowapi/middleware/trustedhost.py +3 -0
  500. notslowapi-0.1.0/notslowapi/middleware/wsgi.py +3 -0
  501. notslowapi-0.1.0/notslowapi/openapi/__init__.py +0 -0
  502. notslowapi-0.1.0/notslowapi/openapi/constants.py +3 -0
  503. notslowapi-0.1.0/notslowapi/openapi/docs.py +389 -0
  504. notslowapi-0.1.0/notslowapi/openapi/models.py +435 -0
  505. notslowapi-0.1.0/notslowapi/openapi/utils.py +679 -0
  506. notslowapi-0.1.0/notslowapi/param_functions.py +2460 -0
  507. notslowapi-0.1.0/notslowapi/params.py +754 -0
  508. notslowapi-0.1.0/notslowapi/py.typed +0 -0
  509. notslowapi-0.1.0/notslowapi/requests.py +2 -0
  510. notslowapi-0.1.0/notslowapi/responses.py +102 -0
  511. notslowapi-0.1.0/notslowapi/routing.py +6879 -0
  512. notslowapi-0.1.0/notslowapi/security/__init__.py +15 -0
  513. notslowapi-0.1.0/notslowapi/security/api_key.py +320 -0
  514. notslowapi-0.1.0/notslowapi/security/base.py +6 -0
  515. notslowapi-0.1.0/notslowapi/security/http.py +417 -0
  516. notslowapi-0.1.0/notslowapi/security/oauth2.py +693 -0
  517. notslowapi-0.1.0/notslowapi/security/open_id_connect_url.py +94 -0
  518. notslowapi-0.1.0/notslowapi/security/utils.py +7 -0
  519. notslowapi-0.1.0/notslowapi/sse.py +241 -0
  520. notslowapi-0.1.0/notslowapi/starlette/LICENSE.md +27 -0
  521. notslowapi-0.1.0/notslowapi/starlette/__init__.py +1 -0
  522. notslowapi-0.1.0/notslowapi/starlette/_exception_handler.py +105 -0
  523. notslowapi-0.1.0/notslowapi/starlette/_utils.py +160 -0
  524. notslowapi-0.1.0/notslowapi/starlette/applications.py +133 -0
  525. notslowapi-0.1.0/notslowapi/starlette/authentication.py +149 -0
  526. notslowapi-0.1.0/notslowapi/starlette/background.py +36 -0
  527. notslowapi-0.1.0/notslowapi/starlette/concurrency.py +59 -0
  528. notslowapi-0.1.0/notslowapi/starlette/config.py +140 -0
  529. notslowapi-0.1.0/notslowapi/starlette/convertors.py +89 -0
  530. notslowapi-0.1.0/notslowapi/starlette/datastructures.py +726 -0
  531. notslowapi-0.1.0/notslowapi/starlette/endpoints.py +127 -0
  532. notslowapi-0.1.0/notslowapi/starlette/exceptions.py +43 -0
  533. notslowapi-0.1.0/notslowapi/starlette/formparsers.py +301 -0
  534. notslowapi-0.1.0/notslowapi/starlette/middleware/__init__.py +37 -0
  535. notslowapi-0.1.0/notslowapi/starlette/middleware/authentication.py +52 -0
  536. notslowapi-0.1.0/notslowapi/starlette/middleware/base.py +244 -0
  537. notslowapi-0.1.0/notslowapi/starlette/middleware/body_limit.py +132 -0
  538. notslowapi-0.1.0/notslowapi/starlette/middleware/cors.py +179 -0
  539. notslowapi-0.1.0/notslowapi/starlette/middleware/errors.py +255 -0
  540. notslowapi-0.1.0/notslowapi/starlette/middleware/exception_handling.py +76 -0
  541. notslowapi-0.1.0/notslowapi/starlette/middleware/exceptions.py +67 -0
  542. notslowapi-0.1.0/notslowapi/starlette/middleware/gzip.py +222 -0
  543. notslowapi-0.1.0/notslowapi/starlette/middleware/httpsredirect.py +22 -0
  544. notslowapi-0.1.0/notslowapi/starlette/middleware/opentelemetry.py +116 -0
  545. notslowapi-0.1.0/notslowapi/starlette/middleware/sessions.py +134 -0
  546. notslowapi-0.1.0/notslowapi/starlette/middleware/trustedhost.py +66 -0
  547. notslowapi-0.1.0/notslowapi/starlette/middleware/wsgi.py +156 -0
  548. notslowapi-0.1.0/notslowapi/starlette/py.typed +0 -0
  549. notslowapi-0.1.0/notslowapi/starlette/requests.py +360 -0
  550. notslowapi-0.1.0/notslowapi/starlette/responses.py +593 -0
  551. notslowapi-0.1.0/notslowapi/starlette/routing.py +886 -0
  552. notslowapi-0.1.0/notslowapi/starlette/schemas.py +152 -0
  553. notslowapi-0.1.0/notslowapi/starlette/staticfiles.py +223 -0
  554. notslowapi-0.1.0/notslowapi/starlette/status.py +211 -0
  555. notslowapi-0.1.0/notslowapi/starlette/templating.py +156 -0
  556. notslowapi-0.1.0/notslowapi/starlette/testclient.py +558 -0
  557. notslowapi-0.1.0/notslowapi/starlette/types.py +26 -0
  558. notslowapi-0.1.0/notslowapi/starlette/websockets.py +202 -0
  559. notslowapi-0.1.0/notslowapi/staticfiles.py +1 -0
  560. notslowapi-0.1.0/notslowapi/templating.py +1 -0
  561. notslowapi-0.1.0/notslowapi/testclient.py +1 -0
  562. notslowapi-0.1.0/notslowapi/types.py +12 -0
  563. notslowapi-0.1.0/notslowapi/utils.py +136 -0
  564. notslowapi-0.1.0/notslowapi/websockets.py +3 -0
  565. notslowapi-0.1.0/pyproject.toml +429 -0
  566. notslowapi-0.1.0/scripts/add_latest_release_date.py +40 -0
  567. notslowapi-0.1.0/scripts/deploy_docs_status.py +149 -0
  568. notslowapi-0.1.0/scripts/doc_parsing_utils.py +733 -0
  569. notslowapi-0.1.0/scripts/docs.py +919 -0
  570. notslowapi-0.1.0/scripts/format.sh +5 -0
  571. notslowapi-0.1.0/scripts/general-llm-prompt.md +518 -0
  572. notslowapi-0.1.0/scripts/label_approved.py +60 -0
  573. notslowapi-0.1.0/scripts/lint.sh +9 -0
  574. notslowapi-0.1.0/scripts/notify_translations.py +433 -0
  575. notslowapi-0.1.0/scripts/playwright/cookie_param_models/image01.py +39 -0
  576. notslowapi-0.1.0/scripts/playwright/header_param_models/image01.py +38 -0
  577. notslowapi-0.1.0/scripts/playwright/json_base64_bytes/image01.py +37 -0
  578. notslowapi-0.1.0/scripts/playwright/query_param_models/image01.py +41 -0
  579. notslowapi-0.1.0/scripts/playwright/request_form_models/image01.py +38 -0
  580. notslowapi-0.1.0/scripts/playwright/separate_openapi_schemas/image01.py +32 -0
  581. notslowapi-0.1.0/scripts/playwright/separate_openapi_schemas/image02.py +33 -0
  582. notslowapi-0.1.0/scripts/playwright/separate_openapi_schemas/image03.py +33 -0
  583. notslowapi-0.1.0/scripts/playwright/separate_openapi_schemas/image04.py +32 -0
  584. notslowapi-0.1.0/scripts/playwright/separate_openapi_schemas/image05.py +32 -0
  585. notslowapi-0.1.0/scripts/playwright/sql_databases/image01.py +37 -0
  586. notslowapi-0.1.0/scripts/playwright/sql_databases/image02.py +37 -0
  587. notslowapi-0.1.0/scripts/prepare_release.py +216 -0
  588. notslowapi-0.1.0/scripts/ruff-starlette.toml +14 -0
  589. notslowapi-0.1.0/scripts/sponsors.py +222 -0
  590. notslowapi-0.1.0/scripts/test-cov-html.sh +6 -0
  591. notslowapi-0.1.0/scripts/test-cov.sh +6 -0
  592. notslowapi-0.1.0/scripts/test.sh +7 -0
  593. notslowapi-0.1.0/scripts/tests/test_translation_fixer/conftest.py +62 -0
  594. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_blocks/data/en_doc.md +44 -0
  595. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_blocks/data/translated_doc_lines_number_gt.md +45 -0
  596. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_blocks/data/translated_doc_lines_number_lt.md +45 -0
  597. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_blocks/data/translated_doc_mermaid_not_translated.md +44 -0
  598. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_blocks/data/translated_doc_mermaid_translated.md +44 -0
  599. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_blocks/data/translated_doc_number_gt.md +50 -0
  600. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_blocks/data/translated_doc_number_lt.md +41 -0
  601. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_blocks/data/translated_doc_wrong_lang_code.md +46 -0
  602. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_blocks/data/translated_doc_wrong_lang_code_2.md +46 -0
  603. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_blocks/test_code_blocks_lines_number_mismatch.py +58 -0
  604. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_blocks/test_code_blocks_mermaid.py +59 -0
  605. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_blocks/test_code_blocks_number_mismatch.py +60 -0
  606. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_blocks/test_code_blocks_wrong_lang_code.py +58 -0
  607. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_includes/data/en_doc.md +13 -0
  608. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_includes/data/translated_doc_number_gt.md +15 -0
  609. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_includes/data/translated_doc_number_lt.md +13 -0
  610. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_code_includes/test_number_mismatch.py +60 -0
  611. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_complex_doc/data/en_doc.md +244 -0
  612. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_complex_doc/data/translated_doc.md +240 -0
  613. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_complex_doc/data/translated_doc_expected.md +240 -0
  614. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_complex_doc/test_compex_doc.py +30 -0
  615. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_header_permalinks/data/en_doc.md +19 -0
  616. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_header_permalinks/data/translated_doc_level_mismatch_1.md +19 -0
  617. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_header_permalinks/data/translated_doc_level_mismatch_2.md +19 -0
  618. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_header_permalinks/data/translated_doc_number_gt.md +19 -0
  619. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_header_permalinks/data/translated_doc_number_lt.md +19 -0
  620. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_header_permalinks/test_header_level_mismatch.py +60 -0
  621. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_header_permalinks/test_header_number_mismatch.py +60 -0
  622. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_html_links/data/en_doc.md +19 -0
  623. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_html_links/data/translated_doc_number_gt.md +21 -0
  624. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_html_links/data/translated_doc_number_lt.md +19 -0
  625. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_html_links/test_html_links_number_mismatch.py +58 -0
  626. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_markdown_links/data/en_doc.md +19 -0
  627. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_markdown_links/data/translated_doc.md +19 -0
  628. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_markdown_links/data/translated_doc_number_gt.md +21 -0
  629. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_markdown_links/data/translated_doc_number_lt.md +19 -0
  630. notslowapi-0.1.0/scripts/tests/test_translation_fixer/test_markdown_links/test_mkd_links_number_mismatch.py +60 -0
  631. notslowapi-0.1.0/scripts/topic_repos.py +81 -0
  632. notslowapi-0.1.0/scripts/translate.py +486 -0
  633. notslowapi-0.1.0/scripts/translation_fixer.py +133 -0
  634. notslowapi-0.1.0/scripts/translation_git.py +47 -0
  635. notslowapi-0.1.0/tests/__init__.py +0 -0
  636. notslowapi-0.1.0/tests/benchmarks/__init__.py +0 -0
  637. notslowapi-0.1.0/tests/benchmarks/test_general_performance.py +399 -0
  638. notslowapi-0.1.0/tests/benchmarks/test_openapi.py +33 -0
  639. notslowapi-0.1.0/tests/benchmarks/utils.py +51 -0
  640. notslowapi-0.1.0/tests/forward_reference_type.py +9 -0
  641. notslowapi-0.1.0/tests/main.py +208 -0
  642. notslowapi-0.1.0/tests/memory_benchmarks/__init__.py +0 -0
  643. notslowapi-0.1.0/tests/memory_benchmarks/test_dependency_graph.py +86 -0
  644. notslowapi-0.1.0/tests/memory_benchmarks/test_openapi.py +33 -0
  645. notslowapi-0.1.0/tests/memory_benchmarks/test_route_dependency_graph.py +64 -0
  646. notslowapi-0.1.0/tests/starlette/__init__.py +0 -0
  647. notslowapi-0.1.0/tests/starlette/conftest.py +23 -0
  648. notslowapi-0.1.0/tests/starlette/middleware/__init__.py +0 -0
  649. notslowapi-0.1.0/tests/starlette/middleware/test_base.py +1318 -0
  650. notslowapi-0.1.0/tests/starlette/middleware/test_body_limit.py +368 -0
  651. notslowapi-0.1.0/tests/starlette/middleware/test_cors.py +567 -0
  652. notslowapi-0.1.0/tests/starlette/middleware/test_errors.py +105 -0
  653. notslowapi-0.1.0/tests/starlette/middleware/test_gzip.py +426 -0
  654. notslowapi-0.1.0/tests/starlette/middleware/test_https_redirect.py +78 -0
  655. notslowapi-0.1.0/tests/starlette/middleware/test_middleware.py +22 -0
  656. notslowapi-0.1.0/tests/starlette/middleware/test_opentelemetry.py +499 -0
  657. notslowapi-0.1.0/tests/starlette/middleware/test_session.py +335 -0
  658. notslowapi-0.1.0/tests/starlette/middleware/test_trusted_host.py +98 -0
  659. notslowapi-0.1.0/tests/starlette/middleware/test_wsgi.py +164 -0
  660. notslowapi-0.1.0/tests/starlette/statics/example.txt +1 -0
  661. notslowapi-0.1.0/tests/starlette/test__utils.py +135 -0
  662. notslowapi-0.1.0/tests/starlette/test_applications.py +563 -0
  663. notslowapi-0.1.0/tests/starlette/test_authentication.py +361 -0
  664. notslowapi-0.1.0/tests/starlette/test_background.py +89 -0
  665. notslowapi-0.1.0/tests/starlette/test_concurrency.py +55 -0
  666. notslowapi-0.1.0/tests/starlette/test_config.py +148 -0
  667. notslowapi-0.1.0/tests/starlette/test_convertors.py +96 -0
  668. notslowapi-0.1.0/tests/starlette/test_datastructures.py +600 -0
  669. notslowapi-0.1.0/tests/starlette/test_endpoints.py +187 -0
  670. notslowapi-0.1.0/tests/starlette/test_exceptions.py +224 -0
  671. notslowapi-0.1.0/tests/starlette/test_formparsers.py +1065 -0
  672. notslowapi-0.1.0/tests/starlette/test_requests.py +671 -0
  673. notslowapi-0.1.0/tests/starlette/test_responses.py +1044 -0
  674. notslowapi-0.1.0/tests/starlette/test_routing.py +1240 -0
  675. notslowapi-0.1.0/tests/starlette/test_schemas.py +313 -0
  676. notslowapi-0.1.0/tests/starlette/test_staticfiles.py +654 -0
  677. notslowapi-0.1.0/tests/starlette/test_status.py +32 -0
  678. notslowapi-0.1.0/tests/starlette/test_templates.py +176 -0
  679. notslowapi-0.1.0/tests/starlette/test_testclient.py +492 -0
  680. notslowapi-0.1.0/tests/starlette/test_websockets.py +653 -0
  681. notslowapi-0.1.0/tests/starlette/types.py +26 -0
  682. notslowapi-0.1.0/tests/test_additional_properties.py +114 -0
  683. notslowapi-0.1.0/tests/test_additional_properties_bool.py +125 -0
  684. notslowapi-0.1.0/tests/test_additional_response_extra.py +52 -0
  685. notslowapi-0.1.0/tests/test_additional_responses_bad.py +40 -0
  686. notslowapi-0.1.0/tests/test_additional_responses_custom_model_in_callback.py +147 -0
  687. notslowapi-0.1.0/tests/test_additional_responses_custom_validationerror.py +100 -0
  688. notslowapi-0.1.0/tests/test_additional_responses_default_validationerror.py +91 -0
  689. notslowapi-0.1.0/tests/test_additional_responses_response_class.py +117 -0
  690. notslowapi-0.1.0/tests/test_additional_responses_router.py +182 -0
  691. notslowapi-0.1.0/tests/test_additional_responses_union_duplicate_anyof.py +124 -0
  692. notslowapi-0.1.0/tests/test_allow_inf_nan_in_enforcing.py +84 -0
  693. notslowapi-0.1.0/tests/test_ambiguous_params.py +74 -0
  694. notslowapi-0.1.0/tests/test_annotated.py +298 -0
  695. notslowapi-0.1.0/tests/test_application.py +1285 -0
  696. notslowapi-0.1.0/tests/test_arbitrary_types.py +135 -0
  697. notslowapi-0.1.0/tests/test_callable_endpoint.py +24 -0
  698. notslowapi-0.1.0/tests/test_compat.py +140 -0
  699. notslowapi-0.1.0/tests/test_computed_fields.py +108 -0
  700. notslowapi-0.1.0/tests/test_custom_middleware_exception.py +96 -0
  701. notslowapi-0.1.0/tests/test_custom_route_class.py +116 -0
  702. notslowapi-0.1.0/tests/test_custom_schema_fields.py +62 -0
  703. notslowapi-0.1.0/tests/test_custom_swagger_ui_redirect.py +38 -0
  704. notslowapi-0.1.0/tests/test_datastructures.py +66 -0
  705. notslowapi-0.1.0/tests/test_datetime_custom_encoder.py +28 -0
  706. notslowapi-0.1.0/tests/test_default_response_class.py +222 -0
  707. notslowapi-0.1.0/tests/test_default_response_class_router.py +206 -0
  708. notslowapi-0.1.0/tests/test_dependencies_utils.py +8 -0
  709. notslowapi-0.1.0/tests/test_dependency_after_yield_raise.py +68 -0
  710. notslowapi-0.1.0/tests/test_dependency_after_yield_streaming.py +130 -0
  711. notslowapi-0.1.0/tests/test_dependency_after_yield_websockets.py +79 -0
  712. notslowapi-0.1.0/tests/test_dependency_cache.py +91 -0
  713. notslowapi-0.1.0/tests/test_dependency_class.py +154 -0
  714. notslowapi-0.1.0/tests/test_dependency_contextmanager.py +399 -0
  715. notslowapi-0.1.0/tests/test_dependency_contextvars.py +52 -0
  716. notslowapi-0.1.0/tests/test_dependency_duplicates.py +237 -0
  717. notslowapi-0.1.0/tests/test_dependency_models.py +204 -0
  718. notslowapi-0.1.0/tests/test_dependency_overrides.py +389 -0
  719. notslowapi-0.1.0/tests/test_dependency_paramless.py +77 -0
  720. notslowapi-0.1.0/tests/test_dependency_partial.py +251 -0
  721. notslowapi-0.1.0/tests/test_dependency_pep695.py +27 -0
  722. notslowapi-0.1.0/tests/test_dependency_security_overrides.py +63 -0
  723. notslowapi-0.1.0/tests/test_dependency_wrapped.py +449 -0
  724. notslowapi-0.1.0/tests/test_dependency_yield_except_httpexception.py +72 -0
  725. notslowapi-0.1.0/tests/test_dependency_yield_scope.py +245 -0
  726. notslowapi-0.1.0/tests/test_dependency_yield_scope_websockets.py +200 -0
  727. notslowapi-0.1.0/tests/test_depends_hashable.py +25 -0
  728. notslowapi-0.1.0/tests/test_deprecated_openapi_prefix.py +45 -0
  729. notslowapi-0.1.0/tests/test_deprecated_responses.py +79 -0
  730. notslowapi-0.1.0/tests/test_dump_json_fast_path.py +51 -0
  731. notslowapi-0.1.0/tests/test_duplicate_models_openapi.py +84 -0
  732. notslowapi-0.1.0/tests/test_empty_router.py +36 -0
  733. notslowapi-0.1.0/tests/test_enforce_once_required_parameter.py +115 -0
  734. notslowapi-0.1.0/tests/test_exception_handlers.py +88 -0
  735. notslowapi-0.1.0/tests/test_extra_routes.py +370 -0
  736. notslowapi-0.1.0/tests/test_fastapi_cli.py +34 -0
  737. notslowapi-0.1.0/tests/test_file_and_form_order_issue_9116.py +89 -0
  738. notslowapi-0.1.0/tests/test_filter_pydantic_sub_model_pv2.py +182 -0
  739. notslowapi-0.1.0/tests/test_form_default.py +34 -0
  740. notslowapi-0.1.0/tests/test_forms_from_non_typing_sequences.py +46 -0
  741. notslowapi-0.1.0/tests/test_forms_single_model.py +141 -0
  742. notslowapi-0.1.0/tests/test_forms_single_param.py +109 -0
  743. notslowapi-0.1.0/tests/test_frontend.py +1406 -0
  744. notslowapi-0.1.0/tests/test_generate_unique_id_function.py +1699 -0
  745. notslowapi-0.1.0/tests/test_generic_parameterless_depends.py +79 -0
  746. notslowapi-0.1.0/tests/test_get_model_definitions_formfeed_escape.py +160 -0
  747. notslowapi-0.1.0/tests/test_get_request_body.py +114 -0
  748. notslowapi-0.1.0/tests/test_http_connection_injection.py +39 -0
  749. notslowapi-0.1.0/tests/test_include_route.py +22 -0
  750. notslowapi-0.1.0/tests/test_include_router_defaults_overrides.py +7304 -0
  751. notslowapi-0.1.0/tests/test_infer_param_optionality.py +337 -0
  752. notslowapi-0.1.0/tests/test_inherited_custom_class.py +67 -0
  753. notslowapi-0.1.0/tests/test_invalid_path_param.py +75 -0
  754. notslowapi-0.1.0/tests/test_invalid_sequence_param.py +63 -0
  755. notslowapi-0.1.0/tests/test_json_type.py +63 -0
  756. notslowapi-0.1.0/tests/test_jsonable_encoder.py +345 -0
  757. notslowapi-0.1.0/tests/test_list_bytes_file_order_preserved_issue_14811.py +46 -0
  758. notslowapi-0.1.0/tests/test_local_docs.py +67 -0
  759. notslowapi-0.1.0/tests/test_modules_same_name_body/__init__.py +0 -0
  760. notslowapi-0.1.0/tests/test_modules_same_name_body/app/__init__.py +0 -0
  761. notslowapi-0.1.0/tests/test_modules_same_name_body/app/a.py +8 -0
  762. notslowapi-0.1.0/tests/test_modules_same_name_body/app/b.py +8 -0
  763. notslowapi-0.1.0/tests/test_modules_same_name_body/app/main.py +8 -0
  764. notslowapi-0.1.0/tests/test_modules_same_name_body/test_main.py +156 -0
  765. notslowapi-0.1.0/tests/test_multi_body_errors.py +191 -0
  766. notslowapi-0.1.0/tests/test_multi_query_errors.py +122 -0
  767. notslowapi-0.1.0/tests/test_multipart_installation.py +149 -0
  768. notslowapi-0.1.0/tests/test_nested_annotated_in_sequence.py +143 -0
  769. notslowapi-0.1.0/tests/test_no_schema_split.py +176 -0
  770. notslowapi-0.1.0/tests/test_no_swagger_ui_redirect.py +31 -0
  771. notslowapi-0.1.0/tests/test_openapi_cache_root_path.py +75 -0
  772. notslowapi-0.1.0/tests/test_openapi_examples.py +422 -0
  773. notslowapi-0.1.0/tests/test_openapi_model_description_trim_on_formfeed.py +31 -0
  774. notslowapi-0.1.0/tests/test_openapi_query_parameter_extension.py +131 -0
  775. notslowapi-0.1.0/tests/test_openapi_route_extensions.py +45 -0
  776. notslowapi-0.1.0/tests/test_openapi_schema_type.py +24 -0
  777. notslowapi-0.1.0/tests/test_openapi_separate_input_output_schemas.py +676 -0
  778. notslowapi-0.1.0/tests/test_openapi_servers.py +60 -0
  779. notslowapi-0.1.0/tests/test_operations_signatures.py +22 -0
  780. notslowapi-0.1.0/tests/test_optional_file_list.py +28 -0
  781. notslowapi-0.1.0/tests/test_orjson_response_class.py +32 -0
  782. notslowapi-0.1.0/tests/test_param_class.py +25 -0
  783. notslowapi-0.1.0/tests/test_param_in_path_and_dependency.py +99 -0
  784. notslowapi-0.1.0/tests/test_param_include_in_schema.py +246 -0
  785. notslowapi-0.1.0/tests/test_params_repr.py +114 -0
  786. notslowapi-0.1.0/tests/test_path.py +780 -0
  787. notslowapi-0.1.0/tests/test_prepare_release.py +309 -0
  788. notslowapi-0.1.0/tests/test_put_no_body.py +103 -0
  789. notslowapi-0.1.0/tests/test_pydantic_v1_error.py +96 -0
  790. notslowapi-0.1.0/tests/test_pydanticv2_dataclasses_uuid_stringified_annotations.py +51 -0
  791. notslowapi-0.1.0/tests/test_query.py +277 -0
  792. notslowapi-0.1.0/tests/test_query_cookie_header_model_extra_params.py +140 -0
  793. notslowapi-0.1.0/tests/test_read_with_orm_mode.py +43 -0
  794. notslowapi-0.1.0/tests/test_regex_deprecated_body.py +154 -0
  795. notslowapi-0.1.0/tests/test_regex_deprecated_params.py +146 -0
  796. notslowapi-0.1.0/tests/test_repeated_cookie_headers.py +34 -0
  797. notslowapi-0.1.0/tests/test_repeated_dependency_schema.py +109 -0
  798. notslowapi-0.1.0/tests/test_repeated_parameter_alias.py +106 -0
  799. notslowapi-0.1.0/tests/test_request_body_parameters_media_type.py +184 -0
  800. notslowapi-0.1.0/tests/test_request_param_model_by_alias.py +72 -0
  801. notslowapi-0.1.0/tests/test_request_params/__init__.py +0 -0
  802. notslowapi-0.1.0/tests/test_request_params/test_body/__init__.py +0 -0
  803. notslowapi-0.1.0/tests/test_request_params/test_body/test_list.py +433 -0
  804. notslowapi-0.1.0/tests/test_request_params/test_body/test_optional_list.py +454 -0
  805. notslowapi-0.1.0/tests/test_request_params/test_body/test_optional_str.py +429 -0
  806. notslowapi-0.1.0/tests/test_request_params/test_body/test_required_str.py +419 -0
  807. notslowapi-0.1.0/tests/test_request_params/test_body/utils.py +7 -0
  808. notslowapi-0.1.0/tests/test_request_params/test_cookie/__init__.py +0 -0
  809. notslowapi-0.1.0/tests/test_request_params/test_cookie/test_list.py +3 -0
  810. notslowapi-0.1.0/tests/test_request_params/test_cookie/test_optional_list.py +3 -0
  811. notslowapi-0.1.0/tests/test_request_params/test_cookie/test_optional_str.py +336 -0
  812. notslowapi-0.1.0/tests/test_request_params/test_cookie/test_required_str.py +422 -0
  813. notslowapi-0.1.0/tests/test_request_params/test_file/__init__.py +0 -0
  814. notslowapi-0.1.0/tests/test_request_params/test_file/test_list.py +453 -0
  815. notslowapi-0.1.0/tests/test_request_params/test_file/test_optional.py +363 -0
  816. notslowapi-0.1.0/tests/test_request_params/test_file/test_optional_list.py +383 -0
  817. notslowapi-0.1.0/tests/test_request_params/test_file/test_required.py +437 -0
  818. notslowapi-0.1.0/tests/test_request_params/test_file/utils.py +7 -0
  819. notslowapi-0.1.0/tests/test_request_params/test_form/__init__.py +0 -0
  820. notslowapi-0.1.0/tests/test_request_params/test_form/test_list.py +436 -0
  821. notslowapi-0.1.0/tests/test_request_params/test_form/test_optional_list.py +358 -0
  822. notslowapi-0.1.0/tests/test_request_params/test_form/test_optional_str.py +337 -0
  823. notslowapi-0.1.0/tests/test_request_params/test_form/test_required_str.py +415 -0
  824. notslowapi-0.1.0/tests/test_request_params/test_form/utils.py +7 -0
  825. notslowapi-0.1.0/tests/test_request_params/test_header/__init__.py +0 -0
  826. notslowapi-0.1.0/tests/test_request_params/test_header/test_list.py +427 -0
  827. notslowapi-0.1.0/tests/test_request_params/test_header/test_optional_list.py +352 -0
  828. notslowapi-0.1.0/tests/test_request_params/test_header/test_optional_str.py +328 -0
  829. notslowapi-0.1.0/tests/test_request_params/test_header/test_required_str.py +411 -0
  830. notslowapi-0.1.0/tests/test_request_params/test_path/__init__.py +0 -0
  831. notslowapi-0.1.0/tests/test_request_params/test_path/test_list.py +1 -0
  832. notslowapi-0.1.0/tests/test_request_params/test_path/test_optional_list.py +1 -0
  833. notslowapi-0.1.0/tests/test_request_params/test_path/test_optional_str.py +1 -0
  834. notslowapi-0.1.0/tests/test_request_params/test_path/test_required_str.py +88 -0
  835. notslowapi-0.1.0/tests/test_request_params/test_query/__init__.py +0 -0
  836. notslowapi-0.1.0/tests/test_request_params/test_query/test_list.py +428 -0
  837. notslowapi-0.1.0/tests/test_request_params/test_query/test_optional_list.py +348 -0
  838. notslowapi-0.1.0/tests/test_request_params/test_query/test_optional_str.py +328 -0
  839. notslowapi-0.1.0/tests/test_request_params/test_query/test_required_str.py +414 -0
  840. notslowapi-0.1.0/tests/test_required_noneable.py +60 -0
  841. notslowapi-0.1.0/tests/test_response_by_alias.py +330 -0
  842. notslowapi-0.1.0/tests/test_response_change_status_code.py +26 -0
  843. notslowapi-0.1.0/tests/test_response_class_no_mediatype.py +114 -0
  844. notslowapi-0.1.0/tests/test_response_code_no_body.py +115 -0
  845. notslowapi-0.1.0/tests/test_response_dependency.py +173 -0
  846. notslowapi-0.1.0/tests/test_response_model_as_return_annotation.py +1121 -0
  847. notslowapi-0.1.0/tests/test_response_model_data_filter.py +79 -0
  848. notslowapi-0.1.0/tests/test_response_model_data_filter_no_inheritance.py +81 -0
  849. notslowapi-0.1.0/tests/test_response_model_default_factory.py +47 -0
  850. notslowapi-0.1.0/tests/test_response_model_include_exclude.py +175 -0
  851. notslowapi-0.1.0/tests/test_response_model_invalid.py +43 -0
  852. notslowapi-0.1.0/tests/test_response_model_sub_types.py +161 -0
  853. notslowapi-0.1.0/tests/test_response_set_response_code_empty.py +104 -0
  854. notslowapi-0.1.0/tests/test_return_none_stringified_annotations.py +17 -0
  855. notslowapi-0.1.0/tests/test_route_scope.py +50 -0
  856. notslowapi-0.1.0/tests/test_router_circular_import.py +12 -0
  857. notslowapi-0.1.0/tests/test_router_events.py +378 -0
  858. notslowapi-0.1.0/tests/test_router_include_context.py +1083 -0
  859. notslowapi-0.1.0/tests/test_router_prefix_with_template.py +23 -0
  860. notslowapi-0.1.0/tests/test_router_redirect_slashes.py +40 -0
  861. notslowapi-0.1.0/tests/test_schema_compat_pydantic_v2.py +121 -0
  862. notslowapi-0.1.0/tests/test_schema_extra_examples.py +857 -0
  863. notslowapi-0.1.0/tests/test_schema_ref_pydantic_v2.py +68 -0
  864. notslowapi-0.1.0/tests/test_security_api_key_cookie.py +70 -0
  865. notslowapi-0.1.0/tests/test_security_api_key_cookie_description.py +75 -0
  866. notslowapi-0.1.0/tests/test_security_api_key_cookie_optional.py +74 -0
  867. notslowapi-0.1.0/tests/test_security_api_key_header.py +70 -0
  868. notslowapi-0.1.0/tests/test_security_api_key_header_description.py +75 -0
  869. notslowapi-0.1.0/tests/test_security_api_key_header_optional.py +73 -0
  870. notslowapi-0.1.0/tests/test_security_api_key_query.py +70 -0
  871. notslowapi-0.1.0/tests/test_security_api_key_query_description.py +75 -0
  872. notslowapi-0.1.0/tests/test_security_api_key_query_optional.py +73 -0
  873. notslowapi-0.1.0/tests/test_security_http_base.py +64 -0
  874. notslowapi-0.1.0/tests/test_security_http_base_description.py +64 -0
  875. notslowapi-0.1.0/tests/test_security_http_base_optional.py +61 -0
  876. notslowapi-0.1.0/tests/test_security_http_basic_optional.py +79 -0
  877. notslowapi-0.1.0/tests/test_security_http_basic_realm.py +78 -0
  878. notslowapi-0.1.0/tests/test_security_http_basic_realm_description.py +84 -0
  879. notslowapi-0.1.0/tests/test_security_http_bearer.py +65 -0
  880. notslowapi-0.1.0/tests/test_security_http_bearer_description.py +71 -0
  881. notslowapi-0.1.0/tests/test_security_http_bearer_optional.py +67 -0
  882. notslowapi-0.1.0/tests/test_security_http_digest.py +67 -0
  883. notslowapi-0.1.0/tests/test_security_http_digest_description.py +73 -0
  884. notslowapi-0.1.0/tests/test_security_http_digest_optional.py +69 -0
  885. notslowapi-0.1.0/tests/test_security_oauth2.py +280 -0
  886. notslowapi-0.1.0/tests/test_security_oauth2_authorization_code_bearer.py +82 -0
  887. notslowapi-0.1.0/tests/test_security_oauth2_authorization_code_bearer_description.py +80 -0
  888. notslowapi-0.1.0/tests/test_security_oauth2_authorization_code_bearer_scopes_openapi.py +197 -0
  889. notslowapi-0.1.0/tests/test_security_oauth2_authorization_code_bearer_scopes_openapi_simple.py +80 -0
  890. notslowapi-0.1.0/tests/test_security_oauth2_optional.py +281 -0
  891. notslowapi-0.1.0/tests/test_security_oauth2_optional_description.py +283 -0
  892. notslowapi-0.1.0/tests/test_security_oauth2_password_bearer_optional.py +70 -0
  893. notslowapi-0.1.0/tests/test_security_oauth2_password_bearer_optional_description.py +75 -0
  894. notslowapi-0.1.0/tests/test_security_openid_connect.py +79 -0
  895. notslowapi-0.1.0/tests/test_security_openid_connect_description.py +82 -0
  896. notslowapi-0.1.0/tests/test_security_openid_connect_optional.py +82 -0
  897. notslowapi-0.1.0/tests/test_security_scopes.py +45 -0
  898. notslowapi-0.1.0/tests/test_security_scopes_dont_propagate.py +44 -0
  899. notslowapi-0.1.0/tests/test_security_scopes_sub_dependency.py +107 -0
  900. notslowapi-0.1.0/tests/test_serialize_response.py +55 -0
  901. notslowapi-0.1.0/tests/test_serialize_response_dataclass.py +193 -0
  902. notslowapi-0.1.0/tests/test_serialize_response_model.py +152 -0
  903. notslowapi-0.1.0/tests/test_skip_defaults.py +125 -0
  904. notslowapi-0.1.0/tests/test_sse.py +490 -0
  905. notslowapi-0.1.0/tests/test_starlette_exception.py +209 -0
  906. notslowapi-0.1.0/tests/test_starlette_urlconvertors.py +63 -0
  907. notslowapi-0.1.0/tests/test_stream_bare_type.py +74 -0
  908. notslowapi-0.1.0/tests/test_stream_cancellation.py +89 -0
  909. notslowapi-0.1.0/tests/test_stream_json_validation_error.py +40 -0
  910. notslowapi-0.1.0/tests/test_stream_status_code.py +452 -0
  911. notslowapi-0.1.0/tests/test_strict_content_type_app_level.py +44 -0
  912. notslowapi-0.1.0/tests/test_strict_content_type_nested.py +91 -0
  913. notslowapi-0.1.0/tests/test_strict_content_type_router_level.py +61 -0
  914. notslowapi-0.1.0/tests/test_stringified_annotation_dependency.py +79 -0
  915. notslowapi-0.1.0/tests/test_stringified_annotation_dependency_py314.py +30 -0
  916. notslowapi-0.1.0/tests/test_stringified_annotations_simple.py +27 -0
  917. notslowapi-0.1.0/tests/test_sub_callbacks.py +306 -0
  918. notslowapi-0.1.0/tests/test_swagger_ui_escape.py +37 -0
  919. notslowapi-0.1.0/tests/test_swagger_ui_init_oauth.py +28 -0
  920. notslowapi-0.1.0/tests/test_top_level_security_scheme_in_openapi.py +60 -0
  921. notslowapi-0.1.0/tests/test_translate.py +63 -0
  922. notslowapi-0.1.0/tests/test_tuples.py +276 -0
  923. notslowapi-0.1.0/tests/test_tutorial/__init__.py +0 -0
  924. notslowapi-0.1.0/tests/test_tutorial/test_additional_responses/__init__.py +0 -0
  925. notslowapi-0.1.0/tests/test_tutorial/test_additional_responses/test_tutorial001.py +127 -0
  926. notslowapi-0.1.0/tests/test_tutorial/test_additional_responses/test_tutorial002.py +140 -0
  927. notslowapi-0.1.0/tests/test_tutorial/test_additional_responses/test_tutorial003.py +131 -0
  928. notslowapi-0.1.0/tests/test_tutorial/test_additional_responses/test_tutorial004.py +143 -0
  929. notslowapi-0.1.0/tests/test_tutorial/test_additional_status_codes/__init__.py +0 -0
  930. notslowapi-0.1.0/tests/test_tutorial/test_additional_status_codes/test_tutorial001.py +32 -0
  931. notslowapi-0.1.0/tests/test_tutorial/test_advanced_middleware/__init__.py +0 -0
  932. notslowapi-0.1.0/tests/test_tutorial/test_advanced_middleware/test_tutorial001.py +14 -0
  933. notslowapi-0.1.0/tests/test_tutorial/test_advanced_middleware/test_tutorial002.py +15 -0
  934. notslowapi-0.1.0/tests/test_tutorial/test_advanced_middleware/test_tutorial003.py +22 -0
  935. notslowapi-0.1.0/tests/test_tutorial/test_async_tests/__init__.py +0 -0
  936. notslowapi-0.1.0/tests/test_tutorial/test_async_tests/test_main_a.py +8 -0
  937. notslowapi-0.1.0/tests/test_tutorial/test_authentication_error_status_code/__init__.py +0 -0
  938. notslowapi-0.1.0/tests/test_tutorial/test_authentication_error_status_code/test_tutorial001.py +66 -0
  939. notslowapi-0.1.0/tests/test_tutorial/test_background_tasks/__init__.py +0 -0
  940. notslowapi-0.1.0/tests/test_tutorial/test_background_tasks/test_tutorial001.py +21 -0
  941. notslowapi-0.1.0/tests/test_tutorial/test_background_tasks/test_tutorial002.py +34 -0
  942. notslowapi-0.1.0/tests/test_tutorial/test_behind_a_proxy/__init__.py +0 -0
  943. notslowapi-0.1.0/tests/test_tutorial/test_behind_a_proxy/test_tutorial001.py +38 -0
  944. notslowapi-0.1.0/tests/test_tutorial/test_behind_a_proxy/test_tutorial001_01.py +21 -0
  945. notslowapi-0.1.0/tests/test_tutorial/test_behind_a_proxy/test_tutorial002.py +38 -0
  946. notslowapi-0.1.0/tests/test_tutorial/test_behind_a_proxy/test_tutorial003.py +48 -0
  947. notslowapi-0.1.0/tests/test_tutorial/test_behind_a_proxy/test_tutorial004.py +47 -0
  948. notslowapi-0.1.0/tests/test_tutorial/test_bigger_applications/__init__.py +0 -0
  949. notslowapi-0.1.0/tests/test_tutorial/test_bigger_applications/test_main.py +606 -0
  950. notslowapi-0.1.0/tests/test_tutorial/test_body/__init__.py +0 -0
  951. notslowapi-0.1.0/tests/test_tutorial/test_body/test_tutorial001.py +346 -0
  952. notslowapi-0.1.0/tests/test_tutorial/test_body/test_tutorial002.py +166 -0
  953. notslowapi-0.1.0/tests/test_tutorial/test_body/test_tutorial003.py +177 -0
  954. notslowapi-0.1.0/tests/test_tutorial/test_body/test_tutorial004.py +188 -0
  955. notslowapi-0.1.0/tests/test_tutorial/test_body_fields/__init__.py +0 -0
  956. notslowapi-0.1.0/tests/test_tutorial/test_body_fields/test_tutorial001.py +189 -0
  957. notslowapi-0.1.0/tests/test_tutorial/test_body_multiple_params/__init__.py +0 -0
  958. notslowapi-0.1.0/tests/test_tutorial/test_body_multiple_params/test_tutorial001.py +185 -0
  959. notslowapi-0.1.0/tests/test_tutorial/test_body_multiple_params/test_tutorial002.py +368 -0
  960. notslowapi-0.1.0/tests/test_tutorial/test_body_multiple_params/test_tutorial003.py +225 -0
  961. notslowapi-0.1.0/tests/test_tutorial/test_body_multiple_params/test_tutorial004.py +295 -0
  962. notslowapi-0.1.0/tests/test_tutorial/test_body_multiple_params/test_tutorial005.py +275 -0
  963. notslowapi-0.1.0/tests/test_tutorial/test_body_nested_models/__init__.py +0 -0
  964. notslowapi-0.1.0/tests/test_tutorial/test_body_nested_models/test_tutorial001_tutorial002_tutorial003.py +256 -0
  965. notslowapi-0.1.0/tests/test_tutorial/test_body_nested_models/test_tutorial004.py +281 -0
  966. notslowapi-0.1.0/tests/test_tutorial/test_body_nested_models/test_tutorial005.py +307 -0
  967. notslowapi-0.1.0/tests/test_tutorial/test_body_nested_models/test_tutorial006.py +275 -0
  968. notslowapi-0.1.0/tests/test_tutorial/test_body_nested_models/test_tutorial007.py +350 -0
  969. notslowapi-0.1.0/tests/test_tutorial/test_body_nested_models/test_tutorial008.py +164 -0
  970. notslowapi-0.1.0/tests/test_tutorial/test_body_nested_models/test_tutorial009.py +123 -0
  971. notslowapi-0.1.0/tests/test_tutorial/test_body_updates/__init__.py +0 -0
  972. notslowapi-0.1.0/tests/test_tutorial/test_body_updates/test_tutorial001.py +192 -0
  973. notslowapi-0.1.0/tests/test_tutorial/test_body_updates/test_tutorial002.py +213 -0
  974. notslowapi-0.1.0/tests/test_tutorial/test_conditional_openapi/__init__.py +0 -0
  975. notslowapi-0.1.0/tests/test_tutorial/test_conditional_openapi/test_tutorial001.py +61 -0
  976. notslowapi-0.1.0/tests/test_tutorial/test_configure_swagger_ui/__init__.py +0 -0
  977. notslowapi-0.1.0/tests/test_tutorial/test_configure_swagger_ui/test_tutorial001.py +41 -0
  978. notslowapi-0.1.0/tests/test_tutorial/test_configure_swagger_ui/test_tutorial002.py +44 -0
  979. notslowapi-0.1.0/tests/test_tutorial/test_configure_swagger_ui/test_tutorial003.py +44 -0
  980. notslowapi-0.1.0/tests/test_tutorial/test_cookie_param_models/__init__.py +0 -0
  981. notslowapi-0.1.0/tests/test_tutorial/test_cookie_param_models/test_tutorial001.py +171 -0
  982. notslowapi-0.1.0/tests/test_tutorial/test_cookie_param_models/test_tutorial002.py +181 -0
  983. notslowapi-0.1.0/tests/test_tutorial/test_cookie_params/__init__.py +0 -0
  984. notslowapi-0.1.0/tests/test_tutorial/test_cookie_params/test_tutorial001.py +124 -0
  985. notslowapi-0.1.0/tests/test_tutorial/test_cors/__init__.py +0 -0
  986. notslowapi-0.1.0/tests/test_tutorial/test_cors/test_tutorial001.py +37 -0
  987. notslowapi-0.1.0/tests/test_tutorial/test_custom_docs_ui/__init__.py +0 -0
  988. notslowapi-0.1.0/tests/test_tutorial/test_custom_docs_ui/test_tutorial001.py +48 -0
  989. notslowapi-0.1.0/tests/test_tutorial/test_custom_docs_ui/test_tutorial002.py +48 -0
  990. notslowapi-0.1.0/tests/test_tutorial/test_custom_request_and_route/__init__.py +0 -0
  991. notslowapi-0.1.0/tests/test_tutorial/test_custom_request_and_route/test_tutorial001.py +46 -0
  992. notslowapi-0.1.0/tests/test_tutorial/test_custom_request_and_route/test_tutorial002.py +44 -0
  993. notslowapi-0.1.0/tests/test_tutorial/test_custom_request_and_route/test_tutorial003.py +32 -0
  994. notslowapi-0.1.0/tests/test_tutorial/test_custom_response/__init__.py +0 -0
  995. notslowapi-0.1.0/tests/test_tutorial/test_custom_response/test_tutorial001.py +52 -0
  996. notslowapi-0.1.0/tests/test_tutorial/test_custom_response/test_tutorial001b.py +47 -0
  997. notslowapi-0.1.0/tests/test_tutorial/test_custom_response/test_tutorial002_tutorial003_tutorial004.py +71 -0
  998. notslowapi-0.1.0/tests/test_tutorial/test_custom_response/test_tutorial005.py +39 -0
  999. notslowapi-0.1.0/tests/test_tutorial/test_custom_response/test_tutorial006.py +37 -0
  1000. notslowapi-0.1.0/tests/test_tutorial/test_custom_response/test_tutorial006b.py +32 -0
  1001. notslowapi-0.1.0/tests/test_tutorial/test_custom_response/test_tutorial006c.py +32 -0
  1002. notslowapi-0.1.0/tests/test_tutorial/test_custom_response/test_tutorial007.py +11 -0
  1003. notslowapi-0.1.0/tests/test_tutorial/test_custom_response/test_tutorial008.py +18 -0
  1004. notslowapi-0.1.0/tests/test_tutorial/test_custom_response/test_tutorial009.py +18 -0
  1005. notslowapi-0.1.0/tests/test_tutorial/test_custom_response/test_tutorial009b.py +18 -0
  1006. notslowapi-0.1.0/tests/test_tutorial/test_custom_response/test_tutorial009c.py +13 -0
  1007. notslowapi-0.1.0/tests/test_tutorial/test_custom_response/test_tutorial010.py +50 -0
  1008. notslowapi-0.1.0/tests/test_tutorial/test_dataclasses/__init__.py +0 -0
  1009. notslowapi-0.1.0/tests/test_tutorial/test_dataclasses/test_tutorial001.py +142 -0
  1010. notslowapi-0.1.0/tests/test_tutorial/test_dataclasses/test_tutorial002.py +88 -0
  1011. notslowapi-0.1.0/tests/test_tutorial/test_dataclasses/test_tutorial003.py +210 -0
  1012. notslowapi-0.1.0/tests/test_tutorial/test_debugging/__init__.py +0 -0
  1013. notslowapi-0.1.0/tests/test_tutorial/test_debugging/test_tutorial001.py +65 -0
  1014. notslowapi-0.1.0/tests/test_tutorial/test_dependencies/__init__.py +0 -0
  1015. notslowapi-0.1.0/tests/test_tutorial/test_dependencies/test_tutorial001_tutorial001_02.py +192 -0
  1016. notslowapi-0.1.0/tests/test_tutorial/test_dependencies/test_tutorial002_tutorial003_tutorial004.py +180 -0
  1017. notslowapi-0.1.0/tests/test_tutorial/test_dependencies/test_tutorial005.py +144 -0
  1018. notslowapi-0.1.0/tests/test_tutorial/test_dependencies/test_tutorial006.py +150 -0
  1019. notslowapi-0.1.0/tests/test_tutorial/test_dependencies/test_tutorial007.py +24 -0
  1020. notslowapi-0.1.0/tests/test_tutorial/test_dependencies/test_tutorial008.py +64 -0
  1021. notslowapi-0.1.0/tests/test_tutorial/test_dependencies/test_tutorial008b.py +36 -0
  1022. notslowapi-0.1.0/tests/test_tutorial/test_dependencies/test_tutorial008c.py +47 -0
  1023. notslowapi-0.1.0/tests/test_tutorial/test_dependencies/test_tutorial008d.py +48 -0
  1024. notslowapi-0.1.0/tests/test_tutorial/test_dependencies/test_tutorial008e.py +24 -0
  1025. notslowapi-0.1.0/tests/test_tutorial/test_dependencies/test_tutorial010.py +29 -0
  1026. notslowapi-0.1.0/tests/test_tutorial/test_dependencies/test_tutorial011.py +127 -0
  1027. notslowapi-0.1.0/tests/test_tutorial/test_dependencies/test_tutorial012.py +233 -0
  1028. notslowapi-0.1.0/tests/test_tutorial/test_encoder/__init__.py +0 -0
  1029. notslowapi-0.1.0/tests/test_tutorial/test_encoder/test_tutorial001.py +212 -0
  1030. notslowapi-0.1.0/tests/test_tutorial/test_events/__init__.py +0 -0
  1031. notslowapi-0.1.0/tests/test_tutorial/test_events/test_tutorial001.py +100 -0
  1032. notslowapi-0.1.0/tests/test_tutorial/test_events/test_tutorial002.py +50 -0
  1033. notslowapi-0.1.0/tests/test_tutorial/test_events/test_tutorial003.py +100 -0
  1034. notslowapi-0.1.0/tests/test_tutorial/test_extending_openapi/__init__.py +0 -0
  1035. notslowapi-0.1.0/tests/test_tutorial/test_extending_openapi/test_tutorial001.py +50 -0
  1036. notslowapi-0.1.0/tests/test_tutorial/test_extra_data_types/__init__.py +0 -0
  1037. notslowapi-0.1.0/tests/test_tutorial/test_extra_data_types/test_tutorial001.py +163 -0
  1038. notslowapi-0.1.0/tests/test_tutorial/test_extra_models/__init__.py +0 -0
  1039. notslowapi-0.1.0/tests/test_tutorial/test_extra_models/test_tutorial001_tutorial002.py +161 -0
  1040. notslowapi-0.1.0/tests/test_tutorial/test_extra_models/test_tutorial003.py +158 -0
  1041. notslowapi-0.1.0/tests/test_tutorial/test_extra_models/test_tutorial004.py +75 -0
  1042. notslowapi-0.1.0/tests/test_tutorial/test_extra_models/test_tutorial005.py +57 -0
  1043. notslowapi-0.1.0/tests/test_tutorial/test_first_steps/__init__.py +0 -0
  1044. notslowapi-0.1.0/tests/test_tutorial/test_first_steps/test_tutorial001_tutorial002_tutorial003.py +56 -0
  1045. notslowapi-0.1.0/tests/test_tutorial/test_generate_clients/__init__.py +0 -0
  1046. notslowapi-0.1.0/tests/test_tutorial/test_generate_clients/test_tutorial001.py +153 -0
  1047. notslowapi-0.1.0/tests/test_tutorial/test_generate_clients/test_tutorial002.py +198 -0
  1048. notslowapi-0.1.0/tests/test_tutorial/test_generate_clients/test_tutorial003.py +198 -0
  1049. notslowapi-0.1.0/tests/test_tutorial/test_generate_clients/test_tutorial004.py +236 -0
  1050. notslowapi-0.1.0/tests/test_tutorial/test_graphql/__init__.py +0 -0
  1051. notslowapi-0.1.0/tests/test_tutorial/test_graphql/test_tutorial001.py +73 -0
  1052. notslowapi-0.1.0/tests/test_tutorial/test_handling_errors/__init__.py +0 -0
  1053. notslowapi-0.1.0/tests/test_tutorial/test_handling_errors/test_tutorial001.py +97 -0
  1054. notslowapi-0.1.0/tests/test_tutorial/test_handling_errors/test_tutorial002.py +97 -0
  1055. notslowapi-0.1.0/tests/test_tutorial/test_handling_errors/test_tutorial003.py +98 -0
  1056. notslowapi-0.1.0/tests/test_tutorial/test_handling_errors/test_tutorial004.py +103 -0
  1057. notslowapi-0.1.0/tests/test_tutorial/test_handling_errors/test_tutorial005.py +116 -0
  1058. notslowapi-0.1.0/tests/test_tutorial/test_handling_errors/test_tutorial006.py +111 -0
  1059. notslowapi-0.1.0/tests/test_tutorial/test_header_param_models/__init__.py +0 -0
  1060. notslowapi-0.1.0/tests/test_tutorial/test_header_param_models/test_tutorial001.py +210 -0
  1061. notslowapi-0.1.0/tests/test_tutorial/test_header_param_models/test_tutorial002.py +204 -0
  1062. notslowapi-0.1.0/tests/test_tutorial/test_header_param_models/test_tutorial003.py +249 -0
  1063. notslowapi-0.1.0/tests/test_tutorial/test_header_params/__init__.py +0 -0
  1064. notslowapi-0.1.0/tests/test_tutorial/test_header_params/test_tutorial001.py +116 -0
  1065. notslowapi-0.1.0/tests/test_tutorial/test_header_params/test_tutorial002.py +127 -0
  1066. notslowapi-0.1.0/tests/test_tutorial/test_header_params/test_tutorial003.py +124 -0
  1067. notslowapi-0.1.0/tests/test_tutorial/test_json_base64_bytes/__init__.py +0 -0
  1068. notslowapi-0.1.0/tests/test_tutorial/test_json_base64_bytes/test_tutorial001.py +225 -0
  1069. notslowapi-0.1.0/tests/test_tutorial/test_metadata/__init__.py +0 -0
  1070. notslowapi-0.1.0/tests/test_tutorial/test_metadata/test_tutorial001.py +52 -0
  1071. notslowapi-0.1.0/tests/test_tutorial/test_metadata/test_tutorial001_1.py +52 -0
  1072. notslowapi-0.1.0/tests/test_tutorial/test_metadata/test_tutorial002.py +45 -0
  1073. notslowapi-0.1.0/tests/test_tutorial/test_metadata/test_tutorial003.py +56 -0
  1074. notslowapi-0.1.0/tests/test_tutorial/test_metadata/test_tutorial004.py +66 -0
  1075. notslowapi-0.1.0/tests/test_tutorial/test_middleware/__init__.py +0 -0
  1076. notslowapi-0.1.0/tests/test_tutorial/test_middleware/test_tutorial001.py +27 -0
  1077. notslowapi-0.1.0/tests/test_tutorial/test_openapi_callbacks/__init__.py +0 -0
  1078. notslowapi-0.1.0/tests/test_tutorial/test_openapi_callbacks/test_tutorial001.py +208 -0
  1079. notslowapi-0.1.0/tests/test_tutorial/test_openapi_webhooks/__init__.py +0 -0
  1080. notslowapi-0.1.0/tests/test_tutorial/test_openapi_webhooks/test_tutorial001.py +129 -0
  1081. notslowapi-0.1.0/tests/test_tutorial/test_path_operation_advanced_configurations/__init__.py +0 -0
  1082. notslowapi-0.1.0/tests/test_tutorial/test_path_operation_advanced_configurations/test_tutorial001.py +37 -0
  1083. notslowapi-0.1.0/tests/test_tutorial/test_path_operation_advanced_configurations/test_tutorial002.py +37 -0
  1084. notslowapi-0.1.0/tests/test_tutorial/test_path_operation_advanced_configurations/test_tutorial003.py +24 -0
  1085. notslowapi-0.1.0/tests/test_tutorial/test_path_operation_advanced_configurations/test_tutorial004.py +142 -0
  1086. notslowapi-0.1.0/tests/test_tutorial/test_path_operation_advanced_configurations/test_tutorial005.py +37 -0
  1087. notslowapi-0.1.0/tests/test_tutorial/test_path_operation_advanced_configurations/test_tutorial006.py +60 -0
  1088. notslowapi-0.1.0/tests/test_tutorial/test_path_operation_advanced_configurations/test_tutorial007.py +118 -0
  1089. notslowapi-0.1.0/tests/test_tutorial/test_path_operation_configurations/__init__.py +0 -0
  1090. notslowapi-0.1.0/tests/test_tutorial/test_path_operation_configurations/test_tutorial001.py +190 -0
  1091. notslowapi-0.1.0/tests/test_tutorial/test_path_operation_configurations/test_tutorial002.py +227 -0
  1092. notslowapi-0.1.0/tests/test_tutorial/test_path_operation_configurations/test_tutorial002b.py +57 -0
  1093. notslowapi-0.1.0/tests/test_tutorial/test_path_operation_configurations/test_tutorial003_tutorial004.py +211 -0
  1094. notslowapi-0.1.0/tests/test_tutorial/test_path_operation_configurations/test_tutorial005.py +141 -0
  1095. notslowapi-0.1.0/tests/test_tutorial/test_path_operation_configurations/test_tutorial006.py +74 -0
  1096. notslowapi-0.1.0/tests/test_tutorial/test_path_params/__init__.py +0 -0
  1097. notslowapi-0.1.0/tests/test_tutorial/test_path_params/test_tutorial001.py +121 -0
  1098. notslowapi-0.1.0/tests/test_tutorial/test_path_params/test_tutorial002.py +129 -0
  1099. notslowapi-0.1.0/tests/test_tutorial/test_path_params/test_tutorial003.py +138 -0
  1100. notslowapi-0.1.0/tests/test_tutorial/test_path_params/test_tutorial003b.py +47 -0
  1101. notslowapi-0.1.0/tests/test_tutorial/test_path_params/test_tutorial004.py +98 -0
  1102. notslowapi-0.1.0/tests/test_tutorial/test_path_params/test_tutorial005.py +123 -0
  1103. notslowapi-0.1.0/tests/test_tutorial/test_path_params_numeric_validations/__init__.py +0 -0
  1104. notslowapi-0.1.0/tests/test_tutorial/test_path_params_numeric_validations/test_tutorial001.py +167 -0
  1105. notslowapi-0.1.0/tests/test_tutorial/test_path_params_numeric_validations/test_tutorial002_tutorial003.py +175 -0
  1106. notslowapi-0.1.0/tests/test_tutorial/test_path_params_numeric_validations/test_tutorial004.py +190 -0
  1107. notslowapi-0.1.0/tests/test_tutorial/test_path_params_numeric_validations/test_tutorial005.py +207 -0
  1108. notslowapi-0.1.0/tests/test_tutorial/test_path_params_numeric_validations/test_tutorial006.py +226 -0
  1109. notslowapi-0.1.0/tests/test_tutorial/test_python_types/__init__.py +0 -0
  1110. notslowapi-0.1.0/tests/test_tutorial/test_python_types/test_tutorial001_tutorial002.py +18 -0
  1111. notslowapi-0.1.0/tests/test_tutorial/test_python_types/test_tutorial003.py +12 -0
  1112. notslowapi-0.1.0/tests/test_tutorial/test_python_types/test_tutorial004.py +5 -0
  1113. notslowapi-0.1.0/tests/test_tutorial/test_python_types/test_tutorial005.py +12 -0
  1114. notslowapi-0.1.0/tests/test_tutorial/test_python_types/test_tutorial006.py +16 -0
  1115. notslowapi-0.1.0/tests/test_tutorial/test_python_types/test_tutorial007.py +8 -0
  1116. notslowapi-0.1.0/tests/test_tutorial/test_python_types/test_tutorial008.py +17 -0
  1117. notslowapi-0.1.0/tests/test_tutorial/test_python_types/test_tutorial008b.py +27 -0
  1118. notslowapi-0.1.0/tests/test_tutorial/test_python_types/test_tutorial009_tutorial009b.py +32 -0
  1119. notslowapi-0.1.0/tests/test_tutorial/test_python_types/test_tutorial010.py +5 -0
  1120. notslowapi-0.1.0/tests/test_tutorial/test_python_types/test_tutorial011.py +24 -0
  1121. notslowapi-0.1.0/tests/test_tutorial/test_python_types/test_tutorial013.py +5 -0
  1122. notslowapi-0.1.0/tests/test_tutorial/test_query_param_models/__init__.py +0 -0
  1123. notslowapi-0.1.0/tests/test_tutorial/test_query_param_models/test_tutorial001.py +227 -0
  1124. notslowapi-0.1.0/tests/test_tutorial/test_query_param_models/test_tutorial002.py +233 -0
  1125. notslowapi-0.1.0/tests/test_tutorial/test_query_params/__init__.py +0 -0
  1126. notslowapi-0.1.0/tests/test_tutorial/test_query_params/test_tutorial001.py +133 -0
  1127. notslowapi-0.1.0/tests/test_tutorial/test_query_params/test_tutorial002.py +133 -0
  1128. notslowapi-0.1.0/tests/test_tutorial/test_query_params/test_tutorial003.py +154 -0
  1129. notslowapi-0.1.0/tests/test_tutorial/test_query_params/test_tutorial004.py +162 -0
  1130. notslowapi-0.1.0/tests/test_tutorial/test_query_params/test_tutorial005.py +111 -0
  1131. notslowapi-0.1.0/tests/test_tutorial/test_query_params/test_tutorial006.py +161 -0
  1132. notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/__init__.py +0 -0
  1133. notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial001.py +127 -0
  1134. notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial002.py +147 -0
  1135. notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial003.py +158 -0
  1136. notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial004.py +143 -0
  1137. notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial005.py +138 -0
  1138. notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial006.py +143 -0
  1139. notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial006c.py +153 -0
  1140. notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial007.py +141 -0
  1141. notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial008.py +143 -0
  1142. notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial009.py +128 -0
  1143. notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial010.py +158 -0
  1144. notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial011.py +121 -0
  1145. notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial012.py +118 -0
  1146. notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial013.py +118 -0
  1147. notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial014.py +105 -0
  1148. notslowapi-0.1.0/tests/test_tutorial/test_query_params_str_validations/test_tutorial015.py +143 -0
  1149. notslowapi-0.1.0/tests/test_tutorial/test_request_files/__init__.py +0 -0
  1150. notslowapi-0.1.0/tests/test_tutorial/test_request_files/test_tutorial001.py +216 -0
  1151. notslowapi-0.1.0/tests/test_tutorial/test_request_files/test_tutorial001_02.py +196 -0
  1152. notslowapi-0.1.0/tests/test_tutorial/test_request_files/test_tutorial001_03.py +177 -0
  1153. notslowapi-0.1.0/tests/test_tutorial/test_request_files/test_tutorial002.py +254 -0
  1154. notslowapi-0.1.0/tests/test_tutorial/test_request_files/test_tutorial003.py +226 -0
  1155. notslowapi-0.1.0/tests/test_tutorial/test_request_form_models/__init__.py +0 -0
  1156. notslowapi-0.1.0/tests/test_tutorial/test_request_form_models/test_tutorial001.py +184 -0
  1157. notslowapi-0.1.0/tests/test_tutorial/test_request_form_models/test_tutorial002.py +202 -0
  1158. notslowapi-0.1.0/tests/test_tutorial/test_request_forms/__init__.py +0 -0
  1159. notslowapi-0.1.0/tests/test_tutorial/test_request_forms/test_tutorial001.py +186 -0
  1160. notslowapi-0.1.0/tests/test_tutorial/test_request_forms_and_files/__init__.py +0 -0
  1161. notslowapi-0.1.0/tests/test_tutorial/test_request_forms_and_files/test_tutorial001.py +245 -0
  1162. notslowapi-0.1.0/tests/test_tutorial/test_response_change_status_code/__init__.py +0 -0
  1163. notslowapi-0.1.0/tests/test_tutorial/test_response_change_status_code/test_tutorial001.py +15 -0
  1164. notslowapi-0.1.0/tests/test_tutorial/test_response_cookies/__init__.py +0 -0
  1165. notslowapi-0.1.0/tests/test_tutorial/test_response_cookies/test_tutorial001.py +12 -0
  1166. notslowapi-0.1.0/tests/test_tutorial/test_response_cookies/test_tutorial002.py +12 -0
  1167. notslowapi-0.1.0/tests/test_tutorial/test_response_directly/__init__.py +0 -0
  1168. notslowapi-0.1.0/tests/test_tutorial/test_response_directly/test_tutorial001.py +156 -0
  1169. notslowapi-0.1.0/tests/test_tutorial/test_response_directly/test_tutorial002.py +68 -0
  1170. notslowapi-0.1.0/tests/test_tutorial/test_response_headers/__init__.py +0 -0
  1171. notslowapi-0.1.0/tests/test_tutorial/test_response_headers/test_tutorial001.py +13 -0
  1172. notslowapi-0.1.0/tests/test_tutorial/test_response_headers/test_tutorial002.py +12 -0
  1173. notslowapi-0.1.0/tests/test_tutorial/test_response_model/__init__.py +0 -0
  1174. notslowapi-0.1.0/tests/test_tutorial/test_response_model/test_tutorial001_tutorial001_01.py +200 -0
  1175. notslowapi-0.1.0/tests/test_tutorial/test_response_model/test_tutorial002.py +137 -0
  1176. notslowapi-0.1.0/tests/test_tutorial/test_response_model/test_tutorial003.py +157 -0
  1177. notslowapi-0.1.0/tests/test_tutorial/test_response_model/test_tutorial003_01.py +157 -0
  1178. notslowapi-0.1.0/tests/test_tutorial/test_response_model/test_tutorial003_02.py +100 -0
  1179. notslowapi-0.1.0/tests/test_tutorial/test_response_model/test_tutorial003_03.py +37 -0
  1180. notslowapi-0.1.0/tests/test_tutorial/test_response_model/test_tutorial003_04.py +17 -0
  1181. notslowapi-0.1.0/tests/test_tutorial/test_response_model/test_tutorial003_05.py +114 -0
  1182. notslowapi-0.1.0/tests/test_tutorial/test_response_model/test_tutorial004.py +148 -0
  1183. notslowapi-0.1.0/tests/test_tutorial/test_response_model/test_tutorial005.py +166 -0
  1184. notslowapi-0.1.0/tests/test_tutorial/test_response_model/test_tutorial006.py +166 -0
  1185. notslowapi-0.1.0/tests/test_tutorial/test_response_status_code/__init__.py +0 -0
  1186. notslowapi-0.1.0/tests/test_tutorial/test_response_status_code/test_tutorial001_tutorial002.py +103 -0
  1187. notslowapi-0.1.0/tests/test_tutorial/test_schema_extra_example/__init__.py +0 -0
  1188. notslowapi-0.1.0/tests/test_tutorial/test_schema_extra_example/test_tutorial001.py +144 -0
  1189. notslowapi-0.1.0/tests/test_tutorial/test_schema_extra_example/test_tutorial002.py +146 -0
  1190. notslowapi-0.1.0/tests/test_tutorial/test_schema_extra_example/test_tutorial003.py +147 -0
  1191. notslowapi-0.1.0/tests/test_tutorial/test_schema_extra_example/test_tutorial004.py +152 -0
  1192. notslowapi-0.1.0/tests/test_tutorial/test_schema_extra_example/test_tutorial005.py +161 -0
  1193. notslowapi-0.1.0/tests/test_tutorial/test_security/__init__.py +0 -0
  1194. notslowapi-0.1.0/tests/test_tutorial/test_security/test_tutorial001.py +73 -0
  1195. notslowapi-0.1.0/tests/test_tutorial/test_security/test_tutorial002.py +72 -0
  1196. notslowapi-0.1.0/tests/test_tutorial/test_security/test_tutorial003.py +215 -0
  1197. notslowapi-0.1.0/tests/test_tutorial/test_security/test_tutorial004.py +372 -0
  1198. notslowapi-0.1.0/tests/test_tutorial/test_security/test_tutorial005.py +432 -0
  1199. notslowapi-0.1.0/tests/test_tutorial/test_security/test_tutorial006.py +80 -0
  1200. notslowapi-0.1.0/tests/test_tutorial/test_security/test_tutorial007.py +92 -0
  1201. notslowapi-0.1.0/tests/test_tutorial/test_separate_openapi_schemas/__init__.py +0 -0
  1202. notslowapi-0.1.0/tests/test_tutorial/test_separate_openapi_schemas/test_tutorial001.py +148 -0
  1203. notslowapi-0.1.0/tests/test_tutorial/test_separate_openapi_schemas/test_tutorial002.py +148 -0
  1204. notslowapi-0.1.0/tests/test_tutorial/test_server_sent_events/__init__.py +0 -0
  1205. notslowapi-0.1.0/tests/test_tutorial/test_server_sent_events/test_tutorial001.py +191 -0
  1206. notslowapi-0.1.0/tests/test_tutorial/test_server_sent_events/test_tutorial002.py +83 -0
  1207. notslowapi-0.1.0/tests/test_tutorial/test_server_sent_events/test_tutorial003.py +73 -0
  1208. notslowapi-0.1.0/tests/test_tutorial/test_server_sent_events/test_tutorial004.py +164 -0
  1209. notslowapi-0.1.0/tests/test_tutorial/test_server_sent_events/test_tutorial005.py +141 -0
  1210. notslowapi-0.1.0/tests/test_tutorial/test_settings/__init__.py +0 -0
  1211. notslowapi-0.1.0/tests/test_tutorial/test_settings/test_app01.py +81 -0
  1212. notslowapi-0.1.0/tests/test_tutorial/test_settings/test_app02.py +40 -0
  1213. notslowapi-0.1.0/tests/test_tutorial/test_settings/test_app03.py +44 -0
  1214. notslowapi-0.1.0/tests/test_tutorial/test_settings/test_tutorial001.py +23 -0
  1215. notslowapi-0.1.0/tests/test_tutorial/test_sql_databases/__init__.py +0 -0
  1216. notslowapi-0.1.0/tests/test_tutorial/test_sql_databases/test_tutorial001.py +360 -0
  1217. notslowapi-0.1.0/tests/test_tutorial/test_sql_databases/test_tutorial002.py +441 -0
  1218. notslowapi-0.1.0/tests/test_tutorial/test_static_files/__init__.py +0 -0
  1219. notslowapi-0.1.0/tests/test_tutorial/test_static_files/test_tutorial001.py +48 -0
  1220. notslowapi-0.1.0/tests/test_tutorial/test_stream_data/__init__.py +0 -0
  1221. notslowapi-0.1.0/tests/test_tutorial/test_stream_data/test_tutorial001.py +154 -0
  1222. notslowapi-0.1.0/tests/test_tutorial/test_stream_data/test_tutorial002.py +121 -0
  1223. notslowapi-0.1.0/tests/test_tutorial/test_stream_json_lines/__init__.py +0 -0
  1224. notslowapi-0.1.0/tests/test_tutorial/test_stream_json_lines/test_tutorial001.py +143 -0
  1225. notslowapi-0.1.0/tests/test_tutorial/test_strict_content_type/__init__.py +0 -0
  1226. notslowapi-0.1.0/tests/test_tutorial/test_strict_content_type/test_tutorial001.py +43 -0
  1227. notslowapi-0.1.0/tests/test_tutorial/test_sub_applications/__init__.py +0 -0
  1228. notslowapi-0.1.0/tests/test_tutorial/test_sub_applications/test_tutorial001.py +69 -0
  1229. notslowapi-0.1.0/tests/test_tutorial/test_templates/__init__.py +0 -0
  1230. notslowapi-0.1.0/tests/test_tutorial/test_templates/test_tutorial001.py +30 -0
  1231. notslowapi-0.1.0/tests/test_tutorial/test_testing/__init__.py +0 -0
  1232. notslowapi-0.1.0/tests/test_tutorial/test_testing/test_main_a.py +32 -0
  1233. notslowapi-0.1.0/tests/test_tutorial/test_testing/test_main_b.py +28 -0
  1234. notslowapi-0.1.0/tests/test_tutorial/test_testing/test_tutorial001.py +32 -0
  1235. notslowapi-0.1.0/tests/test_tutorial/test_testing/test_tutorial002.py +9 -0
  1236. notslowapi-0.1.0/tests/test_tutorial/test_testing/test_tutorial003.py +7 -0
  1237. notslowapi-0.1.0/tests/test_tutorial/test_testing/test_tutorial004.py +5 -0
  1238. notslowapi-0.1.0/tests/test_tutorial/test_testing_dependencies/__init__.py +0 -0
  1239. notslowapi-0.1.0/tests/test_tutorial/test_testing_dependencies/test_tutorial001.py +80 -0
  1240. notslowapi-0.1.0/tests/test_tutorial/test_using_request_directly/__init__.py +0 -0
  1241. notslowapi-0.1.0/tests/test_tutorial/test_using_request_directly/test_tutorial001.py +117 -0
  1242. notslowapi-0.1.0/tests/test_tutorial/test_websockets/__init__.py +0 -0
  1243. notslowapi-0.1.0/tests/test_tutorial/test_websockets/test_tutorial001.py +26 -0
  1244. notslowapi-0.1.0/tests/test_tutorial/test_websockets/test_tutorial002.py +104 -0
  1245. notslowapi-0.1.0/tests/test_tutorial/test_websockets/test_tutorial003.py +55 -0
  1246. notslowapi-0.1.0/tests/test_tutorial/test_wsgi/__init__.py +0 -0
  1247. notslowapi-0.1.0/tests/test_tutorial/test_wsgi/test_tutorial001.py +17 -0
  1248. notslowapi-0.1.0/tests/test_typing_python39.py +24 -0
  1249. notslowapi-0.1.0/tests/test_union_body.py +134 -0
  1250. notslowapi-0.1.0/tests/test_union_body_discriminator.py +204 -0
  1251. notslowapi-0.1.0/tests/test_union_body_discriminator_annotated.py +203 -0
  1252. notslowapi-0.1.0/tests/test_union_forms.py +163 -0
  1253. notslowapi-0.1.0/tests/test_union_inherited_body.py +142 -0
  1254. notslowapi-0.1.0/tests/test_validate_response.py +82 -0
  1255. notslowapi-0.1.0/tests/test_validate_response_dataclass.py +51 -0
  1256. notslowapi-0.1.0/tests/test_validate_response_recursive/__init__.py +0 -0
  1257. notslowapi-0.1.0/tests/test_validate_response_recursive/app.py +47 -0
  1258. notslowapi-0.1.0/tests/test_validate_response_recursive/test_validate_response_recursive.py +30 -0
  1259. notslowapi-0.1.0/tests/test_validation_error_context.py +168 -0
  1260. notslowapi-0.1.0/tests/test_webhooks_security.py +137 -0
  1261. notslowapi-0.1.0/tests/test_wrapped_method_forward_reference.py +31 -0
  1262. notslowapi-0.1.0/tests/test_ws_dependencies.py +72 -0
  1263. notslowapi-0.1.0/tests/test_ws_router.py +271 -0
  1264. notslowapi-0.1.0/tests/utils.py +29 -0
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2018 Sebastián Ramírez
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,163 @@
1
+ Metadata-Version: 2.4
2
+ Name: notslowapi
3
+ Version: 0.1.0
4
+ Summary: FastAPI, minus the slow. A fork of FastAPI that does less work per request, with the same API and test suite.
5
+ Author-Email: =?utf-8?q?Sebasti=C3=A1n_Ram=C3=ADrez?= <tiangolo@gmail.com>
6
+ Maintainer: 4thel00z
7
+ License-Expression: MIT
8
+ License-File: LICENSE
9
+ License-File: notslowapi/starlette/LICENSE.md
10
+ Classifier: Intended Audience :: Information Technology
11
+ Classifier: Intended Audience :: System Administrators
12
+ Classifier: Operating System :: OS Independent
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python
15
+ Classifier: Topic :: Internet
16
+ Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
17
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
18
+ Classifier: Topic :: Software Development :: Libraries
19
+ Classifier: Topic :: Software Development
20
+ Classifier: Typing :: Typed
21
+ Classifier: Development Status :: 4 - Beta
22
+ Classifier: Environment :: Web Environment
23
+ Classifier: Framework :: AsyncIO
24
+ Classifier: Framework :: FastAPI
25
+ Classifier: Framework :: Pydantic
26
+ Classifier: Framework :: Pydantic :: 2
27
+ Classifier: Intended Audience :: Developers
28
+ Classifier: Programming Language :: Python :: 3 :: Only
29
+ Classifier: Programming Language :: Python :: 3.10
30
+ Classifier: Programming Language :: Python :: 3.11
31
+ Classifier: Programming Language :: Python :: 3.12
32
+ Classifier: Programming Language :: Python :: 3.13
33
+ Classifier: Programming Language :: Python :: 3.14
34
+ Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
35
+ Classifier: Topic :: Internet :: WWW/HTTP
36
+ Project-URL: Homepage, https://notslowapi.com
37
+ Project-URL: Documentation, https://notslowapi.com/docs/
38
+ Project-URL: Benchmarks, https://notslowapi.com/benchmarks/
39
+ Project-URL: Repository, https://github.com/4thel00z/notslowapi
40
+ Project-URL: Issues, https://github.com/4thel00z/notslowapi/issues
41
+ Project-URL: Changelog, https://github.com/4thel00z/notslowapi/releases
42
+ Requires-Python: >=3.10
43
+ Requires-Dist: anyio<5,>=3.6.2
44
+ Requires-Dist: pydantic>=2.9.0
45
+ Requires-Dist: typing-extensions>=4.8.0
46
+ Requires-Dist: typing-inspection>=0.4.2
47
+ Requires-Dist: annotated-doc>=0.0.2
48
+ Provides-Extra: granian
49
+ Requires-Dist: granian>=2.0; extra == "granian"
50
+ Provides-Extra: standard
51
+ Requires-Dist: httpx<1.0.0,>=0.23.0; extra == "standard"
52
+ Requires-Dist: jinja2>=3.1.5; extra == "standard"
53
+ Requires-Dist: python-multipart>=0.0.18; extra == "standard"
54
+ Requires-Dist: email-validator>=2.0.0; extra == "standard"
55
+ Requires-Dist: uvicorn[standard]>=0.12.0; extra == "standard"
56
+ Requires-Dist: pydantic-settings>=2.0.0; extra == "standard"
57
+ Requires-Dist: pydantic-extra-types>=2.0.0; extra == "standard"
58
+ Provides-Extra: all
59
+ Requires-Dist: httpx<1.0.0,>=0.23.0; extra == "all"
60
+ Requires-Dist: jinja2>=3.1.5; extra == "all"
61
+ Requires-Dist: python-multipart>=0.0.18; extra == "all"
62
+ Requires-Dist: itsdangerous>=1.1.0; extra == "all"
63
+ Requires-Dist: pyyaml>=5.3.1; extra == "all"
64
+ Requires-Dist: email-validator>=2.0.0; extra == "all"
65
+ Requires-Dist: uvicorn[standard]>=0.12.0; extra == "all"
66
+ Requires-Dist: pydantic-settings>=2.0.0; extra == "all"
67
+ Requires-Dist: pydantic-extra-types>=2.0.0; extra == "all"
68
+ Description-Content-Type: text/markdown
69
+
70
+ <p align="center">
71
+ <a href="https://notslowapi.com"><img src="https://raw.githubusercontent.com/4thel00z/notslowapi/master/site/landing/assets/logo.svg" alt="notslowapi" width="360"></a>
72
+ </p>
73
+
74
+ <p align="center"><strong>FastAPI, minus the slow.</strong></p>
75
+
76
+ <p align="center">A fork of FastAPI 0.141.1 that does less work per request: the same public API and test suite, with the plain JSON route down from 31.2 to 18.3 µs on uvicorn and 9.1 µs on granian.</p>
77
+
78
+ <p align="center">
79
+ <a href="https://pypi.org/project/notslowapi"><img src="https://img.shields.io/pypi/v/notslowapi" alt="PyPI version"></a>
80
+ <a href="https://pypi.org/project/notslowapi"><img src="https://img.shields.io/pypi/pyversions/notslowapi" alt="Python versions"></a>
81
+ <a href="https://github.com/4thel00z/notslowapi/actions/workflows/ci.yml"><img src="https://github.com/4thel00z/notslowapi/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
82
+ </p>
83
+
84
+ **Site**: [https://notslowapi.com](https://notslowapi.com)
85
+
86
+ **Docs**: [https://notslowapi.com/docs/](https://notslowapi.com/docs/)
87
+
88
+ **Source**: [https://github.com/4thel00z/notslowapi](https://github.com/4thel00z/notslowapi)
89
+
90
+ ## Install
91
+
92
+ ```console
93
+ uv add notslowapi[granian]
94
+ ```
95
+
96
+ ```console
97
+ pip install "notslowapi[granian]"
98
+ ```
99
+
100
+ Python 3.10 to 3.14 and `pydantic>=2.9.0`. Pydantic v1 is not supported. The base install brings no ASGI server; the `granian` extra adds `granian>=2.0`. The `standard` extra is FastAPI's and pulls the same set upstream does. Nothing is installed under the `fastapi` or `starlette` names, and existing installs of those packages are left alone.
101
+
102
+ ## Switch
103
+
104
+ ```python
105
+ from notslowapi import FastAPI
106
+ ```
107
+
108
+ Replace the package name `fastapi` with `notslowapi` in every import. The modules upstream exposes under `fastapi.*` exist under `notslowapi.*`: `responses`, `requests`, `middleware`, `security`, `openapi`, `encoders`, `exceptions`, `background`, `staticfiles`, `templating`, `testclient`, `websockets`, `sse`, `status`.
109
+
110
+ ## Run
111
+
112
+ ```console
113
+ granian --interface asgi --workers 1 --loop uvloop myapp:app
114
+ ```
115
+
116
+ `myapp:app` is the module path and attribute of your `FastAPI` instance. granian's I/O runs on Rust threads alongside the Python thread, so the framework's Python is the only thing left on the critical path. On a bare ASGI callable the server alone costs 7.8 µs per request under granian against 13.5 µs under uvicorn, and the notslowapi route adds 1.3 µs on top of that under granian against 4.8 µs under uvicorn.
117
+
118
+ On uvicorn, install `uvicorn[standard]` for uvloop and httptools (18.3 µs on the plain route against 64.0 µs on asyncio and h11) and run:
119
+
120
+ ```console
121
+ uvicorn myapp:app --loop uvloop --http httptools --no-proxy-headers --no-server-header --no-date-header
122
+ ```
123
+
124
+ Leave `--proxy-headers` on if a proxy in front of you sets `X-Forwarded-*` headers and your app reads them.
125
+
126
+ ## Numbers
127
+
128
+ One core (Apple M3 Pro, Python 3.13), 64 keep-alive connections, median of 3 x 5 s oha runs, one worker. The first column is upstream FastAPI 0.141.1 on uvicorn at the start of the work; the other two are notslowapi 0.1.0. Raw files: `bench/baseline/results_ladder_v1.json` and `results_ladder_v3.json` in the repository.
129
+
130
+ | route | day one, uvicorn (FastAPI 0.141.1) | notslowapi, uvicorn | notslowapi, granian |
131
+ |---|---|---|---|
132
+ | raw ASGI app, fixed bytes (server floor) | 13.7 µs, 73,040 req/s | 13.5 µs, 74,172 req/s | 7.8 µs, 128,801 req/s |
133
+ | plain JSON route | 31.2 µs, 32,033 req/s | 18.3 µs, 54,793 req/s | 9.1 µs, 110,154 req/s |
134
+ | int path + str query param | 57.0 µs, 17,531 req/s | 24.2 µs, 41,405 req/s | 14.3 µs, 69,742 req/s |
135
+ | pydantic body + response_model | 52.1 µs, 19,212 req/s | 26.1 µs, 38,295 req/s | 20.1 µs, 49,777 req/s |
136
+ | 50 routes via include_router | 92.2 µs, 10,800 req/s * | 26.3 µs, 37,968 req/s | 17.3 µs, 57,864 req/s |
137
+
138
+ \* This rung did not exist in `results_ladder_v1.json`. The 92.2 µs is the before-run of the include_router change (`bench/baseline/results_fix11_before.json`), measured on a tree that already had the first ten changes, so it understates the day-one gap.
139
+
140
+ The changes are inside the framework: parameter extraction, the dependency solver, routing, exception handling and response encoding. Each is one commit with a before and after measurement, listed at [What changed](https://notslowapi.com/docs/what-changed/). The method, the tools and the raw files are at [Benchmark method](https://notslowapi.com/docs/benchmarks-method/); the full tables are at [notslowapi.com/benchmarks/](https://notslowapi.com/benchmarks/).
141
+
142
+ ## Compatibility
143
+
144
+ notslowapi 0.1.0 has the public API of FastAPI 0.141.1: classes, functions, parameters and behaviors are upstream's, and the changes are internal. The check is the upstream test suite with its imports rewritten: 3,335 FastAPI tests plus 1,154 Starlette tests, 4,489 pass, with the same 8 environmental failures before and after every change. The modified Starlette 1.6.0 ships inside the package as `notslowapi.starlette` and nothing is installed under the `starlette` name, so code that imports `starlette.*` directly needs upstream Starlette installed and gets upstream behavior for those objects.
145
+
146
+ ```python
147
+ from notslowapi.starlette.middleware.base import BaseHTTPMiddleware
148
+ from notslowapi.starlette.responses import Response
149
+ ```
150
+
151
+ Two observable differences: `AsyncExitStackMiddleware` is importable but no longer installed, so the scope no longer carries `fastapi_middleware_astack`, and `solve_dependencies` raises `RuntimeError` instead of failing an `assert` when a `yield` dependency runs without an exit stack. Details at [Compatibility](https://notslowapi.com/docs/compatibility/).
152
+
153
+ ## Reporting a regression
154
+
155
+ Open an issue at [github.com/4thel00z/notslowapi/issues](https://github.com/4thel00z/notslowapi/issues) with the notslowapi version, a minimal app, and what FastAPI 0.141.1 does with the same code. For a performance regression, name the machine, Python version and server, and attach `bench/out/results.json` from a before and an after run of the ladder.
156
+
157
+ ## Credits
158
+
159
+ notslowapi is built from [FastAPI](https://fastapi.tiangolo.com) by Sebastián Ramírez and [Starlette](https://starlette.dev) by Encode. The code is theirs; this fork changes how much of it runs per request. FastAPI's documentation applies to notslowapi with the package name swapped.
160
+
161
+ ## License
162
+
163
+ The FastAPI code is MIT licensed, copyright 2018 Sebastián Ramírez (`LICENSE`). The vendored Starlette is BSD-3-Clause, copyright 2018 Encode OSS Ltd (`notslowapi/starlette/LICENSE.md`). Both files ship in the wheel; the package metadata declares `MIT`.
@@ -0,0 +1,94 @@
1
+ <p align="center">
2
+ <a href="https://notslowapi.com"><img src="https://raw.githubusercontent.com/4thel00z/notslowapi/master/site/landing/assets/logo.svg" alt="notslowapi" width="360"></a>
3
+ </p>
4
+
5
+ <p align="center"><strong>FastAPI, minus the slow.</strong></p>
6
+
7
+ <p align="center">A fork of FastAPI 0.141.1 that does less work per request: the same public API and test suite, with the plain JSON route down from 31.2 to 18.3 µs on uvicorn and 9.1 µs on granian.</p>
8
+
9
+ <p align="center">
10
+ <a href="https://pypi.org/project/notslowapi"><img src="https://img.shields.io/pypi/v/notslowapi" alt="PyPI version"></a>
11
+ <a href="https://pypi.org/project/notslowapi"><img src="https://img.shields.io/pypi/pyversions/notslowapi" alt="Python versions"></a>
12
+ <a href="https://github.com/4thel00z/notslowapi/actions/workflows/ci.yml"><img src="https://github.com/4thel00z/notslowapi/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
13
+ </p>
14
+
15
+ **Site**: [https://notslowapi.com](https://notslowapi.com)
16
+
17
+ **Docs**: [https://notslowapi.com/docs/](https://notslowapi.com/docs/)
18
+
19
+ **Source**: [https://github.com/4thel00z/notslowapi](https://github.com/4thel00z/notslowapi)
20
+
21
+ ## Install
22
+
23
+ ```console
24
+ uv add notslowapi[granian]
25
+ ```
26
+
27
+ ```console
28
+ pip install "notslowapi[granian]"
29
+ ```
30
+
31
+ Python 3.10 to 3.14 and `pydantic>=2.9.0`. Pydantic v1 is not supported. The base install brings no ASGI server; the `granian` extra adds `granian>=2.0`. The `standard` extra is FastAPI's and pulls the same set upstream does. Nothing is installed under the `fastapi` or `starlette` names, and existing installs of those packages are left alone.
32
+
33
+ ## Switch
34
+
35
+ ```python
36
+ from notslowapi import FastAPI
37
+ ```
38
+
39
+ Replace the package name `fastapi` with `notslowapi` in every import. The modules upstream exposes under `fastapi.*` exist under `notslowapi.*`: `responses`, `requests`, `middleware`, `security`, `openapi`, `encoders`, `exceptions`, `background`, `staticfiles`, `templating`, `testclient`, `websockets`, `sse`, `status`.
40
+
41
+ ## Run
42
+
43
+ ```console
44
+ granian --interface asgi --workers 1 --loop uvloop myapp:app
45
+ ```
46
+
47
+ `myapp:app` is the module path and attribute of your `FastAPI` instance. granian's I/O runs on Rust threads alongside the Python thread, so the framework's Python is the only thing left on the critical path. On a bare ASGI callable the server alone costs 7.8 µs per request under granian against 13.5 µs under uvicorn, and the notslowapi route adds 1.3 µs on top of that under granian against 4.8 µs under uvicorn.
48
+
49
+ On uvicorn, install `uvicorn[standard]` for uvloop and httptools (18.3 µs on the plain route against 64.0 µs on asyncio and h11) and run:
50
+
51
+ ```console
52
+ uvicorn myapp:app --loop uvloop --http httptools --no-proxy-headers --no-server-header --no-date-header
53
+ ```
54
+
55
+ Leave `--proxy-headers` on if a proxy in front of you sets `X-Forwarded-*` headers and your app reads them.
56
+
57
+ ## Numbers
58
+
59
+ One core (Apple M3 Pro, Python 3.13), 64 keep-alive connections, median of 3 x 5 s oha runs, one worker. The first column is upstream FastAPI 0.141.1 on uvicorn at the start of the work; the other two are notslowapi 0.1.0. Raw files: `bench/baseline/results_ladder_v1.json` and `results_ladder_v3.json` in the repository.
60
+
61
+ | route | day one, uvicorn (FastAPI 0.141.1) | notslowapi, uvicorn | notslowapi, granian |
62
+ |---|---|---|---|
63
+ | raw ASGI app, fixed bytes (server floor) | 13.7 µs, 73,040 req/s | 13.5 µs, 74,172 req/s | 7.8 µs, 128,801 req/s |
64
+ | plain JSON route | 31.2 µs, 32,033 req/s | 18.3 µs, 54,793 req/s | 9.1 µs, 110,154 req/s |
65
+ | int path + str query param | 57.0 µs, 17,531 req/s | 24.2 µs, 41,405 req/s | 14.3 µs, 69,742 req/s |
66
+ | pydantic body + response_model | 52.1 µs, 19,212 req/s | 26.1 µs, 38,295 req/s | 20.1 µs, 49,777 req/s |
67
+ | 50 routes via include_router | 92.2 µs, 10,800 req/s * | 26.3 µs, 37,968 req/s | 17.3 µs, 57,864 req/s |
68
+
69
+ \* This rung did not exist in `results_ladder_v1.json`. The 92.2 µs is the before-run of the include_router change (`bench/baseline/results_fix11_before.json`), measured on a tree that already had the first ten changes, so it understates the day-one gap.
70
+
71
+ The changes are inside the framework: parameter extraction, the dependency solver, routing, exception handling and response encoding. Each is one commit with a before and after measurement, listed at [What changed](https://notslowapi.com/docs/what-changed/). The method, the tools and the raw files are at [Benchmark method](https://notslowapi.com/docs/benchmarks-method/); the full tables are at [notslowapi.com/benchmarks/](https://notslowapi.com/benchmarks/).
72
+
73
+ ## Compatibility
74
+
75
+ notslowapi 0.1.0 has the public API of FastAPI 0.141.1: classes, functions, parameters and behaviors are upstream's, and the changes are internal. The check is the upstream test suite with its imports rewritten: 3,335 FastAPI tests plus 1,154 Starlette tests, 4,489 pass, with the same 8 environmental failures before and after every change. The modified Starlette 1.6.0 ships inside the package as `notslowapi.starlette` and nothing is installed under the `starlette` name, so code that imports `starlette.*` directly needs upstream Starlette installed and gets upstream behavior for those objects.
76
+
77
+ ```python
78
+ from notslowapi.starlette.middleware.base import BaseHTTPMiddleware
79
+ from notslowapi.starlette.responses import Response
80
+ ```
81
+
82
+ Two observable differences: `AsyncExitStackMiddleware` is importable but no longer installed, so the scope no longer carries `fastapi_middleware_astack`, and `solve_dependencies` raises `RuntimeError` instead of failing an `assert` when a `yield` dependency runs without an exit stack. Details at [Compatibility](https://notslowapi.com/docs/compatibility/).
83
+
84
+ ## Reporting a regression
85
+
86
+ Open an issue at [github.com/4thel00z/notslowapi/issues](https://github.com/4thel00z/notslowapi/issues) with the notslowapi version, a minimal app, and what FastAPI 0.141.1 does with the same code. For a performance regression, name the machine, Python version and server, and attach `bench/out/results.json` from a before and an after run of the ladder.
87
+
88
+ ## Credits
89
+
90
+ notslowapi is built from [FastAPI](https://fastapi.tiangolo.com) by Sebastián Ramírez and [Starlette](https://starlette.dev) by Encode. The code is theirs; this fork changes how much of it runs per request. FastAPI's documentation applies to notslowapi with the package name swapped.
91
+
92
+ ## License
93
+
94
+ The FastAPI code is MIT licensed, copyright 2018 Sebastián Ramírez (`LICENSE`). The vendored Starlette is BSD-3-Clause, copyright 2018 Encode OSS Ltd (`notslowapi/starlette/LICENSE.md`). Both files ship in the wheel; the package metadata declares `MIT`.
@@ -0,0 +1,22 @@
1
+ from notslowapi import FastAPI
2
+ from notslowapi.responses import JSONResponse
3
+ from pydantic import BaseModel
4
+
5
+
6
+ class Item(BaseModel):
7
+ id: str
8
+ value: str
9
+
10
+
11
+ class Message(BaseModel):
12
+ message: str
13
+
14
+
15
+ app = FastAPI()
16
+
17
+
18
+ @app.get("/items/{item_id}", response_model=Item, responses={404: {"model": Message}})
19
+ async def read_item(item_id: str):
20
+ if item_id == "foo":
21
+ return {"id": "foo", "value": "there goes my hero"}
22
+ return JSONResponse(status_code=404, content={"message": "Item not found"})
@@ -0,0 +1,28 @@
1
+ from notslowapi import FastAPI
2
+ from notslowapi.responses import FileResponse
3
+ from pydantic import BaseModel
4
+
5
+
6
+ class Item(BaseModel):
7
+ id: str
8
+ value: str
9
+
10
+
11
+ app = FastAPI()
12
+
13
+
14
+ @app.get(
15
+ "/items/{item_id}",
16
+ response_model=Item,
17
+ responses={
18
+ 200: {
19
+ "content": {"image/png": {}},
20
+ "description": "Return the JSON item or an image.",
21
+ }
22
+ },
23
+ )
24
+ async def read_item(item_id: str, img: bool | None = None):
25
+ if img:
26
+ return FileResponse("image.png", media_type="image/png")
27
+ else:
28
+ return {"id": "foo", "value": "there goes my hero"}
@@ -0,0 +1,37 @@
1
+ from notslowapi import FastAPI
2
+ from notslowapi.responses import JSONResponse
3
+ from pydantic import BaseModel
4
+
5
+
6
+ class Item(BaseModel):
7
+ id: str
8
+ value: str
9
+
10
+
11
+ class Message(BaseModel):
12
+ message: str
13
+
14
+
15
+ app = FastAPI()
16
+
17
+
18
+ @app.get(
19
+ "/items/{item_id}",
20
+ response_model=Item,
21
+ responses={
22
+ 404: {"model": Message, "description": "The item was not found"},
23
+ 200: {
24
+ "description": "Item requested by ID",
25
+ "content": {
26
+ "application/json": {
27
+ "example": {"id": "bar", "value": "The bar tenders"}
28
+ }
29
+ },
30
+ },
31
+ },
32
+ )
33
+ async def read_item(item_id: str):
34
+ if item_id == "foo":
35
+ return {"id": "foo", "value": "there goes my hero"}
36
+ else:
37
+ return JSONResponse(status_code=404, content={"message": "Item not found"})
@@ -0,0 +1,30 @@
1
+ from notslowapi import FastAPI
2
+ from notslowapi.responses import FileResponse
3
+ from pydantic import BaseModel
4
+
5
+
6
+ class Item(BaseModel):
7
+ id: str
8
+ value: str
9
+
10
+
11
+ responses = {
12
+ 404: {"description": "Item not found"},
13
+ 302: {"description": "The item was moved"},
14
+ 403: {"description": "Not enough privileges"},
15
+ }
16
+
17
+
18
+ app = FastAPI()
19
+
20
+
21
+ @app.get(
22
+ "/items/{item_id}",
23
+ response_model=Item,
24
+ responses={**responses, 200: {"content": {"image/png": {}}}},
25
+ )
26
+ async def read_item(item_id: str, img: bool | None = None):
27
+ if img:
28
+ return FileResponse("image.png", media_type="image/png")
29
+ else:
30
+ return {"id": "foo", "value": "there goes my hero"}
@@ -0,0 +1,25 @@
1
+ from typing import Annotated
2
+
3
+ from notslowapi import Body, FastAPI, status
4
+ from notslowapi.responses import JSONResponse
5
+
6
+ app = FastAPI()
7
+
8
+ items = {"foo": {"name": "Fighters", "size": 6}, "bar": {"name": "Tenders", "size": 3}}
9
+
10
+
11
+ @app.put("/items/{item_id}")
12
+ async def upsert_item(
13
+ item_id: str,
14
+ name: Annotated[str | None, Body()] = None,
15
+ size: Annotated[int | None, Body()] = None,
16
+ ):
17
+ if item_id in items:
18
+ item = items[item_id]
19
+ item["name"] = name
20
+ item["size"] = size
21
+ return item
22
+ else:
23
+ item = {"name": name, "size": size}
24
+ items[item_id] = item
25
+ return JSONResponse(status_code=status.HTTP_201_CREATED, content=item)
@@ -0,0 +1,23 @@
1
+ from notslowapi import Body, FastAPI, status
2
+ from notslowapi.responses import JSONResponse
3
+
4
+ app = FastAPI()
5
+
6
+ items = {"foo": {"name": "Fighters", "size": 6}, "bar": {"name": "Tenders", "size": 3}}
7
+
8
+
9
+ @app.put("/items/{item_id}")
10
+ async def upsert_item(
11
+ item_id: str,
12
+ name: str | None = Body(default=None),
13
+ size: int | None = Body(default=None),
14
+ ):
15
+ if item_id in items:
16
+ item = items[item_id]
17
+ item["name"] = name
18
+ item["size"] = size
19
+ return item
20
+ else:
21
+ item = {"name": name, "size": size}
22
+ items[item_id] = item
23
+ return JSONResponse(status_code=status.HTTP_201_CREATED, content=item)
@@ -0,0 +1,11 @@
1
+ from notslowapi import FastAPI
2
+ from notslowapi.middleware.httpsredirect import HTTPSRedirectMiddleware
3
+
4
+ app = FastAPI()
5
+
6
+ app.add_middleware(HTTPSRedirectMiddleware)
7
+
8
+
9
+ @app.get("/")
10
+ async def main():
11
+ return {"message": "Hello World"}
@@ -0,0 +1,13 @@
1
+ from notslowapi import FastAPI
2
+ from notslowapi.middleware.trustedhost import TrustedHostMiddleware
3
+
4
+ app = FastAPI()
5
+
6
+ app.add_middleware(
7
+ TrustedHostMiddleware, allowed_hosts=["example.com", "*.example.com"]
8
+ )
9
+
10
+
11
+ @app.get("/")
12
+ async def main():
13
+ return {"message": "Hello World"}
@@ -0,0 +1,11 @@
1
+ from notslowapi import FastAPI
2
+ from notslowapi.middleware.gzip import GZipMiddleware
3
+
4
+ app = FastAPI()
5
+
6
+ app.add_middleware(GZipMiddleware, minimum_size=1000, compresslevel=5)
7
+
8
+
9
+ @app.get("/")
10
+ async def main():
11
+ return "somebigcontent"
File without changes
@@ -0,0 +1,8 @@
1
+ from notslowapi import FastAPI
2
+
3
+ app = FastAPI()
4
+
5
+
6
+ @app.get("/")
7
+ async def read_main():
8
+ return {"msg": "Hello World"}
@@ -0,0 +1,11 @@
1
+ from notslowapi.testclient import TestClient
2
+
3
+ from .main import app
4
+
5
+ client = TestClient(app)
6
+
7
+
8
+ def test_read_main():
9
+ response = client.get("/")
10
+ assert response.status_code == 200
11
+ assert response.json() == {"msg": "Hello World"}
@@ -0,0 +1,38 @@
1
+ from typing import Annotated
2
+
3
+ from notslowapi import FastAPI, Header, HTTPException
4
+ from pydantic import BaseModel
5
+
6
+ fake_secret_token = "coneofsilence"
7
+
8
+ fake_db = {
9
+ "foo": {"id": "foo", "title": "Foo", "description": "There goes my hero"},
10
+ "bar": {"id": "bar", "title": "Bar", "description": "The bartenders"},
11
+ }
12
+
13
+ app = FastAPI()
14
+
15
+
16
+ class Item(BaseModel):
17
+ id: str
18
+ title: str
19
+ description: str | None = None
20
+
21
+
22
+ @app.get("/items/{item_id}", response_model=Item)
23
+ async def read_main(item_id: str, x_token: Annotated[str, Header()]):
24
+ if x_token != fake_secret_token:
25
+ raise HTTPException(status_code=400, detail="Invalid X-Token header")
26
+ if item_id not in fake_db:
27
+ raise HTTPException(status_code=404, detail="Item not found")
28
+ return fake_db[item_id]
29
+
30
+
31
+ @app.post("/items/")
32
+ async def create_item(item: Item, x_token: Annotated[str, Header()]) -> Item:
33
+ if x_token != fake_secret_token:
34
+ raise HTTPException(status_code=400, detail="Invalid X-Token header")
35
+ if item.id in fake_db:
36
+ raise HTTPException(status_code=409, detail="Item already exists")
37
+ fake_db[item.id] = item.model_dump()
38
+ return item
@@ -0,0 +1,65 @@
1
+ from notslowapi.testclient import TestClient
2
+
3
+ from .main import app
4
+
5
+ client = TestClient(app)
6
+
7
+
8
+ def test_read_item():
9
+ response = client.get("/items/foo", headers={"X-Token": "coneofsilence"})
10
+ assert response.status_code == 200
11
+ assert response.json() == {
12
+ "id": "foo",
13
+ "title": "Foo",
14
+ "description": "There goes my hero",
15
+ }
16
+
17
+
18
+ def test_read_item_bad_token():
19
+ response = client.get("/items/foo", headers={"X-Token": "hailhydra"})
20
+ assert response.status_code == 400
21
+ assert response.json() == {"detail": "Invalid X-Token header"}
22
+
23
+
24
+ def test_read_nonexistent_item():
25
+ response = client.get("/items/baz", headers={"X-Token": "coneofsilence"})
26
+ assert response.status_code == 404
27
+ assert response.json() == {"detail": "Item not found"}
28
+
29
+
30
+ def test_create_item():
31
+ response = client.post(
32
+ "/items/",
33
+ headers={"X-Token": "coneofsilence"},
34
+ json={"id": "foobar", "title": "Foo Bar", "description": "The Foo Barters"},
35
+ )
36
+ assert response.status_code == 200
37
+ assert response.json() == {
38
+ "id": "foobar",
39
+ "title": "Foo Bar",
40
+ "description": "The Foo Barters",
41
+ }
42
+
43
+
44
+ def test_create_item_bad_token():
45
+ response = client.post(
46
+ "/items/",
47
+ headers={"X-Token": "hailhydra"},
48
+ json={"id": "bazz", "title": "Bazz", "description": "Drop the bazz"},
49
+ )
50
+ assert response.status_code == 400
51
+ assert response.json() == {"detail": "Invalid X-Token header"}
52
+
53
+
54
+ def test_create_existing_item():
55
+ response = client.post(
56
+ "/items/",
57
+ headers={"X-Token": "coneofsilence"},
58
+ json={
59
+ "id": "foo",
60
+ "title": "The Foo ID Stealers",
61
+ "description": "There goes my stealer",
62
+ },
63
+ )
64
+ assert response.status_code == 409
65
+ assert response.json() == {"detail": "Item already exists"}