Browse Source

Merge branch 'master' into bugfix/subapp-custom-openapi

pull/4657/head
Lorhan Sohaky 3 years ago
committed by GitHub
parent
commit
3f65720ef7
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      .github/actions/notify-translations/app/translations.yml
  2. 17
      .github/actions/people/app/main.py
  3. 4
      .github/workflows/test.yml
  4. 5
      README.md
  5. 6
      docs/az/mkdocs.yml
  6. 6
      docs/de/mkdocs.yml
  7. 409
      docs/en/data/github_sponsors.yml
  8. 210
      docs/en/data/people.yml
  9. 24
      docs/en/data/sponsors.yml
  10. 5
      docs/en/data/sponsors_badge.yml
  11. BIN
      docs/en/docs/img/sponsors/classiq-banner.png
  12. BIN
      docs/en/docs/img/sponsors/classiq.png
  13. BIN
      docs/en/docs/img/sponsors/exoflare.png
  14. BIN
      docs/en/docs/img/sponsors/fastapi-course-bundle-banner.png
  15. BIN
      docs/en/docs/img/sponsors/ines-course.jpg
  16. 39
      docs/en/docs/release-notes.md
  17. 4
      docs/en/docs/tutorial/handling-errors.md
  18. 6
      docs/en/mkdocs.yml
  19. 18
      docs/en/overrides/main.html
  20. 6
      docs/es/mkdocs.yml
  21. 468
      docs/fa/docs/index.md
  22. 135
      docs/fa/mkdocs.yml
  23. 0
      docs/fa/overrides/.gitignore
  24. 6
      docs/fr/mkdocs.yml
  25. 6
      docs/id/mkdocs.yml
  26. 6
      docs/it/mkdocs.yml
  27. 6
      docs/ja/mkdocs.yml
  28. 6
      docs/ko/mkdocs.yml
  29. 468
      docs/nl/docs/index.md
  30. 135
      docs/nl/mkdocs.yml
  31. 0
      docs/nl/overrides/.gitignore
  32. 6
      docs/pl/mkdocs.yml
  33. 6
      docs/pt/mkdocs.yml
  34. 6
      docs/ru/mkdocs.yml
  35. 6
      docs/sq/mkdocs.yml
  36. 6
      docs/tr/mkdocs.yml
  37. 6
      docs/uk/mkdocs.yml
  38. 6
      docs/zh/mkdocs.yml
  39. 2
      fastapi/__init__.py
  40. 4
      fastapi/openapi/docs.py
  41. 6
      fastapi/openapi/utils.py
  42. 2
      fastapi/routing.py
  43. 24
      pyproject.toml
  44. 2
      tests/test_additional_properties.py
  45. 2
      tests/test_additional_responses_custom_model_in_callback.py
  46. 2
      tests/test_additional_responses_default_validationerror.py
  47. 2
      tests/test_application.py
  48. 2
      tests/test_dependency_duplicates.py
  49. 2
      tests/test_extra_routes.py
  50. 2
      tests/test_filter_pydantic_sub_model.py
  51. 28
      tests/test_generate_unique_id_function.py
  52. 2
      tests/test_get_request_body.py
  53. 2
      tests/test_include_router_defaults_overrides.py
  54. 2
      tests/test_modules_same_name_body/test_main.py
  55. 2
      tests/test_multi_body_errors.py
  56. 2
      tests/test_multi_query_errors.py
  57. 2
      tests/test_param_in_path_and_dependency.py
  58. 2
      tests/test_param_include_in_schema.py
  59. 2
      tests/test_put_no_body.py
  60. 2
      tests/test_repeated_dependency_schema.py
  61. 2
      tests/test_schema_extra_examples.py
  62. 2
      tests/test_security_oauth2.py
  63. 2
      tests/test_security_oauth2_optional.py
  64. 2
      tests/test_security_oauth2_optional_description.py
  65. 2
      tests/test_starlette_exception.py
  66. 2
      tests/test_sub_callbacks.py
  67. 2
      tests/test_tuples.py
  68. 2
      tests/test_tutorial/test_additional_responses/test_tutorial001.py
  69. 2
      tests/test_tutorial/test_additional_responses/test_tutorial002.py
  70. 2
      tests/test_tutorial/test_additional_responses/test_tutorial003.py
  71. 2
      tests/test_tutorial/test_additional_responses/test_tutorial004.py
  72. 2
      tests/test_tutorial/test_async_sql_databases/test_tutorial001.py
  73. 2
      tests/test_tutorial/test_bigger_applications/test_main.py
  74. 2
      tests/test_tutorial/test_body/test_tutorial001.py
  75. 2
      tests/test_tutorial/test_body/test_tutorial001_py310.py
  76. 2
      tests/test_tutorial/test_body_fields/test_tutorial001.py
  77. 2
      tests/test_tutorial/test_body_fields/test_tutorial001_py310.py
  78. 2
      tests/test_tutorial/test_body_multiple_params/test_tutorial001.py
  79. 2
      tests/test_tutorial/test_body_multiple_params/test_tutorial001_py310.py
  80. 2
      tests/test_tutorial/test_body_multiple_params/test_tutorial003.py
  81. 2
      tests/test_tutorial/test_body_multiple_params/test_tutorial003_py310.py
  82. 2
      tests/test_tutorial/test_body_nested_models/test_tutorial009.py
  83. 2
      tests/test_tutorial/test_body_nested_models/test_tutorial009_py39.py
  84. 2
      tests/test_tutorial/test_body_updates/test_tutorial001.py
  85. 2
      tests/test_tutorial/test_body_updates/test_tutorial001_py310.py
  86. 2
      tests/test_tutorial/test_body_updates/test_tutorial001_py39.py
  87. 2
      tests/test_tutorial/test_cookie_params/test_tutorial001.py
  88. 2
      tests/test_tutorial/test_cookie_params/test_tutorial001_py310.py
  89. 2
      tests/test_tutorial/test_dataclasses/test_tutorial001.py
  90. 2
      tests/test_tutorial/test_dataclasses/test_tutorial003.py
  91. 2
      tests/test_tutorial/test_dependencies/test_tutorial001.py
  92. 2
      tests/test_tutorial/test_dependencies/test_tutorial001_py310.py
  93. 2
      tests/test_tutorial/test_dependencies/test_tutorial004.py
  94. 2
      tests/test_tutorial/test_dependencies/test_tutorial004_py310.py
  95. 2
      tests/test_tutorial/test_dependencies/test_tutorial006.py
  96. 2
      tests/test_tutorial/test_dependencies/test_tutorial012.py
  97. 2
      tests/test_tutorial/test_events/test_tutorial001.py
  98. 2
      tests/test_tutorial/test_extra_data_types/test_tutorial001.py
  99. 2
      tests/test_tutorial/test_extra_data_types/test_tutorial001_py310.py
  100. 2
      tests/test_tutorial/test_extra_models/test_tutorial003.py

1
.github/actions/notify-translations/app/translations.yml

@ -13,3 +13,4 @@ pl: 3169
de: 3716 de: 3716
id: 3717 id: 3717
az: 3994 az: 3994
nl: 4701

17
.github/actions/people/app/main.py

@ -501,9 +501,16 @@ if __name__ == "__main__":
github_sponsors_path = Path("./docs/en/data/github_sponsors.yml") github_sponsors_path = Path("./docs/en/data/github_sponsors.yml")
people_old_content = people_path.read_text(encoding="utf-8") people_old_content = people_path.read_text(encoding="utf-8")
github_sponsors_old_content = github_sponsors_path.read_text(encoding="utf-8") github_sponsors_old_content = github_sponsors_path.read_text(encoding="utf-8")
new_people_content = yaml.dump(people, sort_keys=False, width=200, allow_unicode=True) new_people_content = yaml.dump(
new_github_sponsors_content = yaml.dump(github_sponsors, sort_keys=False, width=200, allow_unicode=True) people, sort_keys=False, width=200, allow_unicode=True
if people_old_content == new_people_content and github_sponsors_old_content == new_github_sponsors_content: )
new_github_sponsors_content = yaml.dump(
github_sponsors, sort_keys=False, width=200, allow_unicode=True
)
if (
people_old_content == new_people_content
and github_sponsors_old_content == new_github_sponsors_content
):
logging.info("The FastAPI People data hasn't changed, finishing.") logging.info("The FastAPI People data hasn't changed, finishing.")
sys.exit(0) sys.exit(0)
people_path.write_text(new_people_content, encoding="utf-8") people_path.write_text(new_people_content, encoding="utf-8")
@ -517,7 +524,9 @@ if __name__ == "__main__":
logging.info(f"Creating a new branch {branch_name}") logging.info(f"Creating a new branch {branch_name}")
subprocess.run(["git", "checkout", "-b", branch_name], check=True) subprocess.run(["git", "checkout", "-b", branch_name], check=True)
logging.info("Adding updated file") logging.info("Adding updated file")
subprocess.run(["git", "add", str(people_path)], check=True) subprocess.run(
["git", "add", str(people_path), str(github_sponsors_path)], check=True
)
logging.info("Committing updated file") logging.info("Committing updated file")
message = "👥 Update FastAPI People" message = "👥 Update FastAPI People"
result = subprocess.run(["git", "commit", "-m", message], check=True) result = subprocess.run(["git", "commit", "-m", message], check=True)

4
.github/workflows/test.yml

@ -25,7 +25,7 @@ jobs:
id: cache id: cache
with: with:
path: ${{ env.pythonLocation }} path: ${{ env.pythonLocation }}
key: ${{ runner.os }}-python-${{ env.pythonLocation }}-${{ hashFiles('pyproject.toml') }}-test key: ${{ runner.os }}-python-${{ env.pythonLocation }}-${{ hashFiles('pyproject.toml') }}-test-v02
- name: Install Flit - name: Install Flit
if: steps.cache.outputs.cache-hit != 'true' if: steps.cache.outputs.cache-hit != 'true'
run: pip install flit run: pip install flit
@ -38,4 +38,4 @@ jobs:
- name: Test - name: Test
run: bash scripts/test.sh run: bash scripts/test.sh
- name: Upload coverage - name: Upload coverage
uses: codecov/codecov-action@v1 uses: codecov/codecov-action@v2

5
README.md

@ -49,14 +49,13 @@ The key features are:
<a href="https://bit.ly/2QSouzH" target="_blank" title="Jina: build neural search-as-a-service for any kind of data in just minutes."><img src="https://fastapi.tiangolo.com/img/sponsors/jina.svg"></a> <a href="https://bit.ly/2QSouzH" target="_blank" title="Jina: build neural search-as-a-service for any kind of data in just minutes."><img src="https://fastapi.tiangolo.com/img/sponsors/jina.svg"></a>
<a href="https://cryptapi.io/" target="_blank" title="CryptAPI: Your easy to use, secure and privacy oriented payment gateway."><img src="https://fastapi.tiangolo.com/img/sponsors/cryptapi.svg"></a> <a href="https://cryptapi.io/" target="_blank" title="CryptAPI: Your easy to use, secure and privacy oriented payment gateway."><img src="https://fastapi.tiangolo.com/img/sponsors/cryptapi.svg"></a>
<a href="https://www.dropbase.io/careers" target="_blank" title="Dropbase - seamlessly collect, clean, and centralize data."><img src="https://fastapi.tiangolo.com/img/sponsors/dropbase.svg"></a> <a href="https://classiq.link/n4s" target="_blank" title="Join the team building a new SaaS platform that will change the computing world"><img src="https://fastapi.tiangolo.com/img/sponsors/classiq.png"></a>
<a href="https://striveworks.us/careers?utm_source=fastapi&utm_medium=sponsor_banner&utm_campaign=feb_march#openings" target="_blank" title="https://striveworks.us/careers"><img src="https://fastapi.tiangolo.com/img/sponsors/striveworks.png"></a>
<a href="https://www.deta.sh/?ref=fastapi" target="_blank" title="The launchpad for all your (team's) ideas"><img src="https://fastapi.tiangolo.com/img/sponsors/deta.svg"></a> <a href="https://www.deta.sh/?ref=fastapi" target="_blank" title="The launchpad for all your (team's) ideas"><img src="https://fastapi.tiangolo.com/img/sponsors/deta.svg"></a>
<a href="https://www.investsuite.com/jobs" target="_blank" title="Wealthtech jobs with FastAPI"><img src="https://fastapi.tiangolo.com/img/sponsors/investsuite.svg"></a> <a href="https://www.investsuite.com/jobs" target="_blank" title="Wealthtech jobs with FastAPI"><img src="https://fastapi.tiangolo.com/img/sponsors/investsuite.svg"></a>
<a href="https://www.vim.so/?utm_source=FastAPI" target="_blank" title="We help you master vim with interactive exercises"><img src="https://fastapi.tiangolo.com/img/sponsors/vimso.png"></a>
<a href="https://talkpython.fm/fastapi-sponsor" target="_blank" title="FastAPI video courses on demand from people you trust"><img src="https://fastapi.tiangolo.com/img/sponsors/talkpython.png"></a> <a href="https://talkpython.fm/fastapi-sponsor" target="_blank" title="FastAPI video courses on demand from people you trust"><img src="https://fastapi.tiangolo.com/img/sponsors/talkpython.png"></a>
<a href="https://testdriven.io/courses/tdd-fastapi/" target="_blank" title="Learn to build high-quality web apps with best practices"><img src="https://fastapi.tiangolo.com/img/sponsors/testdriven.svg"></a> <a href="https://testdriven.io/courses/tdd-fastapi/" target="_blank" title="Learn to build high-quality web apps with best practices"><img src="https://fastapi.tiangolo.com/img/sponsors/testdriven.svg"></a>
<a href="https://github.com/deepset-ai/haystack/" target="_blank" title="Build powerful search from composable, open source building blocks"><img src="https://fastapi.tiangolo.com/img/sponsors/haystack-fastapi.svg"></a> <a href="https://github.com/deepset-ai/haystack/" target="_blank" title="Build powerful search from composable, open source building blocks"><img src="https://fastapi.tiangolo.com/img/sponsors/haystack-fastapi.svg"></a>
<a href="https://www.udemy.com/course/fastapi-rest/" target="_blank" title="Learn FastAPI by building a complete project. Extend your knowledge on advanced web development-AWS, Payments, Emails."><img src="https://fastapi.tiangolo.com/img/sponsors/ines-course.jpg"></a>
<!-- /sponsors --> <!-- /sponsors -->

6
docs/az/mkdocs.yml

@ -40,11 +40,13 @@ nav:
- az: /az/ - az: /az/
- de: /de/ - de: /de/
- es: /es/ - es: /es/
- fa: /fa/
- fr: /fr/ - fr: /fr/
- id: /id/ - id: /id/
- it: /it/ - it: /it/
- ja: /ja/ - ja: /ja/
- ko: /ko/ - ko: /ko/
- nl: /nl/
- pl: /pl/ - pl: /pl/
- pt: /pt/ - pt: /pt/
- ru: /ru/ - ru: /ru/
@ -97,6 +99,8 @@ extra:
name: de name: de
- link: /es/ - link: /es/
name: es - español name: es - español
- link: /fa/
name: fa
- link: /fr/ - link: /fr/
name: fr - français name: fr - français
- link: /id/ - link: /id/
@ -107,6 +111,8 @@ extra:
name: ja - 日本語 name: ja - 日本語
- link: /ko/ - link: /ko/
name: ko - 한국어 name: ko - 한국어
- link: /nl/
name: nl
- link: /pl/ - link: /pl/
name: pl name: pl
- link: /pt/ - link: /pt/

6
docs/de/mkdocs.yml

@ -40,11 +40,13 @@ nav:
- az: /az/ - az: /az/
- de: /de/ - de: /de/
- es: /es/ - es: /es/
- fa: /fa/
- fr: /fr/ - fr: /fr/
- id: /id/ - id: /id/
- it: /it/ - it: /it/
- ja: /ja/ - ja: /ja/
- ko: /ko/ - ko: /ko/
- nl: /nl/
- pl: /pl/ - pl: /pl/
- pt: /pt/ - pt: /pt/
- ru: /ru/ - ru: /ru/
@ -98,6 +100,8 @@ extra:
name: de name: de
- link: /es/ - link: /es/
name: es - español name: es - español
- link: /fa/
name: fa
- link: /fr/ - link: /fr/
name: fr - français name: fr - français
- link: /id/ - link: /id/
@ -108,6 +112,8 @@ extra:
name: ja - 日本語 name: ja - 日本語
- link: /ko/ - link: /ko/
name: ko - 한국어 name: ko - 한국어
- link: /nl/
name: nl
- link: /pl/ - link: /pl/
name: pl name: pl
- link: /pt/ - link: /pt/

409
docs/en/data/github_sponsors.yml

@ -1,40 +1,61 @@
sponsors: sponsors:
- - login: jina-ai - - login: cryptapi
avatarUrl: https://avatars.githubusercontent.com/u/44925437?u=61369138589bc7fee6c417f3fbd50fbd38286cc4&v=4
url: https://github.com/cryptapi
- login: jina-ai
avatarUrl: https://avatars.githubusercontent.com/u/60539444?v=4 avatarUrl: https://avatars.githubusercontent.com/u/60539444?v=4
url: https://github.com/jina-ai url: https://github.com/jina-ai
- - login: InesIvanova
avatarUrl: https://avatars.githubusercontent.com/u/22920417?u=409882ec1df6dbd77455788bb383a8de223dbf6f&v=4
url: https://github.com/InesIvanova
- - login: chaserowbotham
avatarUrl: https://avatars.githubusercontent.com/u/97751084?v=4
url: https://github.com/chaserowbotham
- - login: mikeckennedy - - login: mikeckennedy
avatarUrl: https://avatars.githubusercontent.com/u/2035561?v=4 avatarUrl: https://avatars.githubusercontent.com/u/2035561?u=1bb18268bcd4d9249e1f783a063c27df9a84c05b&v=4
url: https://github.com/mikeckennedy url: https://github.com/mikeckennedy
- login: RodneyU215
avatarUrl: https://avatars.githubusercontent.com/u/3329665?u=ec6a9adf8e7e8e306eed7d49687c398608d1604f&v=4
url: https://github.com/RodneyU215
- login: Trivie - login: Trivie
avatarUrl: https://avatars.githubusercontent.com/u/8161763?v=4 avatarUrl: https://avatars.githubusercontent.com/u/8161763?v=4
url: https://github.com/Trivie url: https://github.com/Trivie
- login: deta - login: deta
avatarUrl: https://avatars.githubusercontent.com/u/47275976?v=4 avatarUrl: https://avatars.githubusercontent.com/u/47275976?v=4
url: https://github.com/deta url: https://github.com/deta
- login: deepset-ai
avatarUrl: https://avatars.githubusercontent.com/u/51827949?v=4
url: https://github.com/deepset-ai
- login: investsuite - login: investsuite
avatarUrl: https://avatars.githubusercontent.com/u/73833632?v=4 avatarUrl: https://avatars.githubusercontent.com/u/73833632?v=4
url: https://github.com/investsuite url: https://github.com/investsuite
- login: vimsoHQ - - login: qaas
avatarUrl: https://avatars.githubusercontent.com/u/77627231?v=4
url: https://github.com/vimsoHQ
- - login: newrelic
avatarUrl: https://avatars.githubusercontent.com/u/31739?v=4
url: https://github.com/newrelic
- login: qaas
avatarUrl: https://avatars.githubusercontent.com/u/8503759?u=10a6b4391ad6ab4cf9487ce54e3fcb61322d1efc&v=4 avatarUrl: https://avatars.githubusercontent.com/u/8503759?u=10a6b4391ad6ab4cf9487ce54e3fcb61322d1efc&v=4
url: https://github.com/qaas url: https://github.com/qaas
- login: xoflare
avatarUrl: https://avatars.githubusercontent.com/u/74335107?v=4
url: https://github.com/xoflare
- login: Striveworks
avatarUrl: https://avatars.githubusercontent.com/u/45523576?v=4
url: https://github.com/Striveworks
- login: BoostryJP
avatarUrl: https://avatars.githubusercontent.com/u/57932412?v=4
url: https://github.com/BoostryJP
- - login: johnadjei - - login: johnadjei
avatarUrl: https://avatars.githubusercontent.com/u/767860?v=4 avatarUrl: https://avatars.githubusercontent.com/u/767860?v=4
url: https://github.com/johnadjei url: https://github.com/johnadjei
- login: HiredScore
avatarUrl: https://avatars.githubusercontent.com/u/3908850?v=4
url: https://github.com/HiredScore
- login: spackle0
avatarUrl: https://avatars.githubusercontent.com/u/6148423?u=750e21b7366c0de69c305a8bcda1365d921ae477&v=4
url: https://github.com/spackle0
- login: wdwinslow - login: wdwinslow
avatarUrl: https://avatars.githubusercontent.com/u/11562137?u=dc01daafb354135603a263729e3d26d939c0c452&v=4 avatarUrl: https://avatars.githubusercontent.com/u/11562137?u=dc01daafb354135603a263729e3d26d939c0c452&v=4
url: https://github.com/wdwinslow url: https://github.com/wdwinslow
- - login: kamalgill - - login: moellenbeck
avatarUrl: https://avatars.githubusercontent.com/u/133923?u=0df9181d97436ce330e9acf90ab8a54b7022efe7&v=4 avatarUrl: https://avatars.githubusercontent.com/u/169372?v=4
url: https://github.com/kamalgill url: https://github.com/moellenbeck
- login: RodneyU215
avatarUrl: https://avatars.githubusercontent.com/u/3329665?u=ec6a9adf8e7e8e306eed7d49687c398608d1604f&v=4
url: https://github.com/RodneyU215
- login: grillazz - login: grillazz
avatarUrl: https://avatars.githubusercontent.com/u/3415861?u=16d7d0ffa5dfb99f8834f8f76d90e138ba09b94a&v=4 avatarUrl: https://avatars.githubusercontent.com/u/3415861?u=16d7d0ffa5dfb99f8834f8f76d90e138ba09b94a&v=4
url: https://github.com/grillazz url: https://github.com/grillazz
@ -44,24 +65,48 @@ sponsors:
- login: jmaralc - login: jmaralc
avatarUrl: https://avatars.githubusercontent.com/u/21101214?u=b15a9f07b7cbf6c9dcdbcb6550bbd2c52f55aa50&v=4 avatarUrl: https://avatars.githubusercontent.com/u/21101214?u=b15a9f07b7cbf6c9dcdbcb6550bbd2c52f55aa50&v=4
url: https://github.com/jmaralc url: https://github.com/jmaralc
- login: AlexandruSimion - login: Filimoa
avatarUrl: https://avatars.githubusercontent.com/u/71321732?v=4 avatarUrl: https://avatars.githubusercontent.com/u/21352040?u=75e02d102d2ee3e3d793e555fa5c63045913ccb0&v=4
url: https://github.com/AlexandruSimion url: https://github.com/Filimoa
- login: marutoraman
avatarUrl: https://avatars.githubusercontent.com/u/33813153?v=4
url: https://github.com/marutoraman
- login: mainframeindustries
avatarUrl: https://avatars.githubusercontent.com/u/55092103?v=4
url: https://github.com/mainframeindustries
- login: A-Edge
avatarUrl: https://avatars.githubusercontent.com/u/59514131?v=4
url: https://github.com/A-Edge
- - login: hcristea
avatarUrl: https://avatars.githubusercontent.com/u/7814406?u=61d7a4fcf846983a4606788eac25e1c6c1209ba8&v=4
url: https://github.com/hcristea
- - login: samuelcolvin - - login: samuelcolvin
avatarUrl: https://avatars.githubusercontent.com/u/4039449?u=807390ba9cfe23906c3bf8a0d56aaca3cf2bfa0d&v=4 avatarUrl: https://avatars.githubusercontent.com/u/4039449?u=807390ba9cfe23906c3bf8a0d56aaca3cf2bfa0d&v=4
url: https://github.com/samuelcolvin url: https://github.com/samuelcolvin
- login: jokull - login: jokull
avatarUrl: https://avatars.githubusercontent.com/u/701?u=0532b62166893d5160ef795c4c8b7512d971af05&v=4 avatarUrl: https://avatars.githubusercontent.com/u/701?u=0532b62166893d5160ef795c4c8b7512d971af05&v=4
url: https://github.com/jokull url: https://github.com/jokull
- login: jefftriplett
avatarUrl: https://avatars.githubusercontent.com/u/50527?u=af1ddfd50f6afd6d99f333ba2ac8d0a5b245ea74&v=4
url: https://github.com/jefftriplett
- login: kamalgill
avatarUrl: https://avatars.githubusercontent.com/u/133923?u=0df9181d97436ce330e9acf90ab8a54b7022efe7&v=4
url: https://github.com/kamalgill
- login: jsutton
avatarUrl: https://avatars.githubusercontent.com/u/280777?v=4
url: https://github.com/jsutton
- login: deserat
avatarUrl: https://avatars.githubusercontent.com/u/299332?v=4
url: https://github.com/deserat
- login: ericof
avatarUrl: https://avatars.githubusercontent.com/u/306014?u=cf7c8733620397e6584a451505581c01c5d842d7&v=4
url: https://github.com/ericof
- login: wshayes - login: wshayes
avatarUrl: https://avatars.githubusercontent.com/u/365303?u=07ca03c5ee811eb0920e633cc3c3db73dbec1aa5&v=4 avatarUrl: https://avatars.githubusercontent.com/u/365303?u=07ca03c5ee811eb0920e633cc3c3db73dbec1aa5&v=4
url: https://github.com/wshayes url: https://github.com/wshayes
- login: koxudaxi - login: koxudaxi
avatarUrl: https://avatars.githubusercontent.com/u/630670?u=507d8577b4b3670546b449c4c2ccbc5af40d72f7&v=4 avatarUrl: https://avatars.githubusercontent.com/u/630670?u=507d8577b4b3670546b449c4c2ccbc5af40d72f7&v=4
url: https://github.com/koxudaxi url: https://github.com/koxudaxi
- login: falkben
avatarUrl: https://avatars.githubusercontent.com/u/653031?u=0c8d8f33d87f1aa1a6488d3f02105e9abc838105&v=4
url: https://github.com/falkben
- login: jqueguiner - login: jqueguiner
avatarUrl: https://avatars.githubusercontent.com/u/690878?u=e4835b2a985a0f2d52018e4926cb5a58c26a62e8&v=4 avatarUrl: https://avatars.githubusercontent.com/u/690878?u=e4835b2a985a0f2d52018e4926cb5a58c26a62e8&v=4
url: https://github.com/jqueguiner url: https://github.com/jqueguiner
@ -71,18 +116,15 @@ sponsors:
- login: ltieman - login: ltieman
avatarUrl: https://avatars.githubusercontent.com/u/1084689?u=e69b17de17cb3ca141a17daa7ccbe173ceb1eb17&v=4 avatarUrl: https://avatars.githubusercontent.com/u/1084689?u=e69b17de17cb3ca141a17daa7ccbe173ceb1eb17&v=4
url: https://github.com/ltieman url: https://github.com/ltieman
- login: mrmattwright
avatarUrl: https://avatars.githubusercontent.com/u/1277725?v=4
url: https://github.com/mrmattwright
- login: westonsteimel - login: westonsteimel
avatarUrl: https://avatars.githubusercontent.com/u/1593939?u=0f2c0e3647f916fe295d62fa70da7a4c177115e3&v=4 avatarUrl: https://avatars.githubusercontent.com/u/1593939?u=0f2c0e3647f916fe295d62fa70da7a4c177115e3&v=4
url: https://github.com/westonsteimel url: https://github.com/westonsteimel
- login: timdrijvers - login: timdrijvers
avatarUrl: https://avatars.githubusercontent.com/u/1694939?v=4 avatarUrl: https://avatars.githubusercontent.com/u/1694939?v=4
url: https://github.com/timdrijvers url: https://github.com/timdrijvers
- login: mrgnw - login: corleyma
avatarUrl: https://avatars.githubusercontent.com/u/2504532?u=7ec43837a6d0afa80f96f0788744ea6341b89f97&v=4 avatarUrl: https://avatars.githubusercontent.com/u/2080732?u=aed2ff652294a87d666b1c3f6dbe98104db76d26&v=4
url: https://github.com/mrgnw url: https://github.com/corleyma
- login: madisonmay - login: madisonmay
avatarUrl: https://avatars.githubusercontent.com/u/2645393?u=f22b93c6ea345a4d26a90a3834dfc7f0789fcb63&v=4 avatarUrl: https://avatars.githubusercontent.com/u/2645393?u=f22b93c6ea345a4d26a90a3834dfc7f0789fcb63&v=4
url: https://github.com/madisonmay url: https://github.com/madisonmay
@ -93,32 +135,50 @@ sponsors:
avatarUrl: https://avatars.githubusercontent.com/u/3148093?v=4 avatarUrl: https://avatars.githubusercontent.com/u/3148093?v=4
url: https://github.com/andre1sk url: https://github.com/andre1sk
- login: Shark009 - login: Shark009
avatarUrl: https://avatars.githubusercontent.com/u/3163309?v=4 avatarUrl: https://avatars.githubusercontent.com/u/3163309?u=0c6f4091b0eda05c44c390466199826e6dc6e431&v=4
url: https://github.com/Shark009 url: https://github.com/Shark009
- login: dblackrun
avatarUrl: https://avatars.githubusercontent.com/u/3528486?v=4
url: https://github.com/dblackrun
- login: zsinx6
avatarUrl: https://avatars.githubusercontent.com/u/3532625?u=ba75a5dc744d1116ccfeaaf30d41cb2fe81fe8dd&v=4
url: https://github.com/zsinx6
- login: anomaly
avatarUrl: https://avatars.githubusercontent.com/u/3654837?v=4
url: https://github.com/anomaly
- login: peterHoburg - login: peterHoburg
avatarUrl: https://avatars.githubusercontent.com/u/3860655?u=f55f47eb2d6a9b495e806ac5a044e3ae01ccc1fa&v=4 avatarUrl: https://avatars.githubusercontent.com/u/3860655?u=f55f47eb2d6a9b495e806ac5a044e3ae01ccc1fa&v=4
url: https://github.com/peterHoburg url: https://github.com/peterHoburg
- login: jaredtrog - login: jaredtrog
avatarUrl: https://avatars.githubusercontent.com/u/4381365?v=4 avatarUrl: https://avatars.githubusercontent.com/u/4381365?v=4
url: https://github.com/jaredtrog url: https://github.com/jaredtrog
- login: oliverxchen
avatarUrl: https://avatars.githubusercontent.com/u/4471774?u=534191f25e32eeaadda22dfab4b0a428733d5489&v=4
url: https://github.com/oliverxchen
- login: CINOAdam - login: CINOAdam
avatarUrl: https://avatars.githubusercontent.com/u/4728508?u=34c3d58cb900fed475d0172b436c66a94ad739ed&v=4 avatarUrl: https://avatars.githubusercontent.com/u/4728508?u=76ef23f06ae7c604e009873bc27cf0ea9ba738c9&v=4
url: https://github.com/CINOAdam url: https://github.com/CINOAdam
- login: dudil - login: ScrimForever
avatarUrl: https://avatars.githubusercontent.com/u/4785835?u=58b7ea39123e0507f3b2996448a27256b16fd697&v=4 avatarUrl: https://avatars.githubusercontent.com/u/5040124?u=091ec38bfe16d6e762099e91309b59f248616a65&v=4
url: https://github.com/dudil url: https://github.com/ScrimForever
- login: ennui93 - login: ennui93
avatarUrl: https://avatars.githubusercontent.com/u/5300907?u=5b5452725ddb391b2caaebf34e05aba873591c3a&v=4 avatarUrl: https://avatars.githubusercontent.com/u/5300907?u=5b5452725ddb391b2caaebf34e05aba873591c3a&v=4
url: https://github.com/ennui93 url: https://github.com/ennui93
- login: MacroPower - login: MacroPower
avatarUrl: https://avatars.githubusercontent.com/u/5648814?u=e13991efd1e03c44c911f919872e750530ded633&v=4 avatarUrl: https://avatars.githubusercontent.com/u/5648814?u=e13991efd1e03c44c911f919872e750530ded633&v=4
url: https://github.com/MacroPower url: https://github.com/MacroPower
- login: ginomempin - login: Yaleesa
avatarUrl: https://avatars.githubusercontent.com/u/6091865?v=4 avatarUrl: https://avatars.githubusercontent.com/u/6135475?v=4
url: https://github.com/ginomempin url: https://github.com/Yaleesa
- login: iwpnd - login: iwpnd
avatarUrl: https://avatars.githubusercontent.com/u/6152183?u=b2286006daafff5f991557344fee20b5da59639a&v=4 avatarUrl: https://avatars.githubusercontent.com/u/6152183?u=b2286006daafff5f991557344fee20b5da59639a&v=4
url: https://github.com/iwpnd url: https://github.com/iwpnd
- login: simw
avatarUrl: https://avatars.githubusercontent.com/u/6322526?v=4
url: https://github.com/simw
- login: pkucmus
avatarUrl: https://avatars.githubusercontent.com/u/6347418?u=98f5918b32e214a168a2f5d59b0b8ebdf57dca0d&v=4
url: https://github.com/pkucmus
- login: s3ich4n - login: s3ich4n
avatarUrl: https://avatars.githubusercontent.com/u/6926298?u=ba3025d698e1c986655e776ae383a3d60d9d578e&v=4 avatarUrl: https://avatars.githubusercontent.com/u/6926298?u=ba3025d698e1c986655e776ae383a3d60d9d578e&v=4
url: https://github.com/s3ich4n url: https://github.com/s3ich4n
@ -126,116 +186,152 @@ sponsors:
avatarUrl: https://avatars.githubusercontent.com/u/7015688?u=3afb0ba200feebbc7f958950e92db34df2a3c172&v=4 avatarUrl: https://avatars.githubusercontent.com/u/7015688?u=3afb0ba200feebbc7f958950e92db34df2a3c172&v=4
url: https://github.com/Rehket url: https://github.com/Rehket
- login: christippett - login: christippett
avatarUrl: https://avatars.githubusercontent.com/u/7218120?u=434b9d29287d7de25772d94ddc74a9bd6d969284&v=4 avatarUrl: https://avatars.githubusercontent.com/u/7218120?u=f21f93b9c14edefef75645bf4d64c819b7d4afd7&v=4
url: https://github.com/christippett url: https://github.com/christippett
- login: hiancdtrsnm
avatarUrl: https://avatars.githubusercontent.com/u/7343177?v=4
url: https://github.com/hiancdtrsnm
- login: Kludex - login: Kludex
avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=cf8455cb899806b774a3a71073f88583adec99f6&v=4 avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=62adc405ef418f4b6c8caa93d3eb8ab107bc4927&v=4
url: https://github.com/Kludex url: https://github.com/Kludex
- login: Shackelford-Arden - login: Shackelford-Arden
avatarUrl: https://avatars.githubusercontent.com/u/7362263?v=4 avatarUrl: https://avatars.githubusercontent.com/u/7362263?v=4
url: https://github.com/Shackelford-Arden url: https://github.com/Shackelford-Arden
- login: cristeaadrian - login: Vikka
avatarUrl: https://avatars.githubusercontent.com/u/9112724?v=4 avatarUrl: https://avatars.githubusercontent.com/u/9381120?u=4bfc7032a824d1ed1994aa8256dfa597c8f187ad&v=4
url: https://github.com/cristeaadrian url: https://github.com/Vikka
- login: otivvormes - login: Ge0f3
avatarUrl: https://avatars.githubusercontent.com/u/11317418?u=6de1edefb6afd0108c0ad2816bd6efc4464a9c44&v=4 avatarUrl: https://avatars.githubusercontent.com/u/11887760?u=ccd80f1ac36dcb8517ef5c4e702e8cc5a80cad2f&v=4
url: https://github.com/otivvormes url: https://github.com/Ge0f3
- login: iambobmae - login: gokulyc
avatarUrl: https://avatars.githubusercontent.com/u/12390270?u=c9a35c2ee5092a9b4135ebb1f91b7f521c467031&v=4 avatarUrl: https://avatars.githubusercontent.com/u/13468848?u=269f269d3e70407b5fb80138c52daba7af783997&v=4
url: https://github.com/iambobmae url: https://github.com/gokulyc
- login: ronaldnwilliams - login: dannywade
avatarUrl: https://avatars.githubusercontent.com/u/13632749?u=ac41a086d0728bf66a9d2bee9e5e377041ff44a4&v=4 avatarUrl: https://avatars.githubusercontent.com/u/13680237?u=418ee985bd41577b20fde81417fb2d901e875e8a&v=4
url: https://github.com/ronaldnwilliams url: https://github.com/dannywade
- login: pablonnaoji - login: pablonnaoji
avatarUrl: https://avatars.githubusercontent.com/u/15187159?u=afc15bd5a4ba9c5c7206bbb1bcaeef606a0932e0&v=4 avatarUrl: https://avatars.githubusercontent.com/u/15187159?u=afc15bd5a4ba9c5c7206bbb1bcaeef606a0932e0&v=4
url: https://github.com/pablonnaoji url: https://github.com/pablonnaoji
- login: natenka
avatarUrl: https://avatars.githubusercontent.com/u/15850513?u=00d1083c980d0b4ce32835dc07eee7f43f34fd2f&v=4
url: https://github.com/natenka
- login: la-mar
avatarUrl: https://avatars.githubusercontent.com/u/16618300?u=7755c0521d2bb0d704f35a51464b15c1e2e6c4da&v=4
url: https://github.com/la-mar
- login: robintully - login: robintully
avatarUrl: https://avatars.githubusercontent.com/u/17059673?u=862b9bb01513f5acd30df97433cb97a24dbfb772&v=4 avatarUrl: https://avatars.githubusercontent.com/u/17059673?u=862b9bb01513f5acd30df97433cb97a24dbfb772&v=4
url: https://github.com/robintully url: https://github.com/robintully
- login: ShaulAb - login: tobiasfeil
avatarUrl: https://avatars.githubusercontent.com/u/18129076?u=2c8d48e47f2dbee15c3f89c3d17d4c356504386c&v=4 avatarUrl: https://avatars.githubusercontent.com/u/17533713?u=bc6b0bec46f342d13c41695db90685d1c58d534e&v=4
url: https://github.com/ShaulAb url: https://github.com/tobiasfeil
- login: wedwardbeck - login: wedwardbeck
avatarUrl: https://avatars.githubusercontent.com/u/19333237?u=1de4ae2bf8d59eb4c013f21d863cbe0f2010575f&v=4 avatarUrl: https://avatars.githubusercontent.com/u/19333237?u=1de4ae2bf8d59eb4c013f21d863cbe0f2010575f&v=4
url: https://github.com/wedwardbeck url: https://github.com/wedwardbeck
- login: linusg - login: linusg
avatarUrl: https://avatars.githubusercontent.com/u/19366641?u=125e390abef8fff3b3b0d370c369cba5d7fd4c67&v=4 avatarUrl: https://avatars.githubusercontent.com/u/19366641?u=125e390abef8fff3b3b0d370c369cba5d7fd4c67&v=4
url: https://github.com/linusg url: https://github.com/linusg
- login: stradivari96
avatarUrl: https://avatars.githubusercontent.com/u/19752586?u=255f5f06a768f518b20cebd6963e840ac49294fd&v=4
url: https://github.com/stradivari96
- login: RedCarpetUp - login: RedCarpetUp
avatarUrl: https://avatars.githubusercontent.com/u/20360440?v=4 avatarUrl: https://avatars.githubusercontent.com/u/20360440?v=4
url: https://github.com/RedCarpetUp url: https://github.com/RedCarpetUp
- login: Filimoa - login: shuheng-liu
avatarUrl: https://avatars.githubusercontent.com/u/21352040?u=75e02d102d2ee3e3d793e555fa5c63045913ccb0&v=4 avatarUrl: https://avatars.githubusercontent.com/u/22414322?u=813c45f30786c6b511b21a661def025d8f7b609e&v=4
url: https://github.com/Filimoa url: https://github.com/shuheng-liu
- login: raminsj13
avatarUrl: https://avatars.githubusercontent.com/u/24259406?u=d51f2a526312ebba150a06936ed187ca0727d329&v=4
url: https://github.com/raminsj13
- login: comoelcometa - login: comoelcometa
avatarUrl: https://avatars.githubusercontent.com/u/25950317?u=c6751efa038561b9bc5fa56d1033d5174e10cd65&v=4 avatarUrl: https://avatars.githubusercontent.com/u/25950317?u=c6751efa038561b9bc5fa56d1033d5174e10cd65&v=4
url: https://github.com/comoelcometa url: https://github.com/comoelcometa
- login: LarryGF
avatarUrl: https://avatars.githubusercontent.com/u/26148349?u=431bb34d36d41c172466252242175281ae132152&v=4
url: https://github.com/LarryGF
- login: veprimk - login: veprimk
avatarUrl: https://avatars.githubusercontent.com/u/29689749?u=f8cb5a15a286e522e5b189bc572d5a1a90217fb2&v=4 avatarUrl: https://avatars.githubusercontent.com/u/29689749?u=f8cb5a15a286e522e5b189bc572d5a1a90217fb2&v=4
url: https://github.com/veprimk url: https://github.com/veprimk
- login: orihomie - login: orihomie
avatarUrl: https://avatars.githubusercontent.com/u/29889683?u=6bc2135a52fcb3a49e69e7d50190796618185fda&v=4 avatarUrl: https://avatars.githubusercontent.com/u/29889683?u=6bc2135a52fcb3a49e69e7d50190796618185fda&v=4
url: https://github.com/orihomie url: https://github.com/orihomie
- login: SaltyCoco - login: meysam81
avatarUrl: https://avatars.githubusercontent.com/u/31451104?u=6ee4e17c07d21b7054f54a12fa9cc377a1b24ff9&v=4 avatarUrl: https://avatars.githubusercontent.com/u/30233243?u=64dc9fc62d039892c6fb44d804251cad5537132b&v=4
url: https://github.com/SaltyCoco url: https://github.com/meysam81
- login: mauroalejandrojm - login: mauroalejandrojm
avatarUrl: https://avatars.githubusercontent.com/u/31569442?u=cdada990a1527926a36e95f62c30a8b48bbc49a1&v=4 avatarUrl: https://avatars.githubusercontent.com/u/31569442?u=cdada990a1527926a36e95f62c30a8b48bbc49a1&v=4
url: https://github.com/mauroalejandrojm url: https://github.com/mauroalejandrojm
- login: bulkw4r3 - login: Leay15
avatarUrl: https://avatars.githubusercontent.com/u/35562532?u=0b812a14a02de14bf73d05fb2b2760a67bacffc2&v=4 avatarUrl: https://avatars.githubusercontent.com/u/32212558?u=c4aa9c1737e515959382a5515381757b1fd86c53&v=4
url: https://github.com/bulkw4r3 url: https://github.com/Leay15
- login: AlrasheedA
avatarUrl: https://avatars.githubusercontent.com/u/33544979?u=7fe66bf62b47682612b222e3e8f4795ef3be769b&v=4
url: https://github.com/AlrasheedA
- login: ProteinQure
avatarUrl: https://avatars.githubusercontent.com/u/33707203?v=4
url: https://github.com/ProteinQure
- login: guligon90
avatarUrl: https://avatars.githubusercontent.com/u/35070513?u=b48c05f669d1ea1d329f90dc70e45f10b569ef55&v=4
url: https://github.com/guligon90
- login: ybressler - login: ybressler
avatarUrl: https://avatars.githubusercontent.com/u/40807730?u=6621dc9ab53b697912ab2a32211bb29ae90a9112&v=4 avatarUrl: https://avatars.githubusercontent.com/u/40807730?u=6621dc9ab53b697912ab2a32211bb29ae90a9112&v=4
url: https://github.com/ybressler url: https://github.com/ybressler
- login: dbanty - login: dbanty
avatarUrl: https://avatars.githubusercontent.com/u/43723790?u=0cf33e4f40efc2ea206a1189fd63a11344eb88ed&v=4 avatarUrl: https://avatars.githubusercontent.com/u/43723790?u=9bcce836bbce55835291c5b2ac93a4e311f4b3c3&v=4
url: https://github.com/dbanty url: https://github.com/dbanty
- login: rafsaf
avatarUrl: https://avatars.githubusercontent.com/u/51059348?u=be9f06b8ced2d2b677297decc781fa8ce4f7ddbd&v=4
url: https://github.com/rafsaf
- login: dudikbender - login: dudikbender
avatarUrl: https://avatars.githubusercontent.com/u/53487583?u=494f85229115076121b3639a3806bbac1c6ae7f6&v=4 avatarUrl: https://avatars.githubusercontent.com/u/53487583?u=494f85229115076121b3639a3806bbac1c6ae7f6&v=4
url: https://github.com/dudikbender url: https://github.com/dudikbender
- login: daisuke8000
avatarUrl: https://avatars.githubusercontent.com/u/55035595?u=5025e379cd3655ae1a96039efc85223a873d2e38&v=4
url: https://github.com/daisuke8000
- login: primer-io - login: primer-io
avatarUrl: https://avatars.githubusercontent.com/u/62146168?v=4 avatarUrl: https://avatars.githubusercontent.com/u/62146168?v=4
url: https://github.com/primer-io url: https://github.com/primer-io
- login: tkrestiankova - login: around
avatarUrl: https://avatars.githubusercontent.com/u/67013045?v=4 avatarUrl: https://avatars.githubusercontent.com/u/62425723?v=4
url: https://github.com/tkrestiankova url: https://github.com/around
- login: predictionmachine
avatarUrl: https://avatars.githubusercontent.com/u/63719559?v=4
url: https://github.com/predictionmachine
- login: daverin - login: daverin
avatarUrl: https://avatars.githubusercontent.com/u/70378377?u=6d1814195c0de7162820eaad95a25b423a3869c0&v=4 avatarUrl: https://avatars.githubusercontent.com/u/70378377?u=6d1814195c0de7162820eaad95a25b423a3869c0&v=4
url: https://github.com/daverin url: https://github.com/daverin
- login: anthonycepeda - login: anthonycepeda
avatarUrl: https://avatars.githubusercontent.com/u/72019805?u=892f700c79f9732211bd5221bf16eec32356a732&v=4 avatarUrl: https://avatars.githubusercontent.com/u/72019805?u=892f700c79f9732211bd5221bf16eec32356a732&v=4
url: https://github.com/anthonycepeda url: https://github.com/anthonycepeda
- login: an-tho-ny - login: abdurrahim84
avatarUrl: https://avatars.githubusercontent.com/u/74874159?v=4 avatarUrl: https://avatars.githubusercontent.com/u/79488613?v=4
url: https://github.com/an-tho-ny url: https://github.com/abdurrahim84
- login: NinaHwang
avatarUrl: https://avatars.githubusercontent.com/u/79563565?u=1741703bd6c8f491503354b363a86e879b4c1cab&v=4
url: https://github.com/NinaHwang
- login: dotlas
avatarUrl: https://avatars.githubusercontent.com/u/88832003?v=4
url: https://github.com/dotlas
- login: pyt3h
avatarUrl: https://avatars.githubusercontent.com/u/99658549?v=4
url: https://github.com/pyt3h
- - login: '837477'
avatarUrl: https://avatars.githubusercontent.com/u/37999795?u=543b0bd0e8f283db0fc50754e5d13f6afba8cbea&v=4
url: https://github.com/837477
- - login: linux-china - - login: linux-china
avatarUrl: https://avatars.githubusercontent.com/u/46711?v=4 avatarUrl: https://avatars.githubusercontent.com/u/46711?v=4
url: https://github.com/linux-china url: https://github.com/linux-china
- login: ddanier
avatarUrl: https://avatars.githubusercontent.com/u/113563?v=4
url: https://github.com/ddanier
- login: jhb - login: jhb
avatarUrl: https://avatars.githubusercontent.com/u/142217?v=4 avatarUrl: https://avatars.githubusercontent.com/u/142217?v=4
url: https://github.com/jhb url: https://github.com/jhb
- login: justinrmiller
avatarUrl: https://avatars.githubusercontent.com/u/143998?u=b507a940394d4fc2bc1c27cea2ca9c22538874bd&v=4
url: https://github.com/justinrmiller
- login: bryanculbertson
avatarUrl: https://avatars.githubusercontent.com/u/144028?u=defda4f90e93429221cc667500944abde60ebe4a&v=4
url: https://github.com/bryanculbertson
- login: yourkin - login: yourkin
avatarUrl: https://avatars.githubusercontent.com/u/178984?v=4 avatarUrl: https://avatars.githubusercontent.com/u/178984?u=fa7c3503b47bf16405b96d21554bc59f07a65523&v=4
url: https://github.com/yourkin url: https://github.com/yourkin
- login: jmagnusson
avatarUrl: https://avatars.githubusercontent.com/u/190835?v=4
url: https://github.com/jmagnusson
- login: sakti
avatarUrl: https://avatars.githubusercontent.com/u/196178?u=0110be74c4270244546f1b610334042cd16bb8ad&v=4
url: https://github.com/sakti
- login: slafs - login: slafs
avatarUrl: https://avatars.githubusercontent.com/u/210173?v=4 avatarUrl: https://avatars.githubusercontent.com/u/210173?v=4
url: https://github.com/slafs url: https://github.com/slafs
- login: assem-ch
avatarUrl: https://avatars.githubusercontent.com/u/315228?u=e0c5ab30726d3243a40974bb9bae327866e42d9b&v=4
url: https://github.com/assem-ch
- login: adamghill - login: adamghill
avatarUrl: https://avatars.githubusercontent.com/u/317045?u=f1349d5ffe84a19f324e204777859fbf69ddf633&v=4 avatarUrl: https://avatars.githubusercontent.com/u/317045?u=f1349d5ffe84a19f324e204777859fbf69ddf633&v=4
url: https://github.com/adamghill url: https://github.com/adamghill
@ -245,21 +341,33 @@ sponsors:
- login: dmig - login: dmig
avatarUrl: https://avatars.githubusercontent.com/u/388564?v=4 avatarUrl: https://avatars.githubusercontent.com/u/388564?v=4
url: https://github.com/dmig url: https://github.com/dmig
- login: hongqn
avatarUrl: https://avatars.githubusercontent.com/u/405587?u=470b4c04832e45141fd5264d3354845cc9fc6466&v=4
url: https://github.com/hongqn
- login: rinckd - login: rinckd
avatarUrl: https://avatars.githubusercontent.com/u/546002?u=1fcc7e664dc86524a0af6837a0c222829c3fd4e5&v=4 avatarUrl: https://avatars.githubusercontent.com/u/546002?u=1fcc7e664dc86524a0af6837a0c222829c3fd4e5&v=4
url: https://github.com/rinckd url: https://github.com/rinckd
- login: securancy
avatarUrl: https://avatars.githubusercontent.com/u/606673?v=4
url: https://github.com/securancy
- login: falkben
avatarUrl: https://avatars.githubusercontent.com/u/653031?u=0c8d8f33d87f1aa1a6488d3f02105e9abc838105&v=4
url: https://github.com/falkben
- login: hardbyte - login: hardbyte
avatarUrl: https://avatars.githubusercontent.com/u/855189?u=aa29e92f34708814d6b67fcd47ca4cf2ce1c04ed&v=4 avatarUrl: https://avatars.githubusercontent.com/u/855189?u=aa29e92f34708814d6b67fcd47ca4cf2ce1c04ed&v=4
url: https://github.com/hardbyte url: https://github.com/hardbyte
- login: clstaudt
avatarUrl: https://avatars.githubusercontent.com/u/875194?u=46a92f9f837d0ba150ae0f1d91091dd2f4ebb6cc&v=4
url: https://github.com/clstaudt
- login: scari
avatarUrl: https://avatars.githubusercontent.com/u/964251?v=4
url: https://github.com/scari
- login: Pytlicek - login: Pytlicek
avatarUrl: https://avatars.githubusercontent.com/u/1430522?u=169dba3bfbc04ed214a914640ff435969f19ddb3&v=4 avatarUrl: https://avatars.githubusercontent.com/u/1430522?u=169dba3bfbc04ed214a914640ff435969f19ddb3&v=4
url: https://github.com/Pytlicek url: https://github.com/Pytlicek
- login: okken - login: Celeborn2BeAlive
avatarUrl: https://avatars.githubusercontent.com/u/1568356?u=0a991a21bdc62e2bea9ad311652f2c45f453dc84&v=4 avatarUrl: https://avatars.githubusercontent.com/u/1659465?u=944517e4db0f6df65070074e81cabdad9c8a434b&v=4
url: https://github.com/okken url: https://github.com/Celeborn2BeAlive
- login: WillHogan
avatarUrl: https://avatars.githubusercontent.com/u/1661551?u=7036c064cf29781470573865264ec8e60b6b809f&v=4
url: https://github.com/WillHogan
- login: cbonoz - login: cbonoz
avatarUrl: https://avatars.githubusercontent.com/u/2351087?u=fd3e8030b2cc9fbfbb54a65e9890c548a016f58b&v=4 avatarUrl: https://avatars.githubusercontent.com/u/2351087?u=fd3e8030b2cc9fbfbb54a65e9890c548a016f58b&v=4
url: https://github.com/cbonoz url: https://github.com/cbonoz
@ -269,111 +377,132 @@ sponsors:
- login: rglsk - login: rglsk
avatarUrl: https://avatars.githubusercontent.com/u/2768101?u=e349c88673f2155fe021331377c656a9d74bcc25&v=4 avatarUrl: https://avatars.githubusercontent.com/u/2768101?u=e349c88673f2155fe021331377c656a9d74bcc25&v=4
url: https://github.com/rglsk url: https://github.com/rglsk
- login: Atem18
avatarUrl: https://avatars.githubusercontent.com/u/2875254?v=4
url: https://github.com/Atem18
- login: paul121 - login: paul121
avatarUrl: https://avatars.githubusercontent.com/u/3116995?u=6e2d8691cc345e63ee02e4eb4d7cef82b1fcbedc&v=4 avatarUrl: https://avatars.githubusercontent.com/u/3116995?u=6e2d8691cc345e63ee02e4eb4d7cef82b1fcbedc&v=4
url: https://github.com/paul121 url: https://github.com/paul121
- login: igorcorrea - login: igorcorrea
avatarUrl: https://avatars.githubusercontent.com/u/3438238?u=c57605077c31a8f7b2341fc4912507f91b4a5621&v=4 avatarUrl: https://avatars.githubusercontent.com/u/3438238?u=c57605077c31a8f7b2341fc4912507f91b4a5621&v=4
url: https://github.com/igorcorrea url: https://github.com/igorcorrea
- login: anthcor - login: anthonycorletti
avatarUrl: https://avatars.githubusercontent.com/u/3477132?v=4 avatarUrl: https://avatars.githubusercontent.com/u/3477132?v=4
url: https://github.com/anthcor url: https://github.com/anthonycorletti
- login: zsinx6
avatarUrl: https://avatars.githubusercontent.com/u/3532625?u=ba75a5dc744d1116ccfeaaf30d41cb2fe81fe8dd&v=4
url: https://github.com/zsinx6
- login: pawamoy - login: pawamoy
avatarUrl: https://avatars.githubusercontent.com/u/3999221?u=b030e4c89df2f3a36bc4710b925bdeb6745c9856&v=4 avatarUrl: https://avatars.githubusercontent.com/u/3999221?u=b030e4c89df2f3a36bc4710b925bdeb6745c9856&v=4
url: https://github.com/pawamoy url: https://github.com/pawamoy
- login: spyker77 - login: Alisa-lisa
avatarUrl: https://avatars.githubusercontent.com/u/4953435?u=03c724c6f8fbab5cd6575b810c0c91c652fa4f79&v=4 avatarUrl: https://avatars.githubusercontent.com/u/4137964?u=e7e393504f554f4ff15863a1e01a5746863ef9ce&v=4
url: https://github.com/spyker77 url: https://github.com/Alisa-lisa
- login: JonasKs - login: unredundant
avatarUrl: https://avatars.githubusercontent.com/u/5310116?u=98a049f3e1491bffb91e1feb7e93def6881a9389&v=4 avatarUrl: https://avatars.githubusercontent.com/u/5607577?u=57dd0023365bec03f4fc566df6b81bc0a264a47d&v=4
url: https://github.com/JonasKs url: https://github.com/unredundant
- login: holec - login: holec
avatarUrl: https://avatars.githubusercontent.com/u/6438041?u=f5af71ec85b3a9d7b8139cb5af0512b02fa9ab1e&v=4 avatarUrl: https://avatars.githubusercontent.com/u/6438041?u=f5af71ec85b3a9d7b8139cb5af0512b02fa9ab1e&v=4
url: https://github.com/holec url: https://github.com/holec
- login: BartlomiejRasztabiga
avatarUrl: https://avatars.githubusercontent.com/u/8852711?u=ed213d60f7a423df31ceb1004aa3ec60e612cb98&v=4
url: https://github.com/BartlomiejRasztabiga
- login: davanstrien - login: davanstrien
avatarUrl: https://avatars.githubusercontent.com/u/8995957?u=fb2aad2b52bb4e7b56db6d7c8ecc9ae1eac1b984&v=4 avatarUrl: https://avatars.githubusercontent.com/u/8995957?u=fb2aad2b52bb4e7b56db6d7c8ecc9ae1eac1b984&v=4
url: https://github.com/davanstrien url: https://github.com/davanstrien
- login: and-semakin - login: and-semakin
avatarUrl: https://avatars.githubusercontent.com/u/9129071?u=ea77ddf7de4bc375d546bf2825ed420eaddb7666&v=4 avatarUrl: https://avatars.githubusercontent.com/u/9129071?u=ea77ddf7de4bc375d546bf2825ed420eaddb7666&v=4
url: https://github.com/and-semakin url: https://github.com/and-semakin
- login: yenchenLiu
avatarUrl: https://avatars.githubusercontent.com/u/9199638?u=8cdf5ae507448430d90f6f3518d1665a23afe99b&v=4
url: https://github.com/yenchenLiu
- login: VivianSolide - login: VivianSolide
avatarUrl: https://avatars.githubusercontent.com/u/9358572?u=ffb2e2ec522a15dcd3f0af1f9fd1df4afe418afa&v=4 avatarUrl: https://avatars.githubusercontent.com/u/9358572?u=4a38ef72dd39e8b262bd5ab819992128b55c52b4&v=4
url: https://github.com/VivianSolide url: https://github.com/VivianSolide
- login: xncbf
avatarUrl: https://avatars.githubusercontent.com/u/9462045?u=866a1311e4bd3ec5ae84185c4fcc99f397c883d7&v=4
url: https://github.com/xncbf
- login: DMantis
avatarUrl: https://avatars.githubusercontent.com/u/9536869?v=4
url: https://github.com/DMantis
- login: hard-coders - login: hard-coders
avatarUrl: https://avatars.githubusercontent.com/u/9651103?u=f2d3d2038c55d86d7f9348f4e6c5e30191e4ee8b&v=4 avatarUrl: https://avatars.githubusercontent.com/u/9651103?u=95db33927bbff1ed1c07efddeb97ac2ff33068ed&v=4
url: https://github.com/hard-coders url: https://github.com/hard-coders
- login: satwikkansal
avatarUrl: https://avatars.githubusercontent.com/u/10217535?u=b12d6ef74ea297de9e46da6933b1a5b7ba9e6a61&v=4
url: https://github.com/satwikkansal
- login: pheanex - login: pheanex
avatarUrl: https://avatars.githubusercontent.com/u/10408624?u=5b6bab6ee174aa6e991333e06eb29f628741013d&v=4 avatarUrl: https://avatars.githubusercontent.com/u/10408624?u=5b6bab6ee174aa6e991333e06eb29f628741013d&v=4
url: https://github.com/pheanex url: https://github.com/pheanex
- login: wotori
avatarUrl: https://avatars.githubusercontent.com/u/10486621?u=0044c295b91694b8c9bccc0a805681f794250f7b&v=4
url: https://github.com/wotori
- login: JimFawkes - login: JimFawkes
avatarUrl: https://avatars.githubusercontent.com/u/12075115?u=dc58ecfd064d72887c34bf500ddfd52592509acd&v=4 avatarUrl: https://avatars.githubusercontent.com/u/12075115?u=dc58ecfd064d72887c34bf500ddfd52592509acd&v=4
url: https://github.com/JimFawkes url: https://github.com/JimFawkes
- login: logan-connolly - login: logan-connolly
avatarUrl: https://avatars.githubusercontent.com/u/16244943?u=8ae66dfbba936463cc8aa0dd7a6d2b4c0cc757eb&v=4 avatarUrl: https://avatars.githubusercontent.com/u/16244943?u=8ae66dfbba936463cc8aa0dd7a6d2b4c0cc757eb&v=4
url: https://github.com/logan-connolly url: https://github.com/logan-connolly
- login: iPr0ger - login: cdsre
avatarUrl: https://avatars.githubusercontent.com/u/19322290?v=4 avatarUrl: https://avatars.githubusercontent.com/u/16945936?v=4
url: https://github.com/iPr0ger url: https://github.com/cdsre
- login: jangia
avatarUrl: https://avatars.githubusercontent.com/u/17927101?u=9261b9bb0c3e3bb1ecba43e8915dc58d8c9a077e&v=4
url: https://github.com/jangia
- login: ghandic - login: ghandic
avatarUrl: https://avatars.githubusercontent.com/u/23500353?u=e2e1d736f924d9be81e8bfc565b6d8836ba99773&v=4 avatarUrl: https://avatars.githubusercontent.com/u/23500353?u=e2e1d736f924d9be81e8bfc565b6d8836ba99773&v=4
url: https://github.com/ghandic url: https://github.com/ghandic
- login: MoronVV
avatarUrl: https://avatars.githubusercontent.com/u/24293616?v=4
url: https://github.com/MoronVV
- login: fstau - login: fstau
avatarUrl: https://avatars.githubusercontent.com/u/24669867?u=60e7c8c09f8dafabee8fc3edcd6f9e19abbff918&v=4 avatarUrl: https://avatars.githubusercontent.com/u/24669867?u=60e7c8c09f8dafabee8fc3edcd6f9e19abbff918&v=4
url: https://github.com/fstau url: https://github.com/fstau
- login: mertguvencli - login: mertguvencli
avatarUrl: https://avatars.githubusercontent.com/u/29762151?u=16a906d90df96c8cff9ea131a575c4bc171b1523&v=4 avatarUrl: https://avatars.githubusercontent.com/u/29762151?u=16a906d90df96c8cff9ea131a575c4bc171b1523&v=4
url: https://github.com/mertguvencli url: https://github.com/mertguvencli
- login: rgreen32 - login: dwreeves
avatarUrl: https://avatars.githubusercontent.com/u/35779241?u=c9d64ad1ab364b6a1ec8e3d859da9ca802d681d8&v=4 avatarUrl: https://avatars.githubusercontent.com/u/31971762?u=69732aba05aa5cf0780866349ebe109cf632b047&v=4
url: https://github.com/rgreen32 url: https://github.com/dwreeves
- login: kitaramu0401
avatarUrl: https://avatars.githubusercontent.com/u/33246506?u=929e6efa2c518033b8097ba524eb5347a069bb3b&v=4
url: https://github.com/kitaramu0401
- login: engineerjoe440
avatarUrl: https://avatars.githubusercontent.com/u/33275230?u=eb223cad27017bb1e936ee9b429b450d092d0236&v=4
url: https://github.com/engineerjoe440
- login: declon
avatarUrl: https://avatars.githubusercontent.com/u/36180226?v=4
url: https://github.com/declon
- login: d-e-h-i-o
avatarUrl: https://avatars.githubusercontent.com/u/36816716?v=4
url: https://github.com/d-e-h-i-o
- login: askurihin - login: askurihin
avatarUrl: https://avatars.githubusercontent.com/u/37978981?v=4 avatarUrl: https://avatars.githubusercontent.com/u/37978981?v=4
url: https://github.com/askurihin url: https://github.com/askurihin
- login: JitPackJoyride
avatarUrl: https://avatars.githubusercontent.com/u/40203625?u=9638bfeacfa5940358188f8205ce662bba022b53&v=4
url: https://github.com/JitPackJoyride
- login: es3n1n
avatarUrl: https://avatars.githubusercontent.com/u/40367813?u=e881a3880f1e342d19a1ea7c8e1b6d76c52dc294&v=4
url: https://github.com/es3n1n
- login: ilias-ant - login: ilias-ant
avatarUrl: https://avatars.githubusercontent.com/u/42189572?u=a2d6121bac4d125d92ec207460fa3f1842d37e66&v=4 avatarUrl: https://avatars.githubusercontent.com/u/42189572?u=a2d6121bac4d125d92ec207460fa3f1842d37e66&v=4
url: https://github.com/ilias-ant url: https://github.com/ilias-ant
- login: arrrrrmin - login: arrrrrmin
avatarUrl: https://avatars.githubusercontent.com/u/43553423?u=05600727f1cfe75f440bb3fddd49bfea84b1e894&v=4 avatarUrl: https://avatars.githubusercontent.com/u/43553423?u=fee5739394fea074cb0b66929d070114a5067aae&v=4
url: https://github.com/arrrrrmin url: https://github.com/arrrrrmin
- login: igorezersky
avatarUrl: https://avatars.githubusercontent.com/u/46680020?u=a20a595c881dbe5658c906fecc7eff125efb4fd4&v=4
url: https://github.com/igorezersky
- login: akanz1 - login: akanz1
avatarUrl: https://avatars.githubusercontent.com/u/51492342?u=2280f57134118714645e16b535c1a37adf6b369b&v=4 avatarUrl: https://avatars.githubusercontent.com/u/51492342?u=2280f57134118714645e16b535c1a37adf6b369b&v=4
url: https://github.com/akanz1 url: https://github.com/akanz1
- - login: leogregianin - login: rooflexx
avatarUrl: https://avatars.githubusercontent.com/u/1684053?u=94ddd387601bd1805034dbe83e6eba0491c15323&v=4 avatarUrl: https://avatars.githubusercontent.com/u/58993673?u=f8ba450460f1aea18430ed1e4a3889049a3b4dfa&v=4
url: https://github.com/leogregianin url: https://github.com/rooflexx
- login: denisyao1
avatarUrl: https://avatars.githubusercontent.com/u/60019356?v=4
url: https://github.com/denisyao1
- login: apar-tiwari
avatarUrl: https://avatars.githubusercontent.com/u/61064197?v=4
url: https://github.com/apar-tiwari
- login: 0417taehyun
avatarUrl: https://avatars.githubusercontent.com/u/63915557?u=47debaa860fd52c9b98c97ef357ddcec3b3fb399&v=4
url: https://github.com/0417taehyun
- login: alessio-proietti
avatarUrl: https://avatars.githubusercontent.com/u/67370599?u=8ac73db1e18e946a7681f173abdb640516f88515&v=4
url: https://github.com/alessio-proietti
- - login: spyker77
avatarUrl: https://avatars.githubusercontent.com/u/4953435?u=03c724c6f8fbab5cd6575b810c0c91c652fa4f79&v=4
url: https://github.com/spyker77
- login: backbord
avatarUrl: https://avatars.githubusercontent.com/u/6814946?v=4
url: https://github.com/backbord
- login: sadikkuzu - login: sadikkuzu
avatarUrl: https://avatars.githubusercontent.com/u/23168063?u=765ed469c44c004560079210ccdad5b29938eaa9&v=4 avatarUrl: https://avatars.githubusercontent.com/u/23168063?u=765ed469c44c004560079210ccdad5b29938eaa9&v=4
url: https://github.com/sadikkuzu url: https://github.com/sadikkuzu
- login: MoronVV
avatarUrl: https://avatars.githubusercontent.com/u/24293616?v=4
url: https://github.com/MoronVV
- login: gabrielmbmb - login: gabrielmbmb
avatarUrl: https://avatars.githubusercontent.com/u/29572918?u=92084ed7242160dee4d20aece923a10c59758ee5&v=4 avatarUrl: https://avatars.githubusercontent.com/u/29572918?u=92084ed7242160dee4d20aece923a10c59758ee5&v=4
url: https://github.com/gabrielmbmb url: https://github.com/gabrielmbmb
- login: starhype - login: danburonline
avatarUrl: https://avatars.githubusercontent.com/u/36908028?u=6df41f7b62f0f673f1ecbc87e9cbadaa4fcb0767&v=4 avatarUrl: https://avatars.githubusercontent.com/u/34251194?u=2cad4388c1544e539ecb732d656e42fb07b4ff2d&v=4
url: https://github.com/starhype url: https://github.com/danburonline
- login: pixel365
avatarUrl: https://avatars.githubusercontent.com/u/53819609?u=9e0309c5420ec4624aececd3ca2d7105f7f68133&v=4
url: https://github.com/pixel365

210
docs/en/data/people.yml

@ -1,13 +1,13 @@
maintainers: maintainers:
- login: tiangolo - login: tiangolo
answers: 1237 answers: 1240
prs: 280 prs: 291
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=5cad72c846b7aba2e960546af490edc7375dafc4&v=4 avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=5cad72c846b7aba2e960546af490edc7375dafc4&v=4
url: https://github.com/tiangolo url: https://github.com/tiangolo
experts: experts:
- login: Kludex - login: Kludex
count: 319 count: 330
avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=3682d9b9b93bef272f379ab623dc031c8d71432e&v=4 avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=62adc405ef418f4b6c8caa93d3eb8ab107bc4927&v=4
url: https://github.com/Kludex url: https://github.com/Kludex
- login: dmontagu - login: dmontagu
count: 262 count: 262
@ -29,14 +29,14 @@ experts:
count: 130 count: 130
avatarUrl: https://avatars.githubusercontent.com/u/331403?v=4 avatarUrl: https://avatars.githubusercontent.com/u/331403?v=4
url: https://github.com/phy25 url: https://github.com/phy25
- login: raphaelauv
count: 71
avatarUrl: https://avatars.githubusercontent.com/u/10202690?u=e6f86f5c0c3026a15d6b51792fa3e532b12f1371&v=4
url: https://github.com/raphaelauv
- login: ArcLightSlavik - login: ArcLightSlavik
count: 71 count: 71
avatarUrl: https://avatars.githubusercontent.com/u/31127044?u=81a84af39c89b898b0fbc5a04e8834f60f23e55a&v=4 avatarUrl: https://avatars.githubusercontent.com/u/31127044?u=81a84af39c89b898b0fbc5a04e8834f60f23e55a&v=4
url: https://github.com/ArcLightSlavik url: https://github.com/ArcLightSlavik
- login: raphaelauv
count: 68
avatarUrl: https://avatars.githubusercontent.com/u/10202690?u=e6f86f5c0c3026a15d6b51792fa3e532b12f1371&v=4
url: https://github.com/raphaelauv
- login: falkben - login: falkben
count: 58 count: 58
avatarUrl: https://avatars.githubusercontent.com/u/653031?u=0c8d8f33d87f1aa1a6488d3f02105e9abc838105&v=4 avatarUrl: https://avatars.githubusercontent.com/u/653031?u=0c8d8f33d87f1aa1a6488d3f02105e9abc838105&v=4
@ -50,11 +50,11 @@ experts:
avatarUrl: https://avatars.githubusercontent.com/u/16958893?u=f8be7088d5076d963984a21f95f44e559192d912&v=4 avatarUrl: https://avatars.githubusercontent.com/u/16958893?u=f8be7088d5076d963984a21f95f44e559192d912&v=4
url: https://github.com/insomnes url: https://github.com/insomnes
- login: Dustyposa - login: Dustyposa
count: 42 count: 43
avatarUrl: https://avatars.githubusercontent.com/u/27180793?u=5cf2877f50b3eb2bc55086089a78a36f07042889&v=4 avatarUrl: https://avatars.githubusercontent.com/u/27180793?u=5cf2877f50b3eb2bc55086089a78a36f07042889&v=4
url: https://github.com/Dustyposa url: https://github.com/Dustyposa
- login: includeamin - login: includeamin
count: 38 count: 39
avatarUrl: https://avatars.githubusercontent.com/u/11836741?u=8bd5ef7e62fe6a82055e33c4c0e0a7879ff8cfb6&v=4 avatarUrl: https://avatars.githubusercontent.com/u/11836741?u=8bd5ef7e62fe6a82055e33c4c0e0a7879ff8cfb6&v=4
url: https://github.com/includeamin url: https://github.com/includeamin
- login: STeveShary - login: STeveShary
@ -65,26 +65,30 @@ experts:
count: 33 count: 33
avatarUrl: https://avatars.githubusercontent.com/u/28061158?u=72309cc1f2e04e40fa38b29969cb4e9d3f722e7b&v=4 avatarUrl: https://avatars.githubusercontent.com/u/28061158?u=72309cc1f2e04e40fa38b29969cb4e9d3f722e7b&v=4
url: https://github.com/prostomarkeloff url: https://github.com/prostomarkeloff
- login: krishnardt - login: frankie567
count: 31 count: 31
avatarUrl: https://avatars.githubusercontent.com/u/31960541?u=47f4829c77f4962ab437ffb7995951e41eeebe9b&v=4 avatarUrl: https://avatars.githubusercontent.com/u/1144727?u=85c025e3fcc7bd79a5665c63ee87cdf8aae13374&v=4
url: https://github.com/krishnardt url: https://github.com/frankie567
- login: adriangb - login: adriangb
count: 30 count: 31
avatarUrl: https://avatars.githubusercontent.com/u/1755071?u=81f0262df34e1460ca546fbd0c211169c2478532&v=4 avatarUrl: https://avatars.githubusercontent.com/u/1755071?u=81f0262df34e1460ca546fbd0c211169c2478532&v=4
url: https://github.com/adriangb url: https://github.com/adriangb
- login: krishnardt
count: 31
avatarUrl: https://avatars.githubusercontent.com/u/31960541?u=47f4829c77f4962ab437ffb7995951e41eeebe9b&v=4
url: https://github.com/krishnardt
- login: wshayes - login: wshayes
count: 29 count: 29
avatarUrl: https://avatars.githubusercontent.com/u/365303?u=07ca03c5ee811eb0920e633cc3c3db73dbec1aa5&v=4 avatarUrl: https://avatars.githubusercontent.com/u/365303?u=07ca03c5ee811eb0920e633cc3c3db73dbec1aa5&v=4
url: https://github.com/wshayes url: https://github.com/wshayes
- login: frankie567
count: 29
avatarUrl: https://avatars.githubusercontent.com/u/1144727?u=85c025e3fcc7bd79a5665c63ee87cdf8aae13374&v=4
url: https://github.com/frankie567
- login: chbndrhnns - login: chbndrhnns
count: 25 count: 26
avatarUrl: https://avatars.githubusercontent.com/u/7534547?v=4 avatarUrl: https://avatars.githubusercontent.com/u/7534547?v=4
url: https://github.com/chbndrhnns url: https://github.com/chbndrhnns
- login: panla
count: 26
avatarUrl: https://avatars.githubusercontent.com/u/41326348?u=ba2fda6b30110411ecbf406d187907e2b420ac19&v=4
url: https://github.com/panla
- login: ghandic - login: ghandic
count: 25 count: 25
avatarUrl: https://avatars.githubusercontent.com/u/23500353?u=e2e1d736f924d9be81e8bfc565b6d8836ba99773&v=4 avatarUrl: https://avatars.githubusercontent.com/u/23500353?u=e2e1d736f924d9be81e8bfc565b6d8836ba99773&v=4
@ -93,14 +97,14 @@ experts:
count: 25 count: 25
avatarUrl: https://avatars.githubusercontent.com/u/43723790?u=9bcce836bbce55835291c5b2ac93a4e311f4b3c3&v=4 avatarUrl: https://avatars.githubusercontent.com/u/43723790?u=9bcce836bbce55835291c5b2ac93a4e311f4b3c3&v=4
url: https://github.com/dbanty url: https://github.com/dbanty
- login: panla
count: 25
avatarUrl: https://avatars.githubusercontent.com/u/41326348?u=ba2fda6b30110411ecbf406d187907e2b420ac19&v=4
url: https://github.com/panla
- login: SirTelemak - login: SirTelemak
count: 24 count: 24
avatarUrl: https://avatars.githubusercontent.com/u/9435877?u=719327b7d2c4c62212456d771bfa7c6b8dbb9eac&v=4 avatarUrl: https://avatars.githubusercontent.com/u/9435877?u=719327b7d2c4c62212456d771bfa7c6b8dbb9eac&v=4
url: https://github.com/SirTelemak url: https://github.com/SirTelemak
- login: jgould22
count: 23
avatarUrl: https://avatars.githubusercontent.com/u/4335847?u=ed77f67e0bb069084639b24d812dbb2a2b1dc554&v=4
url: https://github.com/jgould22
- login: acnebs - login: acnebs
count: 22 count: 22
avatarUrl: https://avatars.githubusercontent.com/u/9054108?u=c27e50269f1ef8ea950cc6f0268c8ec5cebbe9c9&v=4 avatarUrl: https://avatars.githubusercontent.com/u/9054108?u=c27e50269f1ef8ea950cc6f0268c8ec5cebbe9c9&v=4
@ -117,6 +121,10 @@ experts:
count: 19 count: 19
avatarUrl: https://avatars.githubusercontent.com/u/24581770?v=4 avatarUrl: https://avatars.githubusercontent.com/u/24581770?v=4
url: https://github.com/retnikt url: https://github.com/retnikt
- login: acidjunk
count: 18
avatarUrl: https://avatars.githubusercontent.com/u/685002?u=b5094ab4527fc84b006c0ac9ff54367bdebb2267&v=4
url: https://github.com/acidjunk
- login: Hultner - login: Hultner
count: 18 count: 18
avatarUrl: https://avatars.githubusercontent.com/u/2669034?u=115e53df959309898ad8dc9443fbb35fee71df07&v=4 avatarUrl: https://avatars.githubusercontent.com/u/2669034?u=115e53df959309898ad8dc9443fbb35fee71df07&v=4
@ -129,10 +137,10 @@ experts:
count: 17 count: 17
avatarUrl: https://avatars.githubusercontent.com/u/28262306?u=66ee21316275ef356081c2efc4ed7a4572e690dc&v=4 avatarUrl: https://avatars.githubusercontent.com/u/28262306?u=66ee21316275ef356081c2efc4ed7a4572e690dc&v=4
url: https://github.com/nkhitrov url: https://github.com/nkhitrov
- login: acidjunk - login: harunyasar
count: 16 count: 17
avatarUrl: https://avatars.githubusercontent.com/u/685002?u=b5094ab4527fc84b006c0ac9ff54367bdebb2267&v=4 avatarUrl: https://avatars.githubusercontent.com/u/1765494?u=5b1ab7c582db4b4016fa31affe977d10af108ad4&v=4
url: https://github.com/acidjunk url: https://github.com/harunyasar
- login: waynerv - login: waynerv
count: 16 count: 16
avatarUrl: https://avatars.githubusercontent.com/u/39515546?u=ec35139777597cdbbbddda29bf8b9d4396b429a9&v=4 avatarUrl: https://avatars.githubusercontent.com/u/39515546?u=ec35139777597cdbbbddda29bf8b9d4396b429a9&v=4
@ -141,14 +149,10 @@ experts:
count: 16 count: 16
avatarUrl: https://avatars.githubusercontent.com/u/41964673?u=9f2174f9d61c15c6e3a4c9e3aeee66f711ce311f&v=4 avatarUrl: https://avatars.githubusercontent.com/u/41964673?u=9f2174f9d61c15c6e3a4c9e3aeee66f711ce311f&v=4
url: https://github.com/dstlny url: https://github.com/dstlny
- login: jgould22 - login: rafsaf
count: 14 count: 15
avatarUrl: https://avatars.githubusercontent.com/u/4335847?u=ed77f67e0bb069084639b24d812dbb2a2b1dc554&v=4 avatarUrl: https://avatars.githubusercontent.com/u/51059348?u=be9f06b8ced2d2b677297decc781fa8ce4f7ddbd&v=4
url: https://github.com/jgould22 url: https://github.com/rafsaf
- login: harunyasar
count: 14
avatarUrl: https://avatars.githubusercontent.com/u/1765494?u=5b1ab7c582db4b4016fa31affe977d10af108ad4&v=4
url: https://github.com/harunyasar
- login: haizaar - login: haizaar
count: 13 count: 13
avatarUrl: https://avatars.githubusercontent.com/u/58201?u=4f1f9843d69433ca0d380d95146cfe119e5fdac4&v=4 avatarUrl: https://avatars.githubusercontent.com/u/58201?u=4f1f9843d69433ca0d380d95146cfe119e5fdac4&v=4
@ -189,43 +193,39 @@ experts:
count: 10 count: 10
avatarUrl: https://avatars.githubusercontent.com/u/2858306?u=1bb1182a5944e93624b7fb26585f22c8f7a9d76e&v=4 avatarUrl: https://avatars.githubusercontent.com/u/2858306?u=1bb1182a5944e93624b7fb26585f22c8f7a9d76e&v=4
url: https://github.com/oligond url: https://github.com/oligond
- login: n8sty
count: 10
avatarUrl: https://avatars.githubusercontent.com/u/2964996?v=4
url: https://github.com/n8sty
last_month_active: last_month_active:
- login: yinziyan1206
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/37829370?v=4
url: https://github.com/yinziyan1206
- login: Kludex
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=62adc405ef418f4b6c8caa93d3eb8ab107bc4927&v=4
url: https://github.com/Kludex
- login: jd-0001
count: 4
avatarUrl: https://avatars.githubusercontent.com/u/47495003?u=322eedc0931b62827cf5f239654f77bfaff76b46&v=4
url: https://github.com/jd-0001
- login: harunyasar - login: harunyasar
count: 10 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/1765494?u=5b1ab7c582db4b4016fa31affe977d10af108ad4&v=4 avatarUrl: https://avatars.githubusercontent.com/u/1765494?u=5b1ab7c582db4b4016fa31affe977d10af108ad4&v=4
url: https://github.com/harunyasar url: https://github.com/harunyasar
- login: jgould22 - login: wmcgee3
count: 10
avatarUrl: https://avatars.githubusercontent.com/u/4335847?u=ed77f67e0bb069084639b24d812dbb2a2b1dc554&v=4
url: https://github.com/jgould22
- login: rafsaf
count: 9
avatarUrl: https://avatars.githubusercontent.com/u/51059348?u=be9f06b8ced2d2b677297decc781fa8ce4f7ddbd&v=4
url: https://github.com/rafsaf
- login: STeveShary
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/5167622?u=de8f597c81d6336fcebc37b32dfd61a3f877160c&v=4
url: https://github.com/STeveShary
- login: ahnaf-zamil
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/57180217?u=849128b146771ace47beca5b5ff68eb82905dd6d&v=4
url: https://github.com/ahnaf-zamil
- login: lucastosetto
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/89307132?u=56326696423df7126c9e7c702ee58f294db69a2a&v=4
url: https://github.com/lucastosetto
- login: blokje
count: 3 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/851418?v=4 avatarUrl: https://avatars.githubusercontent.com/u/61711986?u=c51ebfaf8a995019fda8288690f4a009ecf070f0&v=4
url: https://github.com/blokje url: https://github.com/wmcgee3
- login: MatthijsKok - login: tasercake
count: 3 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/7658129?u=1243e32d57e13abc45e3f5235ed5b9197e0d2b41&v=4 avatarUrl: https://avatars.githubusercontent.com/u/13855549?v=4
url: https://github.com/MatthijsKok url: https://github.com/tasercake
- login: Kludex - login: jgould22
count: 3 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=3682d9b9b93bef272f379ab623dc031c8d71432e&v=4 avatarUrl: https://avatars.githubusercontent.com/u/4335847?u=ed77f67e0bb069084639b24d812dbb2a2b1dc554&v=4
url: https://github.com/Kludex url: https://github.com/jgould22
top_contributors: top_contributors:
- login: waynerv - login: waynerv
count: 25 count: 25
@ -265,7 +265,7 @@ top_contributors:
url: https://github.com/RunningIkkyu url: https://github.com/RunningIkkyu
- login: Kludex - login: Kludex
count: 7 count: 7
avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=3682d9b9b93bef272f379ab623dc031c8d71432e&v=4 avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=62adc405ef418f4b6c8caa93d3eb8ab107bc4927&v=4
url: https://github.com/Kludex url: https://github.com/Kludex
- login: hard-coders - login: hard-coders
count: 7 count: 7
@ -306,7 +306,7 @@ top_contributors:
top_reviewers: top_reviewers:
- login: Kludex - login: Kludex
count: 93 count: 93
avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=3682d9b9b93bef272f379ab623dc031c8d71432e&v=4 avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=62adc405ef418f4b6c8caa93d3eb8ab107bc4927&v=4
url: https://github.com/Kludex url: https://github.com/Kludex
- login: waynerv - login: waynerv
count: 47 count: 47
@ -324,6 +324,10 @@ top_reviewers:
count: 45 count: 45
avatarUrl: https://avatars.githubusercontent.com/u/62724709?u=826f228edf0bab0d19ad1d5c4ba4df1047ccffef&v=4 avatarUrl: https://avatars.githubusercontent.com/u/62724709?u=826f228edf0bab0d19ad1d5c4ba4df1047ccffef&v=4
url: https://github.com/ycd url: https://github.com/ycd
- login: cikay
count: 41
avatarUrl: https://avatars.githubusercontent.com/u/24587499?u=e772190a051ab0eaa9c8542fcff1892471638f2b&v=4
url: https://github.com/cikay
- login: AdrianDeAnda - login: AdrianDeAnda
count: 33 count: 33
avatarUrl: https://avatars.githubusercontent.com/u/1024932?u=bb7f8a0d6c9de4e9d0320a9f271210206e202250&v=4 avatarUrl: https://avatars.githubusercontent.com/u/1024932?u=bb7f8a0d6c9de4e9d0320a9f271210206e202250&v=4
@ -332,10 +336,10 @@ top_reviewers:
count: 31 count: 31
avatarUrl: https://avatars.githubusercontent.com/u/31127044?u=81a84af39c89b898b0fbc5a04e8834f60f23e55a&v=4 avatarUrl: https://avatars.githubusercontent.com/u/31127044?u=81a84af39c89b898b0fbc5a04e8834f60f23e55a&v=4
url: https://github.com/ArcLightSlavik url: https://github.com/ArcLightSlavik
- login: cikay - login: BilalAlpaslan
count: 24 count: 28
avatarUrl: https://avatars.githubusercontent.com/u/24587499?u=e772190a051ab0eaa9c8542fcff1892471638f2b&v=4 avatarUrl: https://avatars.githubusercontent.com/u/47563997?u=63ed66e304fe8d765762c70587d61d9196e5c82d&v=4
url: https://github.com/cikay url: https://github.com/BilalAlpaslan
- login: dmontagu - login: dmontagu
count: 23 count: 23
avatarUrl: https://avatars.githubusercontent.com/u/35119617?u=58ed2a45798a4339700e2f62b2e12e6e54bf0396&v=4 avatarUrl: https://avatars.githubusercontent.com/u/35119617?u=58ed2a45798a4339700e2f62b2e12e6e54bf0396&v=4
@ -356,6 +360,14 @@ top_reviewers:
count: 19 count: 19
avatarUrl: https://avatars.githubusercontent.com/u/63915557?u=47debaa860fd52c9b98c97ef357ddcec3b3fb399&v=4 avatarUrl: https://avatars.githubusercontent.com/u/63915557?u=47debaa860fd52c9b98c97ef357ddcec3b3fb399&v=4
url: https://github.com/0417taehyun url: https://github.com/0417taehyun
- login: zy7y
count: 17
avatarUrl: https://avatars.githubusercontent.com/u/67154681?u=5d634834cc514028ea3f9115f7030b99a1f4d5a4&v=4
url: https://github.com/zy7y
- login: yezz123
count: 16
avatarUrl: https://avatars.githubusercontent.com/u/52716203?u=636b4f79645176df4527dd45c12d5dbb5a4193cf&v=4
url: https://github.com/yezz123
- login: yanever - login: yanever
count: 16 count: 16
avatarUrl: https://avatars.githubusercontent.com/u/21978760?v=4 avatarUrl: https://avatars.githubusercontent.com/u/21978760?v=4
@ -392,10 +404,6 @@ top_reviewers:
count: 12 count: 12
avatarUrl: https://avatars.githubusercontent.com/u/31848542?u=706e1ee3f248245f2d68b976d149d06fd5a2010d&v=4 avatarUrl: https://avatars.githubusercontent.com/u/31848542?u=706e1ee3f248245f2d68b976d149d06fd5a2010d&v=4
url: https://github.com/RunningIkkyu url: https://github.com/RunningIkkyu
- login: yezz123
count: 12
avatarUrl: https://avatars.githubusercontent.com/u/52716203?u=636b4f79645176df4527dd45c12d5dbb5a4193cf&v=4
url: https://github.com/yezz123
- login: sh0nk - login: sh0nk
count: 12 count: 12
avatarUrl: https://avatars.githubusercontent.com/u/6478810?u=af15d724875cec682ed8088a86d36b2798f981c0&v=4 avatarUrl: https://avatars.githubusercontent.com/u/6478810?u=af15d724875cec682ed8088a86d36b2798f981c0&v=4
@ -412,6 +420,10 @@ top_reviewers:
count: 10 count: 10
avatarUrl: https://avatars.githubusercontent.com/u/7887703?v=4 avatarUrl: https://avatars.githubusercontent.com/u/7887703?v=4
url: https://github.com/maoyibo url: https://github.com/maoyibo
- login: solomein-sv
count: 10
avatarUrl: https://avatars.githubusercontent.com/u/46193920?u=46acfb4aeefb1d7b9fdc5a8cbd9eb8744683c47a&v=4
url: https://github.com/solomein-sv
- login: graingert - login: graingert
count: 9 count: 9
avatarUrl: https://avatars.githubusercontent.com/u/413772?v=4 avatarUrl: https://avatars.githubusercontent.com/u/413772?v=4
@ -424,26 +436,26 @@ top_reviewers:
count: 9 count: 9
avatarUrl: https://avatars.githubusercontent.com/u/49435654?v=4 avatarUrl: https://avatars.githubusercontent.com/u/49435654?v=4
url: https://github.com/kty4119 url: https://github.com/kty4119
- login: zy7y
count: 9
avatarUrl: https://avatars.githubusercontent.com/u/67154681?u=5d634834cc514028ea3f9115f7030b99a1f4d5a4&v=4
url: https://github.com/zy7y
- login: bezaca - login: bezaca
count: 9 count: 9
avatarUrl: https://avatars.githubusercontent.com/u/69092910?u=4ac58eab99bd37d663f3d23551df96d4fbdbf760&v=4 avatarUrl: https://avatars.githubusercontent.com/u/69092910?u=4ac58eab99bd37d663f3d23551df96d4fbdbf760&v=4
url: https://github.com/bezaca url: https://github.com/bezaca
- login: solomein-sv
count: 9
avatarUrl: https://avatars.githubusercontent.com/u/46193920?u=46acfb4aeefb1d7b9fdc5a8cbd9eb8744683c47a&v=4
url: https://github.com/solomein-sv
- login: blt232018 - login: blt232018
count: 8 count: 8
avatarUrl: https://avatars.githubusercontent.com/u/43393471?u=172b0e0391db1aa6c1706498d6dfcb003c8a4857&v=4 avatarUrl: https://avatars.githubusercontent.com/u/43393471?u=172b0e0391db1aa6c1706498d6dfcb003c8a4857&v=4
url: https://github.com/blt232018 url: https://github.com/blt232018
- login: rogerbrinkmann
count: 8
avatarUrl: https://avatars.githubusercontent.com/u/5690226?v=4
url: https://github.com/rogerbrinkmann
- login: ComicShrimp - login: ComicShrimp
count: 8 count: 8
avatarUrl: https://avatars.githubusercontent.com/u/43503750?u=b3e4d9a14d9a65d429ce62c566aef73178b7111d&v=4 avatarUrl: https://avatars.githubusercontent.com/u/43503750?u=b3e4d9a14d9a65d429ce62c566aef73178b7111d&v=4
url: https://github.com/ComicShrimp url: https://github.com/ComicShrimp
- login: dimaqq
count: 8
avatarUrl: https://avatars.githubusercontent.com/u/662249?v=4
url: https://github.com/dimaqq
- login: Serrones - login: Serrones
count: 7 count: 7
avatarUrl: https://avatars.githubusercontent.com/u/22691749?u=4795b880e13ca33a73e52fc0ef7dc9c60c8fce47&v=4 avatarUrl: https://avatars.githubusercontent.com/u/22691749?u=4795b880e13ca33a73e52fc0ef7dc9c60c8fce47&v=4
@ -456,10 +468,6 @@ top_reviewers:
count: 7 count: 7
avatarUrl: https://avatars.githubusercontent.com/u/10202690?u=e6f86f5c0c3026a15d6b51792fa3e532b12f1371&v=4 avatarUrl: https://avatars.githubusercontent.com/u/10202690?u=e6f86f5c0c3026a15d6b51792fa3e532b12f1371&v=4
url: https://github.com/raphaelauv url: https://github.com/raphaelauv
- login: BilalAlpaslan
count: 7
avatarUrl: https://avatars.githubusercontent.com/u/47563997?u=63ed66e304fe8d765762c70587d61d9196e5c82d&v=4
url: https://github.com/BilalAlpaslan
- login: NastasiaSaby - login: NastasiaSaby
count: 7 count: 7
avatarUrl: https://avatars.githubusercontent.com/u/8245071?u=b3afd005f9e4bf080c219ef61a592b3a8004b764&v=4 avatarUrl: https://avatars.githubusercontent.com/u/8245071?u=b3afd005f9e4bf080c219ef61a592b3a8004b764&v=4
@ -472,31 +480,23 @@ top_reviewers:
count: 7 count: 7
avatarUrl: https://avatars.githubusercontent.com/u/34248814?v=4 avatarUrl: https://avatars.githubusercontent.com/u/34248814?v=4
url: https://github.com/krocdort url: https://github.com/krocdort
- login: dimaqq - login: NinaHwang
count: 7 count: 7
avatarUrl: https://avatars.githubusercontent.com/u/662249?v=4 avatarUrl: https://avatars.githubusercontent.com/u/79563565?u=1741703bd6c8f491503354b363a86e879b4c1cab&v=4
url: https://github.com/dimaqq url: https://github.com/NinaHwang
- login: jovicon - login: jovicon
count: 6 count: 6
avatarUrl: https://avatars.githubusercontent.com/u/21287303?u=b049eac3e51a4c0473c2efe66b4d28a7d8f2b572&v=4 avatarUrl: https://avatars.githubusercontent.com/u/21287303?u=b049eac3e51a4c0473c2efe66b4d28a7d8f2b572&v=4
url: https://github.com/jovicon url: https://github.com/jovicon
- login: NinaHwang - login: LorhanSohaky
count: 6 count: 6
avatarUrl: https://avatars.githubusercontent.com/u/79563565?u=1741703bd6c8f491503354b363a86e879b4c1cab&v=4 avatarUrl: https://avatars.githubusercontent.com/u/16273730?u=095b66f243a2cd6a0aadba9a095009f8aaf18393&v=4
url: https://github.com/NinaHwang url: https://github.com/LorhanSohaky
- login: peidrao
count: 6
avatarUrl: https://avatars.githubusercontent.com/u/32584628?u=88c2cb42a99e0f50cdeae3606992568184783ee5&v=4
url: https://github.com/peidrao
- login: diogoduartec - login: diogoduartec
count: 5 count: 5
avatarUrl: https://avatars.githubusercontent.com/u/31852339?u=b50fc11c531e9b77922e19edfc9e7233d4d7b92e&v=4 avatarUrl: https://avatars.githubusercontent.com/u/31852339?u=b50fc11c531e9b77922e19edfc9e7233d4d7b92e&v=4
url: https://github.com/diogoduartec url: https://github.com/diogoduartec
- login: n25a
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/49960770?u=eb3c95338741c78fff7d9d5d7ace9617e53eee4a&v=4
url: https://github.com/n25a
- login: izaguerreiro
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/2241504?v=4
url: https://github.com/izaguerreiro
- login: israteneda
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/20668624?u=d7b2961d330aca65fbce5bdb26a0800a3d23ed2d&v=4
url: https://github.com/israteneda

24
docs/en/data/sponsors.yml

@ -5,12 +5,9 @@ gold:
- url: https://cryptapi.io/ - url: https://cryptapi.io/
title: "CryptAPI: Your easy to use, secure and privacy oriented payment gateway." title: "CryptAPI: Your easy to use, secure and privacy oriented payment gateway."
img: https://fastapi.tiangolo.com/img/sponsors/cryptapi.svg img: https://fastapi.tiangolo.com/img/sponsors/cryptapi.svg
- url: https://www.dropbase.io/careers - url: https://classiq.link/n4s
title: Dropbase - seamlessly collect, clean, and centralize data. title: Join the team building a new SaaS platform that will change the computing world
img: https://fastapi.tiangolo.com/img/sponsors/dropbase.svg img: https://fastapi.tiangolo.com/img/sponsors/classiq.png
- url: https://striveworks.us/careers?utm_source=fastapi&utm_medium=sponsor_banner&utm_campaign=feb_march#openings
title: https://striveworks.us/careers
img: https://fastapi.tiangolo.com/img/sponsors/striveworks.png
silver: silver:
- url: https://www.deta.sh/?ref=fastapi - url: https://www.deta.sh/?ref=fastapi
title: The launchpad for all your (team's) ideas title: The launchpad for all your (team's) ideas
@ -18,9 +15,6 @@ silver:
- url: https://www.investsuite.com/jobs - url: https://www.investsuite.com/jobs
title: Wealthtech jobs with FastAPI title: Wealthtech jobs with FastAPI
img: https://fastapi.tiangolo.com/img/sponsors/investsuite.svg img: https://fastapi.tiangolo.com/img/sponsors/investsuite.svg
- url: https://www.vim.so/?utm_source=FastAPI
title: We help you master vim with interactive exercises
img: https://fastapi.tiangolo.com/img/sponsors/vimso.png
- url: https://talkpython.fm/fastapi-sponsor - url: https://talkpython.fm/fastapi-sponsor
title: FastAPI video courses on demand from people you trust title: FastAPI video courses on demand from people you trust
img: https://fastapi.tiangolo.com/img/sponsors/talkpython.png img: https://fastapi.tiangolo.com/img/sponsors/talkpython.png
@ -30,7 +24,13 @@ silver:
- url: https://github.com/deepset-ai/haystack/ - url: https://github.com/deepset-ai/haystack/
title: Build powerful search from composable, open source building blocks title: Build powerful search from composable, open source building blocks
img: https://fastapi.tiangolo.com/img/sponsors/haystack-fastapi.svg img: https://fastapi.tiangolo.com/img/sponsors/haystack-fastapi.svg
- url: https://www.udemy.com/course/fastapi-rest/
title: Learn FastAPI by building a complete project. Extend your knowledge on advanced web development-AWS, Payments, Emails.
img: https://fastapi.tiangolo.com/img/sponsors/ines-course.jpg
bronze: bronze:
- url: https://calmcode.io - url: https://www.exoflare.com/open-source/?utm_source=FastAPI&utm_campaign=open_source
title: Code. Simply. Clearly. Calmly. title: Biosecurity risk assessments made easy.
img: https://fastapi.tiangolo.com/img/sponsors/calmcode.jpg img: https://fastapi.tiangolo.com/img/sponsors/exoflare.png
- url: https://striveworks.us/careers?utm_source=fastapi&utm_medium=sponsor_banner&utm_campaign=feb_march#openings
title: https://striveworks.us/careers
img: https://fastapi.tiangolo.com/img/sponsors/striveworks.png

5
docs/en/data/sponsors_badge.yml

@ -2,10 +2,9 @@ logins:
- jina-ai - jina-ai
- deta - deta
- investsuite - investsuite
- vimsoHQ
- mikeckennedy - mikeckennedy
- koaning
- deepset-ai - deepset-ai
- cryptapi - cryptapi
- DropbaseHQ
- Striveworks - Striveworks
- xoflare
- InesIvanova

BIN
docs/en/docs/img/sponsors/classiq-banner.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

BIN
docs/en/docs/img/sponsors/classiq.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

BIN
docs/en/docs/img/sponsors/exoflare.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

BIN
docs/en/docs/img/sponsors/fastapi-course-bundle-banner.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
docs/en/docs/img/sponsors/ines-course.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

39
docs/en/docs/release-notes.md

@ -2,6 +2,45 @@
## Latest Changes ## Latest Changes
## 0.75.2
This release includes upgrades to third-party packages that handle security issues. Although there's a chance these issues don't affect you in particular, please upgrade as soon as possible.
### Fixes
* ✅ Fix new/recent tests with new fixed `ValidationError` JSON Schema. PR [#4806](https://github.com/tiangolo/fastapi/pull/4806) by [@tiangolo](https://github.com/tiangolo).
* 🐛 Fix JSON Schema for `ValidationError` at field `loc`. PR [#3810](https://github.com/tiangolo/fastapi/pull/3810) by [@dconathan](https://github.com/dconathan).
* 🐛 Fix support for prefix on APIRouter WebSockets. PR [#2640](https://github.com/tiangolo/fastapi/pull/2640) by [@Kludex](https://github.com/Kludex).
### Upgrades
* ⬆️ Update ujson ranges for CVE-2021-45958. PR [#4804](https://github.com/tiangolo/fastapi/pull/4804) by [@tiangolo](https://github.com/tiangolo).
* ⬆️ Upgrade dependencies upper range for extras "all". PR [#4803](https://github.com/tiangolo/fastapi/pull/4803) by [@tiangolo](https://github.com/tiangolo).
* ⬆ Upgrade Swagger UI - swagger-ui-dist@4. This handles a security issue in Swagger UI itself where it could be possible to inject HTML into Swagger UI. Please upgrade as soon as you can, in particular if you expose your Swagger UI (`/docs`) publicly to non-expert users. PR [#4347](https://github.com/tiangolo/fastapi/pull/4347) by [@RAlanWright](https://github.com/RAlanWright).
### Internal
* 🔧 Update sponsors, add: ExoFlare, Ines Course; remove: Dropbase, Vim.so, Calmcode; update: Striveworks, TalkPython and TestDriven.io. PR [#4805](https://github.com/tiangolo/fastapi/pull/4805) by [@tiangolo](https://github.com/tiangolo).
* ⬆️ Upgrade Codecov GitHub Action. PR [#4801](https://github.com/tiangolo/fastapi/pull/4801) by [@tiangolo](https://github.com/tiangolo).
## 0.75.1
### Translations
* 🌐 Start Dutch translations. PR [#4703](https://github.com/tiangolo/fastapi/pull/4703) by [@tiangolo](https://github.com/tiangolo).
* 🌐 Start Persian/Farsi translations. PR [#4243](https://github.com/tiangolo/fastapi/pull/4243) by [@aminalaee](https://github.com/aminalaee).
* ✏ Reword sentence about handling errors. PR [#1993](https://github.com/tiangolo/fastapi/pull/1993) by [@khuhroproeza](https://github.com/khuhroproeza).
### Internal
* 👥 Update FastAPI People. PR [#4752](https://github.com/tiangolo/fastapi/pull/4752) by [@github-actions[bot]](https://github.com/apps/github-actions).
* ➖ Temporarily remove typer-cli from dependencies and upgrade Black to unblock Pydantic CI. PR [#4754](https://github.com/tiangolo/fastapi/pull/4754) by [@tiangolo](https://github.com/tiangolo).
* 🔧 Add configuration to notify Dutch translations. PR [#4702](https://github.com/tiangolo/fastapi/pull/4702) by [@tiangolo](https://github.com/tiangolo).
* 👥 Update FastAPI People. PR [#4699](https://github.com/tiangolo/fastapi/pull/4699) by [@github-actions[bot]](https://github.com/apps/github-actions).
* 🐛 Fix FastAPI People generation to include missing file in commit. PR [#4695](https://github.com/tiangolo/fastapi/pull/4695) by [@tiangolo](https://github.com/tiangolo).
* 🔧 Update Classiq sponsor links. PR [#4688](https://github.com/tiangolo/fastapi/pull/4688) by [@tiangolo](https://github.com/tiangolo).
* 🔧 Add Classiq sponsor. PR [#4671](https://github.com/tiangolo/fastapi/pull/4671) by [@tiangolo](https://github.com/tiangolo).
* 📝 Add Jina's QA Bot to the docs to help people that want to ask quick questions. PR [#4655](https://github.com/tiangolo/fastapi/pull/4655) by [@tiangolo](https://github.com/tiangolo) based on original PR [#4626](https://github.com/tiangolo/fastapi/pull/4626) by [@hanxiao](https://github.com/hanxiao). * 📝 Add Jina's QA Bot to the docs to help people that want to ask quick questions. PR [#4655](https://github.com/tiangolo/fastapi/pull/4655) by [@tiangolo](https://github.com/tiangolo) based on original PR [#4626](https://github.com/tiangolo/fastapi/pull/4626) by [@hanxiao](https://github.com/hanxiao).
## 0.75.0 ## 0.75.0

4
docs/en/docs/tutorial/handling-errors.md

@ -252,9 +252,7 @@ from starlette.exceptions import HTTPException as StarletteHTTPException
### Re-use **FastAPI**'s exception handlers ### Re-use **FastAPI**'s exception handlers
You could also just want to use the exception somehow, but then use the same default exception handlers from **FastAPI**. If you want to use the exception along with the same default exception handlers from **FastAPI**, You can import and re-use the default exception handlers from `fastapi.exception_handlers`:
You can import and re-use the default exception handlers from `fastapi.exception_handlers`:
```Python hl_lines="2-5 15 21" ```Python hl_lines="2-5 15 21"
{!../../../docs_src/handling_errors/tutorial006.py!} {!../../../docs_src/handling_errors/tutorial006.py!}

6
docs/en/mkdocs.yml

@ -40,11 +40,13 @@ nav:
- az: /az/ - az: /az/
- de: /de/ - de: /de/
- es: /es/ - es: /es/
- fa: /fa/
- fr: /fr/ - fr: /fr/
- id: /id/ - id: /id/
- it: /it/ - it: /it/
- ja: /ja/ - ja: /ja/
- ko: /ko/ - ko: /ko/
- nl: /nl/
- pl: /pl/ - pl: /pl/
- pt: /pt/ - pt: /pt/
- ru: /ru/ - ru: /ru/
@ -204,6 +206,8 @@ extra:
name: de name: de
- link: /es/ - link: /es/
name: es - español name: es - español
- link: /fa/
name: fa
- link: /fr/ - link: /fr/
name: fr - français name: fr - français
- link: /id/ - link: /id/
@ -214,6 +218,8 @@ extra:
name: ja - 日本語 name: ja - 日本語
- link: /ko/ - link: /ko/
name: ko - 한국어 name: ko - 한국어
- link: /nl/
name: nl
- link: /pl/ - link: /pl/
name: pl name: pl
- link: /pt/ - link: /pt/

18
docs/en/overrides/main.html

@ -22,16 +22,10 @@
</div> </div>
</div> </div>
<div id="announce-right" style="position: relative;"> <div id="announce-right" style="position: relative;">
<!-- <div class="item">
<a title="The launchpad for all your (team's) ideas" style="display: block; position: relative;" href="https://www.deta.sh/?ref=fastapi" target="_blank">
<span class="sponsor-badge">sponsor</span>
<img class="sponsor-image" src="/img/sponsors/deta-banner.svg" />
</a>
</div> -->
<div class="item"> <div class="item">
<a title="Get three courses at 10% off their current prices! Plus, we'll be donating 10% of all profits from sales of this bundle to the FastAPI team." style="display: block; position: relative;" href="https://testdriven.io/talkpython/" target="_blank"> <a title="Get three courses at 10% off their current prices! Plus, we'll be donating 10% of all profits from sales of this bundle to the FastAPI team." style="display: block; position: relative;" href="https://testdriven.io/talkpython/" target="_blank">
<span class="sponsor-badge">sponsor</span> <span class="sponsor-badge">sponsor</span>
<img class="sponsor-image" src="/img/sponsors/fastapi-course-bundle-banner.svg" /> <img class="sponsor-image" src="/img/sponsors/fastapi-course-bundle-banner.png" />
</a> </a>
</div> </div>
<div class="item"> <div class="item">
@ -47,15 +41,9 @@
</a> </a>
</div> </div>
<div class="item"> <div class="item">
<a title="Dropbase - seamlessly collect, clean, and centralize data." style="display: block; position: relative;" href="https://www.dropbase.io/careers" target="_blank"> <a title="Join the team building a new SaaS platform that will change the computing world" style="display: block; position: relative;" href="https://classiq.link/mzg" target="_blank">
<span class="sponsor-badge">sponsor</span>
<img class="sponsor-image" src="/img/sponsors/dropbase-banner.svg" />
</a>
</div>
<div class="item">
<a title="https://striveworks.us/careers" style="display: block; position: relative;" href="https://striveworks.us/careers?utm_source=fastapi&utm_medium=small_banner&utm_campaign=feb_march#openings" target="_blank">
<span class="sponsor-badge">sponsor</span> <span class="sponsor-badge">sponsor</span>
<img class="sponsor-image" src="/img/sponsors/striveworks-banner.png" /> <img class="sponsor-image" src="/img/sponsors/classiq-banner.png" />
</a> </a>
</div> </div>
</div> </div>

6
docs/es/mkdocs.yml

@ -40,11 +40,13 @@ nav:
- az: /az/ - az: /az/
- de: /de/ - de: /de/
- es: /es/ - es: /es/
- fa: /fa/
- fr: /fr/ - fr: /fr/
- id: /id/ - id: /id/
- it: /it/ - it: /it/
- ja: /ja/ - ja: /ja/
- ko: /ko/ - ko: /ko/
- nl: /nl/
- pl: /pl/ - pl: /pl/
- pt: /pt/ - pt: /pt/
- ru: /ru/ - ru: /ru/
@ -107,6 +109,8 @@ extra:
name: de name: de
- link: /es/ - link: /es/
name: es - español name: es - español
- link: /fa/
name: fa
- link: /fr/ - link: /fr/
name: fr - français name: fr - français
- link: /id/ - link: /id/
@ -117,6 +121,8 @@ extra:
name: ja - 日本語 name: ja - 日本語
- link: /ko/ - link: /ko/
name: ko - 한국어 name: ko - 한국어
- link: /nl/
name: nl
- link: /pl/ - link: /pl/
name: pl name: pl
- link: /pt/ - link: /pt/

468
docs/fa/docs/index.md

@ -0,0 +1,468 @@
{!../../../docs/missing-translation.md!}
<p align="center">
<a href="https://fastapi.tiangolo.com"><img src="https://fastapi.tiangolo.com/img/logo-margin/logo-teal.png" alt="FastAPI"></a>
</p>
<p align="center">
<em>FastAPI framework, high performance, easy to learn, fast to code, ready for production</em>
</p>
<p align="center">
<a href="https://github.com/tiangolo/fastapi/actions?query=workflow%3ATest+event%3Apush+branch%3Amaster" target="_blank">
<img src="https://github.com/tiangolo/fastapi/workflows/Test/badge.svg?event=push&branch=master" alt="Test">
</a>
<a href="https://codecov.io/gh/tiangolo/fastapi" target="_blank">
<img src="https://img.shields.io/codecov/c/github/tiangolo/fastapi?color=%2334D058" alt="Coverage">
</a>
<a href="https://pypi.org/project/fastapi" target="_blank">
<img src="https://img.shields.io/pypi/v/fastapi?color=%2334D058&label=pypi%20package" alt="Package version">
</a>
<a href="https://pypi.org/project/fastapi" target="_blank">
<img src="https://img.shields.io/pypi/pyversions/fastapi.svg?color=%2334D058" alt="Supported Python versions">
</a>
</p>
---
**Documentation**: <a href="https://fastapi.tiangolo.com" target="_blank">https://fastapi.tiangolo.com</a>
**Source Code**: <a href="https://github.com/tiangolo/fastapi" target="_blank">https://github.com/tiangolo/fastapi</a>
---
FastAPI is a modern, fast (high-performance), web framework for building APIs with Python 3.6+ based on standard Python type hints.
The key features are:
* **Fast**: Very high performance, on par with **NodeJS** and **Go** (thanks to Starlette and Pydantic). [One of the fastest Python frameworks available](#performance).
* **Fast to code**: Increase the speed to develop features by about 200% to 300%. *
* **Fewer bugs**: Reduce about 40% of human (developer) induced errors. *
* **Intuitive**: Great editor support. <abbr title="also known as auto-complete, autocompletion, IntelliSense">Completion</abbr> everywhere. Less time debugging.
* **Easy**: Designed to be easy to use and learn. Less time reading docs.
* **Short**: Minimize code duplication. Multiple features from each parameter declaration. Fewer bugs.
* **Robust**: Get production-ready code. With automatic interactive documentation.
* **Standards-based**: Based on (and fully compatible with) the open standards for APIs: <a href="https://github.com/OAI/OpenAPI-Specification" class="external-link" target="_blank">OpenAPI</a> (previously known as Swagger) and <a href="https://json-schema.org/" class="external-link" target="_blank">JSON Schema</a>.
<small>* estimation based on tests on an internal development team, building production applications.</small>
## Sponsors
<!-- sponsors -->
{% if sponsors %}
{% for sponsor in sponsors.gold -%}
<a href="{{ sponsor.url }}" target="_blank" title="{{ sponsor.title }}"><img src="{{ sponsor.img }}" style="border-radius:15px"></a>
{% endfor -%}
{%- for sponsor in sponsors.silver -%}
<a href="{{ sponsor.url }}" target="_blank" title="{{ sponsor.title }}"><img src="{{ sponsor.img }}" style="border-radius:15px"></a>
{% endfor %}
{% endif %}
<!-- /sponsors -->
<a href="https://fastapi.tiangolo.com/fastapi-people/#sponsors" class="external-link" target="_blank">Other sponsors</a>
## Opinions
"_[...] I'm using **FastAPI** a ton these days. [...] I'm actually planning to use it for all of my team's **ML services at Microsoft**. Some of them are getting integrated into the core **Windows** product and some **Office** products._"
<div style="text-align: right; margin-right: 10%;">Kabir Khan - <strong>Microsoft</strong> <a href="https://github.com/tiangolo/fastapi/pull/26" target="_blank"><small>(ref)</small></a></div>
---
"_We adopted the **FastAPI** library to spawn a **REST** server that can be queried to obtain **predictions**. [for Ludwig]_"
<div style="text-align: right; margin-right: 10%;">Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - <strong>Uber</strong> <a href="https://eng.uber.com/ludwig-v0-2/" target="_blank"><small>(ref)</small></a></div>
---
"_**Netflix** is pleased to announce the open-source release of our **crisis management** orchestration framework: **Dispatch**! [built with **FastAPI**]_"
<div style="text-align: right; margin-right: 10%;">Kevin Glisson, Marc Vilanova, Forest Monsen - <strong>Netflix</strong> <a href="https://netflixtechblog.com/introducing-dispatch-da4b8a2a8072" target="_blank"><small>(ref)</small></a></div>
---
"_I’m over the moon excited about **FastAPI**. It’s so fun!_"
<div style="text-align: right; margin-right: 10%;">Brian Okken - <strong><a href="https://pythonbytes.fm/episodes/show/123/time-to-right-the-py-wrongs?time_in_sec=855" target="_blank">Python Bytes</a> podcast host</strong> <a href="https://twitter.com/brianokken/status/1112220079972728832" target="_blank"><small>(ref)</small></a></div>
---
"_Honestly, what you've built looks super solid and polished. In many ways, it's what I wanted **Hug** to be - it's really inspiring to see someone build that._"
<div style="text-align: right; margin-right: 10%;">Timothy Crosley - <strong><a href="https://www.hug.rest/" target="_blank">Hug</a> creator</strong> <a href="https://news.ycombinator.com/item?id=19455465" target="_blank"><small>(ref)</small></a></div>
---
"_If you're looking to learn one **modern framework** for building REST APIs, check out **FastAPI** [...] It's fast, easy to use and easy to learn [...]_"
"_We've switched over to **FastAPI** for our **APIs** [...] I think you'll like it [...]_"
<div style="text-align: right; margin-right: 10%;">Ines Montani - Matthew Honnibal - <strong><a href="https://explosion.ai" target="_blank">Explosion AI</a> founders - <a href="https://spacy.io" target="_blank">spaCy</a> creators</strong> <a href="https://twitter.com/_inesmontani/status/1144173225322143744" target="_blank"><small>(ref)</small></a> - <a href="https://twitter.com/honnibal/status/1144031421859655680" target="_blank"><small>(ref)</small></a></div>
---
## **Typer**, the FastAPI of CLIs
<a href="https://typer.tiangolo.com" target="_blank"><img src="https://typer.tiangolo.com/img/logo-margin/logo-margin-vector.svg" style="width: 20%;"></a>
If you are building a <abbr title="Command Line Interface">CLI</abbr> app to be used in the terminal instead of a web API, check out <a href="https://typer.tiangolo.com/" class="external-link" target="_blank">**Typer**</a>.
**Typer** is FastAPI's little sibling. And it's intended to be the **FastAPI of CLIs**. ⌨️ 🚀
## Requirements
Python 3.6+
FastAPI stands on the shoulders of giants:
* <a href="https://www.starlette.io/" class="external-link" target="_blank">Starlette</a> for the web parts.
* <a href="https://pydantic-docs.helpmanual.io/" class="external-link" target="_blank">Pydantic</a> for the data parts.
## Installation
<div class="termy">
```console
$ pip install fastapi
---> 100%
```
</div>
You will also need an ASGI server, for production such as <a href="https://www.uvicorn.org" class="external-link" target="_blank">Uvicorn</a> or <a href="https://gitlab.com/pgjones/hypercorn" class="external-link" target="_blank">Hypercorn</a>.
<div class="termy">
```console
$ pip install "uvicorn[standard]"
---> 100%
```
</div>
## Example
### Create it
* Create a file `main.py` with:
```Python
from typing import Optional
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
return {"item_id": item_id, "q": q}
```
<details markdown="1">
<summary>Or use <code>async def</code>...</summary>
If your code uses `async` / `await`, use `async def`:
```Python hl_lines="9 14"
from typing import Optional
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: Optional[str] = None):
return {"item_id": item_id, "q": q}
```
**Note**:
If you don't know, check the _"In a hurry?"_ section about <a href="https://fastapi.tiangolo.com/async/#in-a-hurry" target="_blank">`async` and `await` in the docs</a>.
</details>
### Run it
Run the server with:
<div class="termy">
```console
$ uvicorn main:app --reload
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [28720]
INFO: Started server process [28722]
INFO: Waiting for application startup.
INFO: Application startup complete.
```
</div>
<details markdown="1">
<summary>About the command <code>uvicorn main:app --reload</code>...</summary>
The command `uvicorn main:app` refers to:
* `main`: the file `main.py` (the Python "module").
* `app`: the object created inside of `main.py` with the line `app = FastAPI()`.
* `--reload`: make the server restart after code changes. Only do this for development.
</details>
### Check it
Open your browser at <a href="http://127.0.0.1:8000/items/5?q=somequery" class="external-link" target="_blank">http://127.0.0.1:8000/items/5?q=somequery</a>.
You will see the JSON response as:
```JSON
{"item_id": 5, "q": "somequery"}
```
You already created an API that:
* Receives HTTP requests in the _paths_ `/` and `/items/{item_id}`.
* Both _paths_ take `GET` <em>operations</em> (also known as HTTP _methods_).
* The _path_ `/items/{item_id}` has a _path parameter_ `item_id` that should be an `int`.
* The _path_ `/items/{item_id}` has an optional `str` _query parameter_ `q`.
### Interactive API docs
Now go to <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a>.
You will see the automatic interactive API documentation (provided by <a href="https://github.com/swagger-api/swagger-ui" class="external-link" target="_blank">Swagger UI</a>):
![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png)
### Alternative API docs
And now, go to <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a>.
You will see the alternative automatic documentation (provided by <a href="https://github.com/Rebilly/ReDoc" class="external-link" target="_blank">ReDoc</a>):
![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png)
## Example upgrade
Now modify the file `main.py` to receive a body from a `PUT` request.
Declare the body using standard Python types, thanks to Pydantic.
```Python hl_lines="4 9-12 25-27"
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
is_offer: Optional[bool] = None
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
return {"item_id": item_id, "q": q}
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
return {"item_name": item.name, "item_id": item_id}
```
The server should reload automatically (because you added `--reload` to the `uvicorn` command above).
### Interactive API docs upgrade
Now go to <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a>.
* The interactive API documentation will be automatically updated, including the new body:
![Swagger UI](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png)
* Click on the button "Try it out", it allows you to fill the parameters and directly interact with the API:
![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-04-swagger-03.png)
* Then click on the "Execute" button, the user interface will communicate with your API, send the parameters, get the results and show them on the screen:
![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-05-swagger-04.png)
### Alternative API docs upgrade
And now, go to <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a>.
* The alternative documentation will also reflect the new query parameter and body:
![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png)
### Recap
In summary, you declare **once** the types of parameters, body, etc. as function parameters.
You do that with standard modern Python types.
You don't have to learn a new syntax, the methods or classes of a specific library, etc.
Just standard **Python 3.6+**.
For example, for an `int`:
```Python
item_id: int
```
or for a more complex `Item` model:
```Python
item: Item
```
...and with that single declaration you get:
* Editor support, including:
* Completion.
* Type checks.
* Validation of data:
* Automatic and clear errors when the data is invalid.
* Validation even for deeply nested JSON objects.
* <abbr title="also known as: serialization, parsing, marshalling">Conversion</abbr> of input data: coming from the network to Python data and types. Reading from:
* JSON.
* Path parameters.
* Query parameters.
* Cookies.
* Headers.
* Forms.
* Files.
* <abbr title="also known as: serialization, parsing, marshalling">Conversion</abbr> of output data: converting from Python data and types to network data (as JSON):
* Convert Python types (`str`, `int`, `float`, `bool`, `list`, etc).
* `datetime` objects.
* `UUID` objects.
* Database models.
* ...and many more.
* Automatic interactive API documentation, including 2 alternative user interfaces:
* Swagger UI.
* ReDoc.
---
Coming back to the previous code example, **FastAPI** will:
* Validate that there is an `item_id` in the path for `GET` and `PUT` requests.
* Validate that the `item_id` is of type `int` for `GET` and `PUT` requests.
* If it is not, the client will see a useful, clear error.
* Check if there is an optional query parameter named `q` (as in `http://127.0.0.1:8000/items/foo?q=somequery`) for `GET` requests.
* As the `q` parameter is declared with `= None`, it is optional.
* Without the `None` it would be required (as is the body in the case with `PUT`).
* For `PUT` requests to `/items/{item_id}`, Read the body as JSON:
* Check that it has a required attribute `name` that should be a `str`.
* Check that it has a required attribute `price` that has to be a `float`.
* Check that it has an optional attribute `is_offer`, that should be a `bool`, if present.
* All this would also work for deeply nested JSON objects.
* Convert from and to JSON automatically.
* Document everything with OpenAPI, that can be used by:
* Interactive documentation systems.
* Automatic client code generation systems, for many languages.
* Provide 2 interactive documentation web interfaces directly.
---
We just scratched the surface, but you already get the idea of how it all works.
Try changing the line with:
```Python
return {"item_name": item.name, "item_id": item_id}
```
...from:
```Python
... "item_name": item.name ...
```
...to:
```Python
... "item_price": item.price ...
```
...and see how your editor will auto-complete the attributes and know their types:
![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png)
For a more complete example including more features, see the <a href="https://fastapi.tiangolo.com/tutorial/">Tutorial - User Guide</a>.
**Spoiler alert**: the tutorial - user guide includes:
* Declaration of **parameters** from other different places as: **headers**, **cookies**, **form fields** and **files**.
* How to set **validation constraints** as `maximum_length` or `regex`.
* A very powerful and easy to use **<abbr title="also known as components, resources, providers, services, injectables">Dependency Injection</abbr>** system.
* Security and authentication, including support for **OAuth2** with **JWT tokens** and **HTTP Basic** auth.
* More advanced (but equally easy) techniques for declaring **deeply nested JSON models** (thanks to Pydantic).
* **GraphQL** integration with <a href="https://strawberry.rocks" class="external-link" target="_blank">Strawberry</a> and other libraries.
* Many extra features (thanks to Starlette) as:
* **WebSockets**
* extremely easy tests based on `requests` and `pytest`
* **CORS**
* **Cookie Sessions**
* ...and more.
## Performance
Independent TechEmpower benchmarks show **FastAPI** applications running under Uvicorn as <a href="https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7" class="external-link" target="_blank">one of the fastest Python frameworks available</a>, only below Starlette and Uvicorn themselves (used internally by FastAPI). (*)
To understand more about it, see the section <a href="https://fastapi.tiangolo.com/benchmarks/" class="internal-link" target="_blank">Benchmarks</a>.
## Optional Dependencies
Used by Pydantic:
* <a href="https://github.com/esnme/ultrajson" target="_blank"><code>ujson</code></a> - for faster JSON <abbr title="converting the string that comes from an HTTP request into Python data">"parsing"</abbr>.
* <a href="https://github.com/JoshData/python-email-validator" target="_blank"><code>email_validator</code></a> - for email validation.
Used by Starlette:
* <a href="https://requests.readthedocs.io" target="_blank"><code>requests</code></a> - Required if you want to use the `TestClient`.
* <a href="https://jinja.palletsprojects.com" target="_blank"><code>jinja2</code></a> - Required if you want to use the default template configuration.
* <a href="https://andrew-d.github.io/python-multipart/" target="_blank"><code>python-multipart</code></a> - Required if you want to support form <abbr title="converting the string that comes from an HTTP request into Python data">"parsing"</abbr>, with `request.form()`.
* <a href="https://pythonhosted.org/itsdangerous/" target="_blank"><code>itsdangerous</code></a> - Required for `SessionMiddleware` support.
* <a href="https://pyyaml.org/wiki/PyYAMLDocumentation" target="_blank"><code>pyyaml</code></a> - Required for Starlette's `SchemaGenerator` support (you probably don't need it with FastAPI).
* <a href="https://github.com/esnme/ultrajson" target="_blank"><code>ujson</code></a> - Required if you want to use `UJSONResponse`.
Used by FastAPI / Starlette:
* <a href="https://www.uvicorn.org" target="_blank"><code>uvicorn</code></a> - for the server that loads and serves your application.
* <a href="https://github.com/ijl/orjson" target="_blank"><code>orjson</code></a> - Required if you want to use `ORJSONResponse`.
You can install all of these with `pip install "fastapi[all]"`.
## License
This project is licensed under the terms of the MIT license.

135
docs/fa/mkdocs.yml

@ -0,0 +1,135 @@
site_name: FastAPI
site_description: FastAPI framework, high performance, easy to learn, fast to code, ready for production
site_url: https://fastapi.tiangolo.com/fa/
theme:
name: material
custom_dir: overrides
palette:
- scheme: default
primary: teal
accent: amber
toggle:
icon: material/lightbulb
name: Switch to light mode
- scheme: slate
primary: teal
accent: amber
toggle:
icon: material/lightbulb-outline
name: Switch to dark mode
features:
- search.suggest
- search.highlight
- content.tabs.link
icon:
repo: fontawesome/brands/github-alt
logo: https://fastapi.tiangolo.com/img/icon-white.svg
favicon: https://fastapi.tiangolo.com/img/favicon.png
language: fa
repo_name: tiangolo/fastapi
repo_url: https://github.com/tiangolo/fastapi
edit_uri: ''
plugins:
- search
- markdownextradata:
data: data
nav:
- FastAPI: index.md
- Languages:
- en: /
- az: /az/
- de: /de/
- es: /es/
- fa: /fa/
- fr: /fr/
- id: /id/
- it: /it/
- ja: /ja/
- ko: /ko/
- nl: /nl/
- pl: /pl/
- pt: /pt/
- ru: /ru/
- sq: /sq/
- tr: /tr/
- uk: /uk/
- zh: /zh/
markdown_extensions:
- toc:
permalink: true
- markdown.extensions.codehilite:
guess_lang: false
- mdx_include:
base_path: docs
- admonition
- codehilite
- extra
- pymdownx.superfences:
custom_fences:
- name: mermaid
class: mermaid
format: !!python/name:pymdownx.superfences.fence_code_format ''
- pymdownx.tabbed:
alternate_style: true
extra:
analytics:
provider: google
property: UA-133183413-1
social:
- icon: fontawesome/brands/github-alt
link: https://github.com/tiangolo/fastapi
- icon: fontawesome/brands/discord
link: https://discord.gg/VQjSZaeJmf
- icon: fontawesome/brands/twitter
link: https://twitter.com/fastapi
- icon: fontawesome/brands/linkedin
link: https://www.linkedin.com/in/tiangolo
- icon: fontawesome/brands/dev
link: https://dev.to/tiangolo
- icon: fontawesome/brands/medium
link: https://medium.com/@tiangolo
- icon: fontawesome/solid/globe
link: https://tiangolo.com
alternate:
- link: /
name: en - English
- link: /az/
name: az
- link: /de/
name: de
- link: /es/
name: es - español
- link: /fa/
name: fa
- link: /fr/
name: fr - français
- link: /id/
name: id
- link: /it/
name: it - italiano
- link: /ja/
name: ja - 日本語
- link: /ko/
name: ko - 한국어
- link: /nl/
name: nl
- link: /pl/
name: pl
- link: /pt/
name: pt - português
- link: /ru/
name: ru - русский язык
- link: /sq/
name: sq - shqip
- link: /tr/
name: tr - Türkçe
- link: /uk/
name: uk - українська мова
- link: /zh/
name: zh - 汉语
extra_css:
- https://fastapi.tiangolo.com/css/termynal.css
- https://fastapi.tiangolo.com/css/custom.css
extra_javascript:
- https://fastapi.tiangolo.com/js/termynal.js
- https://fastapi.tiangolo.com/js/custom.js

0
docs/fa/overrides/.gitignore

6
docs/fr/mkdocs.yml

@ -40,11 +40,13 @@ nav:
- az: /az/ - az: /az/
- de: /de/ - de: /de/
- es: /es/ - es: /es/
- fa: /fa/
- fr: /fr/ - fr: /fr/
- id: /id/ - id: /id/
- it: /it/ - it: /it/
- ja: /ja/ - ja: /ja/
- ko: /ko/ - ko: /ko/
- nl: /nl/
- pl: /pl/ - pl: /pl/
- pt: /pt/ - pt: /pt/
- ru: /ru/ - ru: /ru/
@ -112,6 +114,8 @@ extra:
name: de name: de
- link: /es/ - link: /es/
name: es - español name: es - español
- link: /fa/
name: fa
- link: /fr/ - link: /fr/
name: fr - français name: fr - français
- link: /id/ - link: /id/
@ -122,6 +126,8 @@ extra:
name: ja - 日本語 name: ja - 日本語
- link: /ko/ - link: /ko/
name: ko - 한국어 name: ko - 한국어
- link: /nl/
name: nl
- link: /pl/ - link: /pl/
name: pl name: pl
- link: /pt/ - link: /pt/

6
docs/id/mkdocs.yml

@ -40,11 +40,13 @@ nav:
- az: /az/ - az: /az/
- de: /de/ - de: /de/
- es: /es/ - es: /es/
- fa: /fa/
- fr: /fr/ - fr: /fr/
- id: /id/ - id: /id/
- it: /it/ - it: /it/
- ja: /ja/ - ja: /ja/
- ko: /ko/ - ko: /ko/
- nl: /nl/
- pl: /pl/ - pl: /pl/
- pt: /pt/ - pt: /pt/
- ru: /ru/ - ru: /ru/
@ -97,6 +99,8 @@ extra:
name: de name: de
- link: /es/ - link: /es/
name: es - español name: es - español
- link: /fa/
name: fa
- link: /fr/ - link: /fr/
name: fr - français name: fr - français
- link: /id/ - link: /id/
@ -107,6 +111,8 @@ extra:
name: ja - 日本語 name: ja - 日本語
- link: /ko/ - link: /ko/
name: ko - 한국어 name: ko - 한국어
- link: /nl/
name: nl
- link: /pl/ - link: /pl/
name: pl name: pl
- link: /pt/ - link: /pt/

6
docs/it/mkdocs.yml

@ -40,11 +40,13 @@ nav:
- az: /az/ - az: /az/
- de: /de/ - de: /de/
- es: /es/ - es: /es/
- fa: /fa/
- fr: /fr/ - fr: /fr/
- id: /id/ - id: /id/
- it: /it/ - it: /it/
- ja: /ja/ - ja: /ja/
- ko: /ko/ - ko: /ko/
- nl: /nl/
- pl: /pl/ - pl: /pl/
- pt: /pt/ - pt: /pt/
- ru: /ru/ - ru: /ru/
@ -97,6 +99,8 @@ extra:
name: de name: de
- link: /es/ - link: /es/
name: es - español name: es - español
- link: /fa/
name: fa
- link: /fr/ - link: /fr/
name: fr - français name: fr - français
- link: /id/ - link: /id/
@ -107,6 +111,8 @@ extra:
name: ja - 日本語 name: ja - 日本語
- link: /ko/ - link: /ko/
name: ko - 한국어 name: ko - 한국어
- link: /nl/
name: nl
- link: /pl/ - link: /pl/
name: pl name: pl
- link: /pt/ - link: /pt/

6
docs/ja/mkdocs.yml

@ -40,11 +40,13 @@ nav:
- az: /az/ - az: /az/
- de: /de/ - de: /de/
- es: /es/ - es: /es/
- fa: /fa/
- fr: /fr/ - fr: /fr/
- id: /id/ - id: /id/
- it: /it/ - it: /it/
- ja: /ja/ - ja: /ja/
- ko: /ko/ - ko: /ko/
- nl: /nl/
- pl: /pl/ - pl: /pl/
- pt: /pt/ - pt: /pt/
- ru: /ru/ - ru: /ru/
@ -137,6 +139,8 @@ extra:
name: de name: de
- link: /es/ - link: /es/
name: es - español name: es - español
- link: /fa/
name: fa
- link: /fr/ - link: /fr/
name: fr - français name: fr - français
- link: /id/ - link: /id/
@ -147,6 +151,8 @@ extra:
name: ja - 日本語 name: ja - 日本語
- link: /ko/ - link: /ko/
name: ko - 한국어 name: ko - 한국어
- link: /nl/
name: nl
- link: /pl/ - link: /pl/
name: pl name: pl
- link: /pt/ - link: /pt/

6
docs/ko/mkdocs.yml

@ -40,11 +40,13 @@ nav:
- az: /az/ - az: /az/
- de: /de/ - de: /de/
- es: /es/ - es: /es/
- fa: /fa/
- fr: /fr/ - fr: /fr/
- id: /id/ - id: /id/
- it: /it/ - it: /it/
- ja: /ja/ - ja: /ja/
- ko: /ko/ - ko: /ko/
- nl: /nl/
- pl: /pl/ - pl: /pl/
- pt: /pt/ - pt: /pt/
- ru: /ru/ - ru: /ru/
@ -107,6 +109,8 @@ extra:
name: de name: de
- link: /es/ - link: /es/
name: es - español name: es - español
- link: /fa/
name: fa
- link: /fr/ - link: /fr/
name: fr - français name: fr - français
- link: /id/ - link: /id/
@ -117,6 +121,8 @@ extra:
name: ja - 日本語 name: ja - 日本語
- link: /ko/ - link: /ko/
name: ko - 한국어 name: ko - 한국어
- link: /nl/
name: nl
- link: /pl/ - link: /pl/
name: pl name: pl
- link: /pt/ - link: /pt/

468
docs/nl/docs/index.md

@ -0,0 +1,468 @@
{!../../../docs/missing-translation.md!}
<p align="center">
<a href="https://fastapi.tiangolo.com"><img src="https://fastapi.tiangolo.com/img/logo-margin/logo-teal.png" alt="FastAPI"></a>
</p>
<p align="center">
<em>FastAPI framework, high performance, easy to learn, fast to code, ready for production</em>
</p>
<p align="center">
<a href="https://github.com/tiangolo/fastapi/actions?query=workflow%3ATest+event%3Apush+branch%3Amaster" target="_blank">
<img src="https://github.com/tiangolo/fastapi/workflows/Test/badge.svg?event=push&branch=master" alt="Test">
</a>
<a href="https://codecov.io/gh/tiangolo/fastapi" target="_blank">
<img src="https://img.shields.io/codecov/c/github/tiangolo/fastapi?color=%2334D058" alt="Coverage">
</a>
<a href="https://pypi.org/project/fastapi" target="_blank">
<img src="https://img.shields.io/pypi/v/fastapi?color=%2334D058&label=pypi%20package" alt="Package version">
</a>
<a href="https://pypi.org/project/fastapi" target="_blank">
<img src="https://img.shields.io/pypi/pyversions/fastapi.svg?color=%2334D058" alt="Supported Python versions">
</a>
</p>
---
**Documentation**: <a href="https://fastapi.tiangolo.com" target="_blank">https://fastapi.tiangolo.com</a>
**Source Code**: <a href="https://github.com/tiangolo/fastapi" target="_blank">https://github.com/tiangolo/fastapi</a>
---
FastAPI is a modern, fast (high-performance), web framework for building APIs with Python 3.6+ based on standard Python type hints.
The key features are:
* **Fast**: Very high performance, on par with **NodeJS** and **Go** (thanks to Starlette and Pydantic). [One of the fastest Python frameworks available](#performance).
* **Fast to code**: Increase the speed to develop features by about 200% to 300%. *
* **Fewer bugs**: Reduce about 40% of human (developer) induced errors. *
* **Intuitive**: Great editor support. <abbr title="also known as auto-complete, autocompletion, IntelliSense">Completion</abbr> everywhere. Less time debugging.
* **Easy**: Designed to be easy to use and learn. Less time reading docs.
* **Short**: Minimize code duplication. Multiple features from each parameter declaration. Fewer bugs.
* **Robust**: Get production-ready code. With automatic interactive documentation.
* **Standards-based**: Based on (and fully compatible with) the open standards for APIs: <a href="https://github.com/OAI/OpenAPI-Specification" class="external-link" target="_blank">OpenAPI</a> (previously known as Swagger) and <a href="https://json-schema.org/" class="external-link" target="_blank">JSON Schema</a>.
<small>* estimation based on tests on an internal development team, building production applications.</small>
## Sponsors
<!-- sponsors -->
{% if sponsors %}
{% for sponsor in sponsors.gold -%}
<a href="{{ sponsor.url }}" target="_blank" title="{{ sponsor.title }}"><img src="{{ sponsor.img }}" style="border-radius:15px"></a>
{% endfor -%}
{%- for sponsor in sponsors.silver -%}
<a href="{{ sponsor.url }}" target="_blank" title="{{ sponsor.title }}"><img src="{{ sponsor.img }}" style="border-radius:15px"></a>
{% endfor %}
{% endif %}
<!-- /sponsors -->
<a href="https://fastapi.tiangolo.com/fastapi-people/#sponsors" class="external-link" target="_blank">Other sponsors</a>
## Opinions
"_[...] I'm using **FastAPI** a ton these days. [...] I'm actually planning to use it for all of my team's **ML services at Microsoft**. Some of them are getting integrated into the core **Windows** product and some **Office** products._"
<div style="text-align: right; margin-right: 10%;">Kabir Khan - <strong>Microsoft</strong> <a href="https://github.com/tiangolo/fastapi/pull/26" target="_blank"><small>(ref)</small></a></div>
---
"_We adopted the **FastAPI** library to spawn a **REST** server that can be queried to obtain **predictions**. [for Ludwig]_"
<div style="text-align: right; margin-right: 10%;">Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - <strong>Uber</strong> <a href="https://eng.uber.com/ludwig-v0-2/" target="_blank"><small>(ref)</small></a></div>
---
"_**Netflix** is pleased to announce the open-source release of our **crisis management** orchestration framework: **Dispatch**! [built with **FastAPI**]_"
<div style="text-align: right; margin-right: 10%;">Kevin Glisson, Marc Vilanova, Forest Monsen - <strong>Netflix</strong> <a href="https://netflixtechblog.com/introducing-dispatch-da4b8a2a8072" target="_blank"><small>(ref)</small></a></div>
---
"_I’m over the moon excited about **FastAPI**. It’s so fun!_"
<div style="text-align: right; margin-right: 10%;">Brian Okken - <strong><a href="https://pythonbytes.fm/episodes/show/123/time-to-right-the-py-wrongs?time_in_sec=855" target="_blank">Python Bytes</a> podcast host</strong> <a href="https://twitter.com/brianokken/status/1112220079972728832" target="_blank"><small>(ref)</small></a></div>
---
"_Honestly, what you've built looks super solid and polished. In many ways, it's what I wanted **Hug** to be - it's really inspiring to see someone build that._"
<div style="text-align: right; margin-right: 10%;">Timothy Crosley - <strong><a href="https://www.hug.rest/" target="_blank">Hug</a> creator</strong> <a href="https://news.ycombinator.com/item?id=19455465" target="_blank"><small>(ref)</small></a></div>
---
"_If you're looking to learn one **modern framework** for building REST APIs, check out **FastAPI** [...] It's fast, easy to use and easy to learn [...]_"
"_We've switched over to **FastAPI** for our **APIs** [...] I think you'll like it [...]_"
<div style="text-align: right; margin-right: 10%;">Ines Montani - Matthew Honnibal - <strong><a href="https://explosion.ai" target="_blank">Explosion AI</a> founders - <a href="https://spacy.io" target="_blank">spaCy</a> creators</strong> <a href="https://twitter.com/_inesmontani/status/1144173225322143744" target="_blank"><small>(ref)</small></a> - <a href="https://twitter.com/honnibal/status/1144031421859655680" target="_blank"><small>(ref)</small></a></div>
---
## **Typer**, the FastAPI of CLIs
<a href="https://typer.tiangolo.com" target="_blank"><img src="https://typer.tiangolo.com/img/logo-margin/logo-margin-vector.svg" style="width: 20%;"></a>
If you are building a <abbr title="Command Line Interface">CLI</abbr> app to be used in the terminal instead of a web API, check out <a href="https://typer.tiangolo.com/" class="external-link" target="_blank">**Typer**</a>.
**Typer** is FastAPI's little sibling. And it's intended to be the **FastAPI of CLIs**. ⌨️ 🚀
## Requirements
Python 3.6+
FastAPI stands on the shoulders of giants:
* <a href="https://www.starlette.io/" class="external-link" target="_blank">Starlette</a> for the web parts.
* <a href="https://pydantic-docs.helpmanual.io/" class="external-link" target="_blank">Pydantic</a> for the data parts.
## Installation
<div class="termy">
```console
$ pip install fastapi
---> 100%
```
</div>
You will also need an ASGI server, for production such as <a href="https://www.uvicorn.org" class="external-link" target="_blank">Uvicorn</a> or <a href="https://gitlab.com/pgjones/hypercorn" class="external-link" target="_blank">Hypercorn</a>.
<div class="termy">
```console
$ pip install "uvicorn[standard]"
---> 100%
```
</div>
## Example
### Create it
* Create a file `main.py` with:
```Python
from typing import Optional
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
return {"item_id": item_id, "q": q}
```
<details markdown="1">
<summary>Or use <code>async def</code>...</summary>
If your code uses `async` / `await`, use `async def`:
```Python hl_lines="9 14"
from typing import Optional
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: Optional[str] = None):
return {"item_id": item_id, "q": q}
```
**Note**:
If you don't know, check the _"In a hurry?"_ section about <a href="https://fastapi.tiangolo.com/async/#in-a-hurry" target="_blank">`async` and `await` in the docs</a>.
</details>
### Run it
Run the server with:
<div class="termy">
```console
$ uvicorn main:app --reload
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [28720]
INFO: Started server process [28722]
INFO: Waiting for application startup.
INFO: Application startup complete.
```
</div>
<details markdown="1">
<summary>About the command <code>uvicorn main:app --reload</code>...</summary>
The command `uvicorn main:app` refers to:
* `main`: the file `main.py` (the Python "module").
* `app`: the object created inside of `main.py` with the line `app = FastAPI()`.
* `--reload`: make the server restart after code changes. Only do this for development.
</details>
### Check it
Open your browser at <a href="http://127.0.0.1:8000/items/5?q=somequery" class="external-link" target="_blank">http://127.0.0.1:8000/items/5?q=somequery</a>.
You will see the JSON response as:
```JSON
{"item_id": 5, "q": "somequery"}
```
You already created an API that:
* Receives HTTP requests in the _paths_ `/` and `/items/{item_id}`.
* Both _paths_ take `GET` <em>operations</em> (also known as HTTP _methods_).
* The _path_ `/items/{item_id}` has a _path parameter_ `item_id` that should be an `int`.
* The _path_ `/items/{item_id}` has an optional `str` _query parameter_ `q`.
### Interactive API docs
Now go to <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a>.
You will see the automatic interactive API documentation (provided by <a href="https://github.com/swagger-api/swagger-ui" class="external-link" target="_blank">Swagger UI</a>):
![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png)
### Alternative API docs
And now, go to <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a>.
You will see the alternative automatic documentation (provided by <a href="https://github.com/Rebilly/ReDoc" class="external-link" target="_blank">ReDoc</a>):
![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png)
## Example upgrade
Now modify the file `main.py` to receive a body from a `PUT` request.
Declare the body using standard Python types, thanks to Pydantic.
```Python hl_lines="4 9-12 25-27"
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
is_offer: Optional[bool] = None
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
return {"item_id": item_id, "q": q}
@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):
return {"item_name": item.name, "item_id": item_id}
```
The server should reload automatically (because you added `--reload` to the `uvicorn` command above).
### Interactive API docs upgrade
Now go to <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a>.
* The interactive API documentation will be automatically updated, including the new body:
![Swagger UI](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png)
* Click on the button "Try it out", it allows you to fill the parameters and directly interact with the API:
![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-04-swagger-03.png)
* Then click on the "Execute" button, the user interface will communicate with your API, send the parameters, get the results and show them on the screen:
![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-05-swagger-04.png)
### Alternative API docs upgrade
And now, go to <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a>.
* The alternative documentation will also reflect the new query parameter and body:
![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png)
### Recap
In summary, you declare **once** the types of parameters, body, etc. as function parameters.
You do that with standard modern Python types.
You don't have to learn a new syntax, the methods or classes of a specific library, etc.
Just standard **Python 3.6+**.
For example, for an `int`:
```Python
item_id: int
```
or for a more complex `Item` model:
```Python
item: Item
```
...and with that single declaration you get:
* Editor support, including:
* Completion.
* Type checks.
* Validation of data:
* Automatic and clear errors when the data is invalid.
* Validation even for deeply nested JSON objects.
* <abbr title="also known as: serialization, parsing, marshalling">Conversion</abbr> of input data: coming from the network to Python data and types. Reading from:
* JSON.
* Path parameters.
* Query parameters.
* Cookies.
* Headers.
* Forms.
* Files.
* <abbr title="also known as: serialization, parsing, marshalling">Conversion</abbr> of output data: converting from Python data and types to network data (as JSON):
* Convert Python types (`str`, `int`, `float`, `bool`, `list`, etc).
* `datetime` objects.
* `UUID` objects.
* Database models.
* ...and many more.
* Automatic interactive API documentation, including 2 alternative user interfaces:
* Swagger UI.
* ReDoc.
---
Coming back to the previous code example, **FastAPI** will:
* Validate that there is an `item_id` in the path for `GET` and `PUT` requests.
* Validate that the `item_id` is of type `int` for `GET` and `PUT` requests.
* If it is not, the client will see a useful, clear error.
* Check if there is an optional query parameter named `q` (as in `http://127.0.0.1:8000/items/foo?q=somequery`) for `GET` requests.
* As the `q` parameter is declared with `= None`, it is optional.
* Without the `None` it would be required (as is the body in the case with `PUT`).
* For `PUT` requests to `/items/{item_id}`, Read the body as JSON:
* Check that it has a required attribute `name` that should be a `str`.
* Check that it has a required attribute `price` that has to be a `float`.
* Check that it has an optional attribute `is_offer`, that should be a `bool`, if present.
* All this would also work for deeply nested JSON objects.
* Convert from and to JSON automatically.
* Document everything with OpenAPI, that can be used by:
* Interactive documentation systems.
* Automatic client code generation systems, for many languages.
* Provide 2 interactive documentation web interfaces directly.
---
We just scratched the surface, but you already get the idea of how it all works.
Try changing the line with:
```Python
return {"item_name": item.name, "item_id": item_id}
```
...from:
```Python
... "item_name": item.name ...
```
...to:
```Python
... "item_price": item.price ...
```
...and see how your editor will auto-complete the attributes and know their types:
![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png)
For a more complete example including more features, see the <a href="https://fastapi.tiangolo.com/tutorial/">Tutorial - User Guide</a>.
**Spoiler alert**: the tutorial - user guide includes:
* Declaration of **parameters** from other different places as: **headers**, **cookies**, **form fields** and **files**.
* How to set **validation constraints** as `maximum_length` or `regex`.
* A very powerful and easy to use **<abbr title="also known as components, resources, providers, services, injectables">Dependency Injection</abbr>** system.
* Security and authentication, including support for **OAuth2** with **JWT tokens** and **HTTP Basic** auth.
* More advanced (but equally easy) techniques for declaring **deeply nested JSON models** (thanks to Pydantic).
* **GraphQL** integration with <a href="https://strawberry.rocks" class="external-link" target="_blank">Strawberry</a> and other libraries.
* Many extra features (thanks to Starlette) as:
* **WebSockets**
* extremely easy tests based on `requests` and `pytest`
* **CORS**
* **Cookie Sessions**
* ...and more.
## Performance
Independent TechEmpower benchmarks show **FastAPI** applications running under Uvicorn as <a href="https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7" class="external-link" target="_blank">one of the fastest Python frameworks available</a>, only below Starlette and Uvicorn themselves (used internally by FastAPI). (*)
To understand more about it, see the section <a href="https://fastapi.tiangolo.com/benchmarks/" class="internal-link" target="_blank">Benchmarks</a>.
## Optional Dependencies
Used by Pydantic:
* <a href="https://github.com/esnme/ultrajson" target="_blank"><code>ujson</code></a> - for faster JSON <abbr title="converting the string that comes from an HTTP request into Python data">"parsing"</abbr>.
* <a href="https://github.com/JoshData/python-email-validator" target="_blank"><code>email_validator</code></a> - for email validation.
Used by Starlette:
* <a href="https://requests.readthedocs.io" target="_blank"><code>requests</code></a> - Required if you want to use the `TestClient`.
* <a href="https://jinja.palletsprojects.com" target="_blank"><code>jinja2</code></a> - Required if you want to use the default template configuration.
* <a href="https://andrew-d.github.io/python-multipart/" target="_blank"><code>python-multipart</code></a> - Required if you want to support form <abbr title="converting the string that comes from an HTTP request into Python data">"parsing"</abbr>, with `request.form()`.
* <a href="https://pythonhosted.org/itsdangerous/" target="_blank"><code>itsdangerous</code></a> - Required for `SessionMiddleware` support.
* <a href="https://pyyaml.org/wiki/PyYAMLDocumentation" target="_blank"><code>pyyaml</code></a> - Required for Starlette's `SchemaGenerator` support (you probably don't need it with FastAPI).
* <a href="https://github.com/esnme/ultrajson" target="_blank"><code>ujson</code></a> - Required if you want to use `UJSONResponse`.
Used by FastAPI / Starlette:
* <a href="https://www.uvicorn.org" target="_blank"><code>uvicorn</code></a> - for the server that loads and serves your application.
* <a href="https://github.com/ijl/orjson" target="_blank"><code>orjson</code></a> - Required if you want to use `ORJSONResponse`.
You can install all of these with `pip install "fastapi[all]"`.
## License
This project is licensed under the terms of the MIT license.

135
docs/nl/mkdocs.yml

@ -0,0 +1,135 @@
site_name: FastAPI
site_description: FastAPI framework, high performance, easy to learn, fast to code, ready for production
site_url: https://fastapi.tiangolo.com/nl/
theme:
name: material
custom_dir: overrides
palette:
- scheme: default
primary: teal
accent: amber
toggle:
icon: material/lightbulb
name: Switch to light mode
- scheme: slate
primary: teal
accent: amber
toggle:
icon: material/lightbulb-outline
name: Switch to dark mode
features:
- search.suggest
- search.highlight
- content.tabs.link
icon:
repo: fontawesome/brands/github-alt
logo: https://fastapi.tiangolo.com/img/icon-white.svg
favicon: https://fastapi.tiangolo.com/img/favicon.png
language: nl
repo_name: tiangolo/fastapi
repo_url: https://github.com/tiangolo/fastapi
edit_uri: ''
plugins:
- search
- markdownextradata:
data: data
nav:
- FastAPI: index.md
- Languages:
- en: /
- az: /az/
- de: /de/
- es: /es/
- fa: /fa/
- fr: /fr/
- id: /id/
- it: /it/
- ja: /ja/
- ko: /ko/
- nl: /nl/
- pl: /pl/
- pt: /pt/
- ru: /ru/
- sq: /sq/
- tr: /tr/
- uk: /uk/
- zh: /zh/
markdown_extensions:
- toc:
permalink: true
- markdown.extensions.codehilite:
guess_lang: false
- mdx_include:
base_path: docs
- admonition
- codehilite
- extra
- pymdownx.superfences:
custom_fences:
- name: mermaid
class: mermaid
format: !!python/name:pymdownx.superfences.fence_code_format ''
- pymdownx.tabbed:
alternate_style: true
extra:
analytics:
provider: google
property: UA-133183413-1
social:
- icon: fontawesome/brands/github-alt
link: https://github.com/tiangolo/fastapi
- icon: fontawesome/brands/discord
link: https://discord.gg/VQjSZaeJmf
- icon: fontawesome/brands/twitter
link: https://twitter.com/fastapi
- icon: fontawesome/brands/linkedin
link: https://www.linkedin.com/in/tiangolo
- icon: fontawesome/brands/dev
link: https://dev.to/tiangolo
- icon: fontawesome/brands/medium
link: https://medium.com/@tiangolo
- icon: fontawesome/solid/globe
link: https://tiangolo.com
alternate:
- link: /
name: en - English
- link: /az/
name: az
- link: /de/
name: de
- link: /es/
name: es - español
- link: /fa/
name: fa
- link: /fr/
name: fr - français
- link: /id/
name: id
- link: /it/
name: it - italiano
- link: /ja/
name: ja - 日本語
- link: /ko/
name: ko - 한국어
- link: /nl/
name: nl
- link: /pl/
name: pl
- link: /pt/
name: pt - português
- link: /ru/
name: ru - русский язык
- link: /sq/
name: sq - shqip
- link: /tr/
name: tr - Türkçe
- link: /uk/
name: uk - українська мова
- link: /zh/
name: zh - 汉语
extra_css:
- https://fastapi.tiangolo.com/css/termynal.css
- https://fastapi.tiangolo.com/css/custom.css
extra_javascript:
- https://fastapi.tiangolo.com/js/termynal.js
- https://fastapi.tiangolo.com/js/custom.js

0
docs/nl/overrides/.gitignore

6
docs/pl/mkdocs.yml

@ -40,11 +40,13 @@ nav:
- az: /az/ - az: /az/
- de: /de/ - de: /de/
- es: /es/ - es: /es/
- fa: /fa/
- fr: /fr/ - fr: /fr/
- id: /id/ - id: /id/
- it: /it/ - it: /it/
- ja: /ja/ - ja: /ja/
- ko: /ko/ - ko: /ko/
- nl: /nl/
- pl: /pl/ - pl: /pl/
- pt: /pt/ - pt: /pt/
- ru: /ru/ - ru: /ru/
@ -97,6 +99,8 @@ extra:
name: de name: de
- link: /es/ - link: /es/
name: es - español name: es - español
- link: /fa/
name: fa
- link: /fr/ - link: /fr/
name: fr - français name: fr - français
- link: /id/ - link: /id/
@ -107,6 +111,8 @@ extra:
name: ja - 日本語 name: ja - 日本語
- link: /ko/ - link: /ko/
name: ko - 한국어 name: ko - 한국어
- link: /nl/
name: nl
- link: /pl/ - link: /pl/
name: pl name: pl
- link: /pt/ - link: /pt/

6
docs/pt/mkdocs.yml

@ -40,11 +40,13 @@ nav:
- az: /az/ - az: /az/
- de: /de/ - de: /de/
- es: /es/ - es: /es/
- fa: /fa/
- fr: /fr/ - fr: /fr/
- id: /id/ - id: /id/
- it: /it/ - it: /it/
- ja: /ja/ - ja: /ja/
- ko: /ko/ - ko: /ko/
- nl: /nl/
- pl: /pl/ - pl: /pl/
- pt: /pt/ - pt: /pt/
- ru: /ru/ - ru: /ru/
@ -117,6 +119,8 @@ extra:
name: de name: de
- link: /es/ - link: /es/
name: es - español name: es - español
- link: /fa/
name: fa
- link: /fr/ - link: /fr/
name: fr - français name: fr - français
- link: /id/ - link: /id/
@ -127,6 +131,8 @@ extra:
name: ja - 日本語 name: ja - 日本語
- link: /ko/ - link: /ko/
name: ko - 한국어 name: ko - 한국어
- link: /nl/
name: nl
- link: /pl/ - link: /pl/
name: pl name: pl
- link: /pt/ - link: /pt/

6
docs/ru/mkdocs.yml

@ -40,11 +40,13 @@ nav:
- az: /az/ - az: /az/
- de: /de/ - de: /de/
- es: /es/ - es: /es/
- fa: /fa/
- fr: /fr/ - fr: /fr/
- id: /id/ - id: /id/
- it: /it/ - it: /it/
- ja: /ja/ - ja: /ja/
- ko: /ko/ - ko: /ko/
- nl: /nl/
- pl: /pl/ - pl: /pl/
- pt: /pt/ - pt: /pt/
- ru: /ru/ - ru: /ru/
@ -97,6 +99,8 @@ extra:
name: de name: de
- link: /es/ - link: /es/
name: es - español name: es - español
- link: /fa/
name: fa
- link: /fr/ - link: /fr/
name: fr - français name: fr - français
- link: /id/ - link: /id/
@ -107,6 +111,8 @@ extra:
name: ja - 日本語 name: ja - 日本語
- link: /ko/ - link: /ko/
name: ko - 한국어 name: ko - 한국어
- link: /nl/
name: nl
- link: /pl/ - link: /pl/
name: pl name: pl
- link: /pt/ - link: /pt/

6
docs/sq/mkdocs.yml

@ -40,11 +40,13 @@ nav:
- az: /az/ - az: /az/
- de: /de/ - de: /de/
- es: /es/ - es: /es/
- fa: /fa/
- fr: /fr/ - fr: /fr/
- id: /id/ - id: /id/
- it: /it/ - it: /it/
- ja: /ja/ - ja: /ja/
- ko: /ko/ - ko: /ko/
- nl: /nl/
- pl: /pl/ - pl: /pl/
- pt: /pt/ - pt: /pt/
- ru: /ru/ - ru: /ru/
@ -97,6 +99,8 @@ extra:
name: de name: de
- link: /es/ - link: /es/
name: es - español name: es - español
- link: /fa/
name: fa
- link: /fr/ - link: /fr/
name: fr - français name: fr - français
- link: /id/ - link: /id/
@ -107,6 +111,8 @@ extra:
name: ja - 日本語 name: ja - 日本語
- link: /ko/ - link: /ko/
name: ko - 한국어 name: ko - 한국어
- link: /nl/
name: nl
- link: /pl/ - link: /pl/
name: pl name: pl
- link: /pt/ - link: /pt/

6
docs/tr/mkdocs.yml

@ -40,11 +40,13 @@ nav:
- az: /az/ - az: /az/
- de: /de/ - de: /de/
- es: /es/ - es: /es/
- fa: /fa/
- fr: /fr/ - fr: /fr/
- id: /id/ - id: /id/
- it: /it/ - it: /it/
- ja: /ja/ - ja: /ja/
- ko: /ko/ - ko: /ko/
- nl: /nl/
- pl: /pl/ - pl: /pl/
- pt: /pt/ - pt: /pt/
- ru: /ru/ - ru: /ru/
@ -100,6 +102,8 @@ extra:
name: de name: de
- link: /es/ - link: /es/
name: es - español name: es - español
- link: /fa/
name: fa
- link: /fr/ - link: /fr/
name: fr - français name: fr - français
- link: /id/ - link: /id/
@ -110,6 +114,8 @@ extra:
name: ja - 日本語 name: ja - 日本語
- link: /ko/ - link: /ko/
name: ko - 한국어 name: ko - 한국어
- link: /nl/
name: nl
- link: /pl/ - link: /pl/
name: pl name: pl
- link: /pt/ - link: /pt/

6
docs/uk/mkdocs.yml

@ -40,11 +40,13 @@ nav:
- az: /az/ - az: /az/
- de: /de/ - de: /de/
- es: /es/ - es: /es/
- fa: /fa/
- fr: /fr/ - fr: /fr/
- id: /id/ - id: /id/
- it: /it/ - it: /it/
- ja: /ja/ - ja: /ja/
- ko: /ko/ - ko: /ko/
- nl: /nl/
- pl: /pl/ - pl: /pl/
- pt: /pt/ - pt: /pt/
- ru: /ru/ - ru: /ru/
@ -97,6 +99,8 @@ extra:
name: de name: de
- link: /es/ - link: /es/
name: es - español name: es - español
- link: /fa/
name: fa
- link: /fr/ - link: /fr/
name: fr - français name: fr - français
- link: /id/ - link: /id/
@ -107,6 +111,8 @@ extra:
name: ja - 日本語 name: ja - 日本語
- link: /ko/ - link: /ko/
name: ko - 한국어 name: ko - 한국어
- link: /nl/
name: nl
- link: /pl/ - link: /pl/
name: pl name: pl
- link: /pt/ - link: /pt/

6
docs/zh/mkdocs.yml

@ -40,11 +40,13 @@ nav:
- az: /az/ - az: /az/
- de: /de/ - de: /de/
- es: /es/ - es: /es/
- fa: /fa/
- fr: /fr/ - fr: /fr/
- id: /id/ - id: /id/
- it: /it/ - it: /it/
- ja: /ja/ - ja: /ja/
- ko: /ko/ - ko: /ko/
- nl: /nl/
- pl: /pl/ - pl: /pl/
- pt: /pt/ - pt: /pt/
- ru: /ru/ - ru: /ru/
@ -148,6 +150,8 @@ extra:
name: de name: de
- link: /es/ - link: /es/
name: es - español name: es - español
- link: /fa/
name: fa
- link: /fr/ - link: /fr/
name: fr - français name: fr - français
- link: /id/ - link: /id/
@ -158,6 +162,8 @@ extra:
name: ja - 日本語 name: ja - 日本語
- link: /ko/ - link: /ko/
name: ko - 한국어 name: ko - 한국어
- link: /nl/
name: nl
- link: /pl/ - link: /pl/
name: pl name: pl
- link: /pt/ - link: /pt/

2
fastapi/__init__.py

@ -1,6 +1,6 @@
"""FastAPI framework, high performance, easy to learn, fast to code, ready for production""" """FastAPI framework, high performance, easy to learn, fast to code, ready for production"""
__version__ = "0.75.0" __version__ = "0.75.2"
from starlette import status as status from starlette import status as status

4
fastapi/openapi/docs.py

@ -17,8 +17,8 @@ def get_swagger_ui_html(
*, *,
openapi_url: str, openapi_url: str,
title: str, title: str,
swagger_js_url: str = "https://cdn.jsdelivr.net/npm/swagger-ui-dist@3/swagger-ui-bundle.js", swagger_js_url: str = "https://cdn.jsdelivr.net/npm/swagger-ui-dist@4/swagger-ui-bundle.js",
swagger_css_url: str = "https://cdn.jsdelivr.net/npm/swagger-ui-dist@3/swagger-ui.css", swagger_css_url: str = "https://cdn.jsdelivr.net/npm/swagger-ui-dist@4/swagger-ui.css",
swagger_favicon_url: str = "https://fastapi.tiangolo.com/img/favicon.png", swagger_favicon_url: str = "https://fastapi.tiangolo.com/img/favicon.png",
oauth2_redirect_url: Optional[str] = None, oauth2_redirect_url: Optional[str] = None,
init_oauth: Optional[Dict[str, Any]] = None, init_oauth: Optional[Dict[str, Any]] = None,

6
fastapi/openapi/utils.py

@ -38,7 +38,11 @@ validation_error_definition = {
"title": "ValidationError", "title": "ValidationError",
"type": "object", "type": "object",
"properties": { "properties": {
"loc": {"title": "Location", "type": "array", "items": {"type": "string"}}, "loc": {
"title": "Location",
"type": "array",
"items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
},
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},
}, },

2
fastapi/routing.py

@ -649,7 +649,7 @@ class APIRouter(routing.Router):
self, path: str, endpoint: Callable[..., Any], name: Optional[str] = None self, path: str, endpoint: Callable[..., Any], name: Optional[str] = None
) -> None: ) -> None:
route = APIWebSocketRoute( route = APIWebSocketRoute(
path, self.prefix + path,
endpoint=endpoint, endpoint=endpoint,
name=name, name=name,
dependency_overrides_provider=self.dependency_overrides_provider, dependency_overrides_provider=self.dependency_overrides_provider,

24
pyproject.toml

@ -50,7 +50,7 @@ test = [
"pytest-cov >=2.12.0,<4.0.0", "pytest-cov >=2.12.0,<4.0.0",
"mypy ==0.910", "mypy ==0.910",
"flake8 >=3.8.3,<4.0.0", "flake8 >=3.8.3,<4.0.0",
"black ==21.9b0", "black == 22.3.0",
"isort >=5.0.6,<6.0.0", "isort >=5.0.6,<6.0.0",
"requests >=2.24.0,<3.0.0", "requests >=2.24.0,<3.0.0",
"httpx >=0.14.0,<0.19.0", "httpx >=0.14.0,<0.19.0",
@ -59,41 +59,43 @@ test = [
"peewee >=3.13.3,<4.0.0", "peewee >=3.13.3,<4.0.0",
"databases[sqlite] >=0.3.2,<0.6.0", "databases[sqlite] >=0.3.2,<0.6.0",
"orjson >=3.2.1,<4.0.0", "orjson >=3.2.1,<4.0.0",
"ujson >=4.0.1,<5.0.0", "ujson >=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0,<6.0.0",
"python-multipart >=0.0.5,<0.0.6", "python-multipart >=0.0.5,<0.0.6",
"flask >=1.1.2,<3.0.0", "flask >=1.1.2,<3.0.0",
"anyio[trio] >=3.2.1,<4.0.0", "anyio[trio] >=3.2.1,<4.0.0",
# types # types
"types-ujson ==0.1.1", "types-ujson ==4.2.1",
"types-orjson ==3.6.0", "types-orjson ==3.6.2",
"types-dataclasses ==0.1.7; python_version<'3.7'", "types-dataclasses ==0.6.5; python_version<'3.7'",
] ]
doc = [ doc = [
"mkdocs >=1.1.2,<2.0.0", "mkdocs >=1.1.2,<2.0.0",
"mkdocs-material >=8.1.4,<9.0.0", "mkdocs-material >=8.1.4,<9.0.0",
"mdx-include >=1.4.1,<2.0.0", "mdx-include >=1.4.1,<2.0.0",
"mkdocs-markdownextradata-plugin >=0.1.7,<0.3.0", "mkdocs-markdownextradata-plugin >=0.1.7,<0.3.0",
"typer-cli >=0.0.12,<0.0.13", # TODO: upgrade and enable typer-cli once it supports Click 8.x.x
"pyyaml >=5.3.1,<6.0.0" # "typer-cli >=0.0.12,<0.0.13",
"typer >=0.4.1,<0.5.0",
"pyyaml >=5.3.1,<7.0.0",
] ]
dev = [ dev = [
"python-jose[cryptography] >=3.3.0,<4.0.0", "python-jose[cryptography] >=3.3.0,<4.0.0",
"passlib[bcrypt] >=1.7.2,<2.0.0", "passlib[bcrypt] >=1.7.2,<2.0.0",
"autoflake >=1.4.0,<2.0.0", "autoflake >=1.4.0,<2.0.0",
"flake8 >=3.8.3,<4.0.0", "flake8 >=3.8.3,<4.0.0",
"uvicorn[standard] >=0.12.0,<0.16.0", "uvicorn[standard] >=0.12.0,<0.18.0",
] ]
all = [ all = [
"requests >=2.24.0,<3.0.0", "requests >=2.24.0,<3.0.0",
"jinja2 >=2.11.2,<4.0.0", "jinja2 >=2.11.2,<4.0.0",
"python-multipart >=0.0.5,<0.0.6", "python-multipart >=0.0.5,<0.0.6",
"itsdangerous >=1.1.0,<3.0.0", "itsdangerous >=1.1.0,<3.0.0",
"pyyaml >=5.3.1,<6.0.0", "pyyaml >=5.3.1,<7.0.0",
"ujson >=4.0.1,<5.0.0", "ujson >=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0,<6.0.0",
"orjson >=3.2.1,<4.0.0", "orjson >=3.2.1,<4.0.0",
"email_validator >=1.1.1,<2.0.0", "email_validator >=1.1.1,<2.0.0",
"uvicorn[standard] >=0.12.0,<0.16.0", "uvicorn[standard] >=0.12.0,<0.18.0",
] ]
[tool.isort] [tool.isort]

2
tests/test_additional_properties.py

@ -76,7 +76,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_additional_responses_custom_model_in_callback.py

@ -119,7 +119,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_additional_responses_default_validationerror.py

@ -54,7 +54,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_application.py

@ -1101,7 +1101,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_dependency_duplicates.py

@ -177,7 +177,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_extra_routes.py

@ -292,7 +292,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_filter_pydantic_sub_model.py

@ -116,7 +116,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

28
tests/test_generate_unique_id_function.py

@ -217,7 +217,9 @@ def test_top_level_generate_unique_id():
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {
"anyOf": [{"type": "string"}, {"type": "integer"}]
},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},
@ -416,7 +418,9 @@ def test_router_overrides_generate_unique_id():
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {
"anyOf": [{"type": "string"}, {"type": "integer"}]
},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},
@ -615,7 +619,9 @@ def test_router_include_overrides_generate_unique_id():
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {
"anyOf": [{"type": "string"}, {"type": "integer"}]
},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},
@ -887,7 +893,9 @@ def test_subrouter_top_level_include_overrides_generate_unique_id():
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {
"anyOf": [{"type": "string"}, {"type": "integer"}]
},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},
@ -1089,7 +1097,9 @@ def test_router_path_operation_overrides_generate_unique_id():
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {
"anyOf": [{"type": "string"}, {"type": "integer"}]
},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},
@ -1295,7 +1305,9 @@ def test_app_path_operation_overrides_generate_unique_id():
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {
"anyOf": [{"type": "string"}, {"type": "integer"}]
},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},
@ -1579,7 +1591,9 @@ def test_callback_override_generate_unique_id():
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {
"anyOf": [{"type": "string"}, {"type": "integer"}]
},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_get_request_body.py

@ -85,7 +85,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_include_router_defaults_overrides.py

@ -6612,7 +6612,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_modules_same_name_body/test_main.py

@ -101,7 +101,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_multi_body_errors.py

@ -79,7 +79,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_multi_query_errors.py

@ -63,7 +63,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_param_in_path_and_dependency.py

@ -71,7 +71,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_param_include_in_schema.py

@ -149,7 +149,7 @@ openapi_shema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_put_no_body.py

@ -57,7 +57,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_repeated_dependency_schema.py

@ -36,7 +36,7 @@ schema = {
"ValidationError": { "ValidationError": {
"properties": { "properties": {
"loc": { "loc": {
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
"title": "Location", "title": "Location",
"type": "array", "type": "array",
}, },

2
tests/test_schema_extra_examples.py

@ -830,7 +830,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_security_oauth2.py

@ -117,7 +117,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_security_oauth2_optional.py

@ -121,7 +121,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_security_oauth2_optional_description.py

@ -122,7 +122,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_starlette_exception.py

@ -102,7 +102,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_sub_callbacks.py

@ -256,7 +256,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tuples.py

@ -200,7 +200,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_additional_responses/test_tutorial001.py

@ -76,7 +76,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_additional_responses/test_tutorial002.py

@ -72,7 +72,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_additional_responses/test_tutorial003.py

@ -77,7 +77,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_additional_responses/test_tutorial004.py

@ -75,7 +75,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_async_sql_databases/test_tutorial001.py

@ -88,7 +88,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_bigger_applications/test_main.py

@ -323,7 +323,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_body/test_tutorial001.py

@ -63,7 +63,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_body/test_tutorial001_py310.py

@ -61,7 +61,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_body_fields/test_tutorial001.py

@ -87,7 +87,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_body_fields/test_tutorial001_py310.py

@ -84,7 +84,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_body_multiple_params/test_tutorial001.py

@ -79,7 +79,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_body_multiple_params/test_tutorial001_py310.py

@ -77,7 +77,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_body_multiple_params/test_tutorial003.py

@ -90,7 +90,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_body_multiple_params/test_tutorial003_py310.py

@ -88,7 +88,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_body_nested_models/test_tutorial009.py

@ -53,7 +53,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_body_nested_models/test_tutorial009_py39.py

@ -52,7 +52,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_body_updates/test_tutorial001.py

@ -109,7 +109,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_body_updates/test_tutorial001_py310.py

@ -108,7 +108,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_body_updates/test_tutorial001_py39.py

@ -108,7 +108,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_cookie_params/test_tutorial001.py

@ -50,7 +50,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_cookie_params/test_tutorial001_py310.py

@ -48,7 +48,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_dataclasses/test_tutorial001.py

@ -71,7 +71,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_dataclasses/test_tutorial003.py

@ -118,7 +118,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_dependencies/test_tutorial001.py

@ -104,7 +104,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_dependencies/test_tutorial001_py310.py

@ -102,7 +102,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_dependencies/test_tutorial004.py

@ -62,7 +62,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_dependencies/test_tutorial004_py310.py

@ -60,7 +60,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_dependencies/test_tutorial006.py

@ -55,7 +55,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_dependencies/test_tutorial012.py

@ -102,7 +102,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_events/test_tutorial001.py

@ -47,7 +47,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_extra_data_types/test_tutorial001.py

@ -89,7 +89,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_extra_data_types/test_tutorial001_py310.py

@ -87,7 +87,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

2
tests/test_tutorial/test_extra_models/test_tutorial003.py

@ -78,7 +78,7 @@ openapi_schema = {
"loc": { "loc": {
"title": "Location", "title": "Location",
"type": "array", "type": "array",
"items": {"type": "string"}, "items": {"anyOf": [{"type": "string"}, {"type": "integer"}]},
}, },
"msg": {"title": "Message", "type": "string"}, "msg": {"title": "Message", "type": "string"},
"type": {"title": "Error Type", "type": "string"}, "type": {"title": "Error Type", "type": "string"},

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save