Browse Source

Merge branch 'master' into fix-duplicate-special-dependency-handling

pull/12406/head
Peter Volf 4 months ago
committed by GitHub
parent
commit
c82774906b
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 2
      .pre-commit-config.yaml
  2. 21
      docs/en/data/contributors.yml
  3. 5
      docs/en/data/external_links.yml
  4. 109
      docs/en/data/github_sponsors.yml
  5. 370
      docs/en/data/people.yml
  6. 368
      docs/en/data/topic_repos.yml
  7. 178
      docs/en/data/translation_reviewers.yml
  8. 49
      docs/en/data/translators.yml
  9. 2
      docs/en/docs/advanced/generate-clients.md
  10. 30
      docs/en/docs/release-notes.md
  11. 16
      docs/en/docs/tutorial/header-param-models.md
  12. 76
      docs/en/mkdocs.yml
  13. 72
      docs/ru/docs/tutorial/header-param-models.md
  14. 158
      docs/zh/docs/deployment/manually.md
  15. 144
      docs/zh/docs/deployment/server-workers.md
  16. 95
      docs/zh/docs/tutorial/first-steps.md
  17. 80
      docs/zh/docs/tutorial/index.md
  18. 19
      docs_src/header_param_models/tutorial003.py
  19. 22
      docs_src/header_param_models/tutorial003_an.py
  20. 21
      docs_src/header_param_models/tutorial003_an_py310.py
  21. 21
      docs_src/header_param_models/tutorial003_an_py39.py
  22. 17
      docs_src/header_param_models/tutorial003_py310.py
  23. 19
      docs_src/header_param_models/tutorial003_py39.py
  24. 2
      fastapi/__init__.py
  25. 10
      fastapi/dependencies/utils.py
  26. 23
      fastapi/openapi/utils.py
  27. 2
      requirements-docs-tests.txt
  28. 2
      requirements-tests.txt
  29. 6
      tests/test_tutorial/test_header_param_models/test_tutorial001.py
  30. 6
      tests/test_tutorial/test_header_param_models/test_tutorial002.py
  31. 285
      tests/test_tutorial/test_header_param_models/test_tutorial003.py

2
.pre-commit-config.yaml

@ -14,7 +14,7 @@ repos:
- id: end-of-file-fixer - id: end-of-file-fixer
- id: trailing-whitespace - id: trailing-whitespace
- repo: https://github.com/astral-sh/ruff-pre-commit - repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.9.4 rev: v0.11.2
hooks: hooks:
- id: ruff - id: ruff
args: args:

21
docs/en/data/contributors.yml

@ -1,17 +1,17 @@
tiangolo: tiangolo:
login: tiangolo login: tiangolo
count: 723 count: 730
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4 avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
url: https://github.com/tiangolo url: https://github.com/tiangolo
dependabot: dependabot:
login: dependabot login: dependabot
count: 94 count: 98
avatarUrl: https://avatars.githubusercontent.com/in/29110?v=4 avatarUrl: https://avatars.githubusercontent.com/in/29110?v=4
url: https://github.com/apps/dependabot url: https://github.com/apps/dependabot
alejsdev: alejsdev:
login: alejsdev login: alejsdev
count: 47 count: 47
avatarUrl: https://avatars.githubusercontent.com/u/90076947?u=356f39ff3f0211c720b06d3dbb060e98884085e3&v=4 avatarUrl: https://avatars.githubusercontent.com/u/90076947?u=843355286cea366cbb3a4fc3a14343bd4eceef55&v=4
url: https://github.com/alejsdev url: https://github.com/alejsdev
github-actions: github-actions:
login: github-actions login: github-actions
@ -25,7 +25,7 @@ Kludex:
url: https://github.com/Kludex url: https://github.com/Kludex
pre-commit-ci: pre-commit-ci:
login: pre-commit-ci login: pre-commit-ci
count: 22 count: 23
avatarUrl: https://avatars.githubusercontent.com/in/68672?v=4 avatarUrl: https://avatars.githubusercontent.com/in/68672?v=4
url: https://github.com/apps/pre-commit-ci url: https://github.com/apps/pre-commit-ci
dmontagu: dmontagu:
@ -70,7 +70,7 @@ vishnuvskvkl:
url: https://github.com/vishnuvskvkl url: https://github.com/vishnuvskvkl
svlandeg: svlandeg:
login: svlandeg login: svlandeg
count: 6 count: 7
avatarUrl: https://avatars.githubusercontent.com/u/8796347?u=556c97650c27021911b0b9447ec55e75987b0e8a&v=4 avatarUrl: https://avatars.githubusercontent.com/u/8796347?u=556c97650c27021911b0b9447ec55e75987b0e8a&v=4
url: https://github.com/svlandeg url: https://github.com/svlandeg
alissadb: alissadb:
@ -171,7 +171,7 @@ hukkin:
marcosmmb: marcosmmb:
login: marcosmmb login: marcosmmb
count: 3 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/6181089?u=b8567a842b38c5570c315b2b7ca766fa7be6721e&v=4 avatarUrl: https://avatars.githubusercontent.com/u/6181089?u=03c50eec631857d84df5232890780d00a3f76903&v=4
url: https://github.com/marcosmmb url: https://github.com/marcosmmb
Serrones: Serrones:
login: Serrones login: Serrones
@ -311,7 +311,7 @@ dconathan:
Jamim: Jamim:
login: Jamim login: Jamim
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/5607572?u=0cf3027bec78ba4f0b89802430c136bc69847d7a&v=4 avatarUrl: https://avatars.githubusercontent.com/u/5607572?u=9ce0b6a6d1a5124e28b3c04d8d26827ca328713a&v=4
url: https://github.com/Jamim url: https://github.com/Jamim
svalouch: svalouch:
login: svalouch login: svalouch
@ -366,7 +366,7 @@ sattosan:
michaeloliverx: michaeloliverx:
login: michaeloliverx login: michaeloliverx
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/55017335?u=e606eb5cc397c07523be47637b1ee796904fbb59&v=4 avatarUrl: https://avatars.githubusercontent.com/u/55017335?u=efb0cb6e261ff64d862fafb91ee80fc2e1f8a2ed&v=4
url: https://github.com/michaeloliverx url: https://github.com/michaeloliverx
voegtlel: voegtlel:
login: voegtlel login: voegtlel
@ -528,3 +528,8 @@ DanielYang59:
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/80093591?u=63873f701c7c74aac83c906800a1dddc0bc8c92f&v=4 avatarUrl: https://avatars.githubusercontent.com/u/80093591?u=63873f701c7c74aac83c906800a1dddc0bc8c92f&v=4
url: https://github.com/DanielYang59 url: https://github.com/DanielYang59
blueswen:
login: blueswen
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/1564148?u=6d6b8cc8f2b5cef715e68d6175154a8a94d518ee&v=4
url: https://github.com/blueswen

5
docs/en/data/external_links.yml

@ -411,3 +411,8 @@ Talks:
author_link: https://twitter.com/chriswithers13 author_link: https://twitter.com/chriswithers13
link: https://www.youtube.com/watch?v=3DLwPcrE5mA link: https://www.youtube.com/watch?v=3DLwPcrE5mA
title: 'PyCon UK 2019: FastAPI from the ground up' title: 'PyCon UK 2019: FastAPI from the ground up'
Taiwanese:
- author: Blueswen
author_link: https://github.com/blueswen
link: https://www.youtube.com/watch?v=y3sumuoDq4w
title: 'PyCon TW 2024: 全方位強化 Python 服務可觀測性:以 FastAPI 和 Grafana Stack 為例'

109
docs/en/data/github_sponsors.yml

@ -9,11 +9,8 @@ sponsors:
avatarUrl: https://avatars.githubusercontent.com/u/79945230?v=4 avatarUrl: https://avatars.githubusercontent.com/u/79945230?v=4
url: https://github.com/Nixtla url: https://github.com/Nixtla
- login: andrew-propelauth - login: andrew-propelauth
avatarUrl: https://avatars.githubusercontent.com/u/89474256?u=1188c27cb744bbec36447a2cfd4453126b2ddb5c&v=4 avatarUrl: https://avatars.githubusercontent.com/u/89474256?u=c98993dec8553c09d424ede67bbe86e5c35f48c9&v=4
url: https://github.com/andrew-propelauth url: https://github.com/andrew-propelauth
- login: liblaber
avatarUrl: https://avatars.githubusercontent.com/u/100821118?v=4
url: https://github.com/liblaber
- login: zanfaruqui - login: zanfaruqui
avatarUrl: https://avatars.githubusercontent.com/u/104461687?v=4 avatarUrl: https://avatars.githubusercontent.com/u/104461687?v=4
url: https://github.com/zanfaruqui url: https://github.com/zanfaruqui
@ -71,7 +68,10 @@ sponsors:
- login: acsone - login: acsone
avatarUrl: https://avatars.githubusercontent.com/u/7601056?v=4 avatarUrl: https://avatars.githubusercontent.com/u/7601056?v=4
url: https://github.com/acsone url: https://github.com/acsone
- - login: Trivie - - login: ecosyste-ms
avatarUrl: https://avatars.githubusercontent.com/u/98474690?v=4
url: https://github.com/ecosyste-ms
- 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: takashi-yoneya - - login: takashi-yoneya
@ -86,6 +86,9 @@ sponsors:
- login: yasyf - login: yasyf
avatarUrl: https://avatars.githubusercontent.com/u/709645?u=f36736b3c6a85f578886ecc42a740e7b436e7a01&v=4 avatarUrl: https://avatars.githubusercontent.com/u/709645?u=f36736b3c6a85f578886ecc42a740e7b436e7a01&v=4
url: https://github.com/yasyf url: https://github.com/yasyf
- - login: alixlahuec
avatarUrl: https://avatars.githubusercontent.com/u/29543316?u=44357eb2a93bccf30fb9d389b8befe94a3d00985&v=4
url: https://github.com/alixlahuec
- - 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
@ -101,27 +104,27 @@ sponsors:
- - login: samuelcolvin - - login: samuelcolvin
avatarUrl: https://avatars.githubusercontent.com/u/4039449?u=42eb3b833047c8c4b4f647a031eaef148c16d93f&v=4 avatarUrl: https://avatars.githubusercontent.com/u/4039449?u=42eb3b833047c8c4b4f647a031eaef148c16d93f&v=4
url: https://github.com/samuelcolvin url: https://github.com/samuelcolvin
- login: vincentkoc - login: ProteinQure
avatarUrl: https://avatars.githubusercontent.com/u/25068?u=fbd5b2d51142daa4bdbc21e21953a3b8b8188a4a&v=4 avatarUrl: https://avatars.githubusercontent.com/u/33707203?v=4
url: https://github.com/vincentkoc url: https://github.com/ProteinQure
- login: ddilidili
avatarUrl: https://avatars.githubusercontent.com/u/42176885?u=c0a849dde06987434653197b5f638d3deb55fc6c&v=4
url: https://github.com/ddilidili
- login: otosky - login: otosky
avatarUrl: https://avatars.githubusercontent.com/u/42260747?u=69d089387c743d89427aa4ad8740cfb34045a9e0&v=4 avatarUrl: https://avatars.githubusercontent.com/u/42260747?u=69d089387c743d89427aa4ad8740cfb34045a9e0&v=4
url: https://github.com/otosky url: https://github.com/otosky
- login: ramonalmeidam - login: ramonalmeidam
avatarUrl: https://avatars.githubusercontent.com/u/45269580?u=3358750b3a5854d7c3ed77aaca7dd20a0f529d32&v=4 avatarUrl: https://avatars.githubusercontent.com/u/45269580?u=3358750b3a5854d7c3ed77aaca7dd20a0f529d32&v=4
url: https://github.com/ramonalmeidam url: https://github.com/ramonalmeidam
- login: mjohnsey
avatarUrl: https://avatars.githubusercontent.com/u/16784016?u=38fad2e6b411244560b3af99c5f5a4751bc81865&v=4
url: https://github.com/mjohnsey
- login: ashi-agrawal
avatarUrl: https://avatars.githubusercontent.com/u/17105294?u=99c7a854035e5398d8e7b674f2d42baae6c957f8&v=4
url: https://github.com/ashi-agrawal
- login: sepsi77 - login: sepsi77
avatarUrl: https://avatars.githubusercontent.com/u/18682303?v=4 avatarUrl: https://avatars.githubusercontent.com/u/18682303?v=4
url: https://github.com/sepsi77 url: https://github.com/sepsi77
- login: RaamEEIL - login: RaamEEIL
avatarUrl: https://avatars.githubusercontent.com/u/20320552?v=4 avatarUrl: https://avatars.githubusercontent.com/u/20320552?v=4
url: https://github.com/RaamEEIL url: https://github.com/RaamEEIL
- login: jhundman
avatarUrl: https://avatars.githubusercontent.com/u/24263908?v=4
url: https://github.com/jhundman
- login: b-rad-c - login: b-rad-c
avatarUrl: https://avatars.githubusercontent.com/u/25362581?u=5bb10629f4015b62bec1f9a366675d5085551af9&v=4 avatarUrl: https://avatars.githubusercontent.com/u/25362581?u=5bb10629f4015b62bec1f9a366675d5085551af9&v=4
url: https://github.com/b-rad-c url: https://github.com/b-rad-c
@ -137,15 +140,6 @@ sponsors:
- login: Leay15 - login: Leay15
avatarUrl: https://avatars.githubusercontent.com/u/32212558?u=c4aa9c1737e515959382a5515381757b1fd86c53&v=4 avatarUrl: https://avatars.githubusercontent.com/u/32212558?u=c4aa9c1737e515959382a5515381757b1fd86c53&v=4
url: https://github.com/Leay15 url: https://github.com/Leay15
- login: BoYanZh
avatarUrl: https://avatars.githubusercontent.com/u/32470225?u=55b174d080382822759d74307f8a0355fa86e808&v=4
url: https://github.com/BoYanZh
- login: ygorpontelo
avatarUrl: https://avatars.githubusercontent.com/u/32963605?u=35f7103f9c4c4c2589ae5737ee882e9375ef072e&v=4
url: https://github.com/ygorpontelo
- login: ProteinQure
avatarUrl: https://avatars.githubusercontent.com/u/33707203?v=4
url: https://github.com/ProteinQure
- login: chickenandstats - login: chickenandstats
avatarUrl: https://avatars.githubusercontent.com/u/79477966?u=ae2b894aa954070db1d7830dab99b49eba4e4567&v=4 avatarUrl: https://avatars.githubusercontent.com/u/79477966?u=ae2b894aa954070db1d7830dab99b49eba4e4567&v=4
url: https://github.com/chickenandstats url: https://github.com/chickenandstats
@ -212,12 +206,9 @@ sponsors:
- login: gorhack - login: gorhack
avatarUrl: https://avatars.githubusercontent.com/u/4141690?u=ec119ebc4bdf00a7bc84657a71aa17834f4f27f3&v=4 avatarUrl: https://avatars.githubusercontent.com/u/4141690?u=ec119ebc4bdf00a7bc84657a71aa17834f4f27f3&v=4
url: https://github.com/gorhack url: https://github.com/gorhack
- login: Ryandaydev - login: vincentkoc
avatarUrl: https://avatars.githubusercontent.com/u/4292423?u=48f68868db8886fce31a1d802c1003914c6cd7c6&v=4 avatarUrl: https://avatars.githubusercontent.com/u/25068?u=fbd5b2d51142daa4bdbc21e21953a3b8b8188a4a&v=4
url: https://github.com/Ryandaydev url: https://github.com/vincentkoc
- login: jaredtrog
avatarUrl: https://avatars.githubusercontent.com/u/4381365?v=4
url: https://github.com/jaredtrog
- login: jstanden - login: jstanden
avatarUrl: https://avatars.githubusercontent.com/u/63288?u=c3658d57d2862c607a0e19c2101c3c51876e36ad&v=4 avatarUrl: https://avatars.githubusercontent.com/u/63288?u=c3658d57d2862c607a0e19c2101c3c51876e36ad&v=4
url: https://github.com/jstanden url: https://github.com/jstanden
@ -272,12 +263,12 @@ sponsors:
- login: khadrawy - login: khadrawy
avatarUrl: https://avatars.githubusercontent.com/u/13686061?u=59f25ef42ecf04c22657aac4238ce0e2d3d30304&v=4 avatarUrl: https://avatars.githubusercontent.com/u/13686061?u=59f25ef42ecf04c22657aac4238ce0e2d3d30304&v=4
url: https://github.com/khadrawy url: https://github.com/khadrawy
- login: mjohnsey - login: Ryandaydev
avatarUrl: https://avatars.githubusercontent.com/u/16784016?u=38fad2e6b411244560b3af99c5f5a4751bc81865&v=4 avatarUrl: https://avatars.githubusercontent.com/u/4292423?u=679ff84cb7b988c5795a5fa583857f574a055763&v=4
url: https://github.com/mjohnsey url: https://github.com/Ryandaydev
- login: ashi-agrawal - login: jaredtrog
avatarUrl: https://avatars.githubusercontent.com/u/17105294?u=99c7a854035e5398d8e7b674f2d42baae6c957f8&v=4 avatarUrl: https://avatars.githubusercontent.com/u/4381365?v=4
url: https://github.com/ashi-agrawal url: https://github.com/jaredtrog
- login: oliverxchen - login: oliverxchen
avatarUrl: https://avatars.githubusercontent.com/u/4471774?u=534191f25e32eeaadda22dfab4b0a428733d5489&v=4 avatarUrl: https://avatars.githubusercontent.com/u/4471774?u=534191f25e32eeaadda22dfab4b0a428733d5489&v=4
url: https://github.com/oliverxchen url: https://github.com/oliverxchen
@ -299,6 +290,9 @@ sponsors:
- login: hiancdtrsnm - login: hiancdtrsnm
avatarUrl: https://avatars.githubusercontent.com/u/7343177?v=4 avatarUrl: https://avatars.githubusercontent.com/u/7343177?v=4
url: https://github.com/hiancdtrsnm url: https://github.com/hiancdtrsnm
- - login: jpizquierdo
avatarUrl: https://avatars.githubusercontent.com/u/6716239?v=4
url: https://github.com/jpizquierdo
- - 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
@ -308,6 +302,9 @@ sponsors:
- login: petercool - login: petercool
avatarUrl: https://avatars.githubusercontent.com/u/37613029?u=81c525232bb35780945a68e88afd96bb2cdad9c4&v=4 avatarUrl: https://avatars.githubusercontent.com/u/37613029?u=81c525232bb35780945a68e88afd96bb2cdad9c4&v=4
url: https://github.com/petercool url: https://github.com/petercool
- login: diegopenilla
avatarUrl: https://avatars.githubusercontent.com/u/42318333?v=4
url: https://github.com/diegopenilla
- login: siavashyj - login: siavashyj
avatarUrl: https://avatars.githubusercontent.com/u/43583410?u=562005ddc7901cd27a1219a118a2363817b14977&v=4 avatarUrl: https://avatars.githubusercontent.com/u/43583410?u=562005ddc7901cd27a1219a118a2363817b14977&v=4
url: https://github.com/siavashyj url: https://github.com/siavashyj
@ -317,9 +314,9 @@ sponsors:
- login: ArtyomVancyan - login: ArtyomVancyan
avatarUrl: https://avatars.githubusercontent.com/u/44609997?v=4 avatarUrl: https://avatars.githubusercontent.com/u/44609997?v=4
url: https://github.com/ArtyomVancyan url: https://github.com/ArtyomVancyan
- login: caviri - login: joshuatz
avatarUrl: https://avatars.githubusercontent.com/u/45425937?u=4e14bd64282bad8f385eafbdb004b5a279366d6e&v=4 avatarUrl: https://avatars.githubusercontent.com/u/17817563?u=f1bf05b690d1fc164218f0b420cdd3acb7913e21&v=4
url: https://github.com/caviri url: https://github.com/joshuatz
- login: SebTota - login: SebTota
avatarUrl: https://avatars.githubusercontent.com/u/25122511?v=4 avatarUrl: https://avatars.githubusercontent.com/u/25122511?v=4
url: https://github.com/SebTota url: https://github.com/SebTota
@ -341,6 +338,9 @@ sponsors:
- login: engineerjoe440 - login: engineerjoe440
avatarUrl: https://avatars.githubusercontent.com/u/33275230?u=eb223cad27017bb1e936ee9b429b450d092d0236&v=4 avatarUrl: https://avatars.githubusercontent.com/u/33275230?u=eb223cad27017bb1e936ee9b429b450d092d0236&v=4
url: https://github.com/engineerjoe440 url: https://github.com/engineerjoe440
- login: caviri
avatarUrl: https://avatars.githubusercontent.com/u/45425937?u=4e14bd64282bad8f385eafbdb004b5a279366d6e&v=4
url: https://github.com/caviri
- login: hgalytoby - login: hgalytoby
avatarUrl: https://avatars.githubusercontent.com/u/50397689?u=62c7ff3519858423579676cd0efbd7e3f1ffe63a&v=4 avatarUrl: https://avatars.githubusercontent.com/u/50397689?u=62c7ff3519858423579676cd0efbd7e3f1ffe63a&v=4
url: https://github.com/hgalytoby url: https://github.com/hgalytoby
@ -356,6 +356,9 @@ sponsors:
- login: PelicanQ - login: PelicanQ
avatarUrl: https://avatars.githubusercontent.com/u/77930606?v=4 avatarUrl: https://avatars.githubusercontent.com/u/77930606?v=4
url: https://github.com/PelicanQ url: https://github.com/PelicanQ
- login: tochikuji
avatarUrl: https://avatars.githubusercontent.com/u/851759?v=4
url: https://github.com/tochikuji
- login: browniebroke - login: browniebroke
avatarUrl: https://avatars.githubusercontent.com/u/861044?u=5abfca5588f3e906b31583d7ee62f6de4b68aa24&v=4 avatarUrl: https://avatars.githubusercontent.com/u/861044?u=5abfca5588f3e906b31583d7ee62f6de4b68aa24&v=4
url: https://github.com/browniebroke url: https://github.com/browniebroke
@ -386,9 +389,9 @@ sponsors:
- login: ceb10n - login: ceb10n
avatarUrl: https://avatars.githubusercontent.com/u/235213?u=edcce471814a1eba9f0cdaa4cd0de18921a940a6&v=4 avatarUrl: https://avatars.githubusercontent.com/u/235213?u=edcce471814a1eba9f0cdaa4cd0de18921a940a6&v=4
url: https://github.com/ceb10n url: https://github.com/ceb10n
- login: tochikuji - login: moonape1226
avatarUrl: https://avatars.githubusercontent.com/u/851759?v=4 avatarUrl: https://avatars.githubusercontent.com/u/8532038?u=d9f8b855a429fff9397c3833c2ff83849ebf989d&v=4
url: https://github.com/tochikuji url: https://github.com/moonape1226
- login: msehnout - login: msehnout
avatarUrl: https://avatars.githubusercontent.com/u/9369632?u=8c988f1b008a3f601385a3616f9327820f66e3a5&v=4 avatarUrl: https://avatars.githubusercontent.com/u/9369632?u=8c988f1b008a3f601385a3616f9327820f66e3a5&v=4
url: https://github.com/msehnout url: https://github.com/msehnout
@ -419,9 +422,6 @@ sponsors:
- login: TheR1D - login: TheR1D
avatarUrl: https://avatars.githubusercontent.com/u/16740832?u=b0dfdbdb27b79729430c71c6128962f77b7b53f7&v=4 avatarUrl: https://avatars.githubusercontent.com/u/16740832?u=b0dfdbdb27b79729430c71c6128962f77b7b53f7&v=4
url: https://github.com/TheR1D url: https://github.com/TheR1D
- login: joshuatz
avatarUrl: https://avatars.githubusercontent.com/u/17817563?u=f1bf05b690d1fc164218f0b420cdd3acb7913e21&v=4
url: https://github.com/joshuatz
- login: danielunderwood - login: danielunderwood
avatarUrl: https://avatars.githubusercontent.com/u/4472301?v=4 avatarUrl: https://avatars.githubusercontent.com/u/4472301?v=4
url: https://github.com/danielunderwood url: https://github.com/danielunderwood
@ -449,9 +449,6 @@ sponsors:
- login: hcristea - login: hcristea
avatarUrl: https://avatars.githubusercontent.com/u/7814406?u=19092923a4ea5b338567961c8270b9206a6d81bb&v=4 avatarUrl: https://avatars.githubusercontent.com/u/7814406?u=19092923a4ea5b338567961c8270b9206a6d81bb&v=4
url: https://github.com/hcristea url: https://github.com/hcristea
- login: moonape1226
avatarUrl: https://avatars.githubusercontent.com/u/8532038?u=d9f8b855a429fff9397c3833c2ff83849ebf989d&v=4
url: https://github.com/moonape1226
- - login: larsyngvelundin - - login: larsyngvelundin
avatarUrl: https://avatars.githubusercontent.com/u/34173819?u=74958599695bf83ac9f1addd935a51548a10c6b0&v=4 avatarUrl: https://avatars.githubusercontent.com/u/34173819?u=74958599695bf83ac9f1addd935a51548a10c6b0&v=4
url: https://github.com/larsyngvelundin url: https://github.com/larsyngvelundin
@ -461,9 +458,9 @@ sponsors:
- login: rwxd - login: rwxd
avatarUrl: https://avatars.githubusercontent.com/u/40308458?u=cd04a39e3655923be4f25c2ba8a5a07b3da3230a&v=4 avatarUrl: https://avatars.githubusercontent.com/u/40308458?u=cd04a39e3655923be4f25c2ba8a5a07b3da3230a&v=4
url: https://github.com/rwxd url: https://github.com/rwxd
- login: morzan1001 - login: kenkanayama
avatarUrl: https://avatars.githubusercontent.com/u/47593005?u=c30ab7230f82a12a9b938dcb54f84a996931409a&v=4 avatarUrl: https://avatars.githubusercontent.com/u/44771224?u=f68870c20c0f069491411aea8693c4714b40ecf0&v=4
url: https://github.com/morzan1001 url: https://github.com/kenkanayama
- login: sadikkuzu - login: sadikkuzu
avatarUrl: https://avatars.githubusercontent.com/u/23168063?u=d179c06bb9f65c4167fcab118526819f8e0dac17&v=4 avatarUrl: https://avatars.githubusercontent.com/u/23168063?u=d179c06bb9f65c4167fcab118526819f8e0dac17&v=4
url: https://github.com/sadikkuzu url: https://github.com/sadikkuzu
@ -473,12 +470,12 @@ sponsors:
- login: FabulousCodingFox - login: FabulousCodingFox
avatarUrl: https://avatars.githubusercontent.com/u/78906517?u=924a27cbee3db7e0ece5cc1509921402e1445e74&v=4 avatarUrl: https://avatars.githubusercontent.com/u/78906517?u=924a27cbee3db7e0ece5cc1509921402e1445e74&v=4
url: https://github.com/FabulousCodingFox url: https://github.com/FabulousCodingFox
- login: anqorithm - login: morzan1001
avatarUrl: https://avatars.githubusercontent.com/u/61029571?u=468256fa4e2d9ce2870b608299724bebb7a33f18&v=4 avatarUrl: https://avatars.githubusercontent.com/u/47593005?u=c30ab7230f82a12a9b938dcb54f84a996931409a&v=4
url: https://github.com/anqorithm url: https://github.com/morzan1001
- login: Materacl - login: BrianCurliss
avatarUrl: https://avatars.githubusercontent.com/u/70155818?u=ae11d084518856127cca483816a91a187e3124ee&v=4 avatarUrl: https://avatars.githubusercontent.com/u/1222949?v=4
url: https://github.com/Materacl url: https://github.com/BrianCurliss
- login: Toothwitch - login: Toothwitch
avatarUrl: https://avatars.githubusercontent.com/u/1710406?u=5eebb23b46cd26e48643b9e5179536cad491c17a&v=4 avatarUrl: https://avatars.githubusercontent.com/u/1710406?u=5eebb23b46cd26e48643b9e5179536cad491c17a&v=4
url: https://github.com/Toothwitch url: https://github.com/Toothwitch

370
docs/en/data/people.yml

@ -13,7 +13,7 @@ experts:
avatarUrl: https://avatars.githubusercontent.com/in/15368?v=4 avatarUrl: https://avatars.githubusercontent.com/in/15368?v=4
url: https://github.com/apps/github-actions url: https://github.com/apps/github-actions
- login: Kludex - login: Kludex
count: 654 count: 655
avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=df8a3f06ba8f55ae1967a3e2d5ed882903a4e330&v=4 avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=df8a3f06ba8f55ae1967a3e2d5ed882903a4e330&v=4
url: https://github.com/Kludex url: https://github.com/Kludex
- login: jgould22 - login: jgould22
@ -76,6 +76,10 @@ experts:
count: 59 count: 59
avatarUrl: https://avatars.githubusercontent.com/u/653031?u=ad9838e089058c9e5a0bab94c0eec7cc181e0cd0&v=4 avatarUrl: https://avatars.githubusercontent.com/u/653031?u=ad9838e089058c9e5a0bab94c0eec7cc181e0cd0&v=4
url: https://github.com/falkben url: https://github.com/falkben
- login: luzzodev
count: 54
avatarUrl: https://avatars.githubusercontent.com/u/27291415?u=5607ae1ce75c5f54f09500ca854227f7bfd2033b&v=4
url: https://github.com/luzzodev
- login: acidjunk - login: acidjunk
count: 50 count: 50
avatarUrl: https://avatars.githubusercontent.com/u/685002?u=b5094ab4527fc84b006c0ac9ff54367bdebb2267&v=4 avatarUrl: https://avatars.githubusercontent.com/u/685002?u=b5094ab4527fc84b006c0ac9ff54367bdebb2267&v=4
@ -88,10 +92,6 @@ experts:
count: 49 count: 49
avatarUrl: https://avatars.githubusercontent.com/u/516999?u=437c0c5038558c67e887ccd863c1ba0f846c03da&v=4 avatarUrl: https://avatars.githubusercontent.com/u/516999?u=437c0c5038558c67e887ccd863c1ba0f846c03da&v=4
url: https://github.com/sm-Fifteen url: https://github.com/sm-Fifteen
- login: luzzodev
count: 48
avatarUrl: https://avatars.githubusercontent.com/u/27291415?u=5607ae1ce75c5f54f09500ca854227f7bfd2033b&v=4
url: https://github.com/luzzodev
- login: adriangb - login: adriangb
count: 46 count: 46
avatarUrl: https://avatars.githubusercontent.com/u/1755071?u=612704256e38d6ac9cbed24f10e4b6ac2da74ecb&v=4 avatarUrl: https://avatars.githubusercontent.com/u/1755071?u=612704256e38d6ac9cbed24f10e4b6ac2da74ecb&v=4
@ -104,14 +104,14 @@ experts:
count: 45 count: 45
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: frankie567
count: 43
avatarUrl: https://avatars.githubusercontent.com/u/1144727?u=c159fe047727aedecbbeeaa96a1b03ceb9d39add&v=4
url: https://github.com/frankie567
- login: odiseo0 - login: odiseo0
count: 43 count: 43
avatarUrl: https://avatars.githubusercontent.com/u/87550035?u=241a71f6b7068738b81af3e57f45ffd723538401&v=4 avatarUrl: https://avatars.githubusercontent.com/u/87550035?u=241a71f6b7068738b81af3e57f45ffd723538401&v=4
url: https://github.com/odiseo0 url: https://github.com/odiseo0
- login: frankie567
count: 43
avatarUrl: https://avatars.githubusercontent.com/u/1144727?u=c159fe047727aedecbbeeaa96a1b03ceb9d39add&v=4
url: https://github.com/frankie567
- login: sinisaos - login: sinisaos
count: 40 count: 40
avatarUrl: https://avatars.githubusercontent.com/u/30960668?v=4 avatarUrl: https://avatars.githubusercontent.com/u/30960668?v=4
@ -156,6 +156,10 @@ experts:
count: 23 count: 23
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: alv2017
count: 22
avatarUrl: https://avatars.githubusercontent.com/u/31544722?v=4
url: https://github.com/alv2017
- login: nymous - login: nymous
count: 22 count: 22
avatarUrl: https://avatars.githubusercontent.com/u/4216559?u=360a36fb602cded27273cbfc0afc296eece90662&v=4 avatarUrl: https://avatars.githubusercontent.com/u/4216559?u=360a36fb602cded27273cbfc0afc296eece90662&v=4
@ -216,10 +220,6 @@ experts:
count: 17 count: 17
avatarUrl: https://avatars.githubusercontent.com/u/28262306?u=e19427d8dc296d6950e9c424adacc92d37496fe9&v=4 avatarUrl: https://avatars.githubusercontent.com/u/28262306?u=e19427d8dc296d6950e9c424adacc92d37496fe9&v=4
url: https://github.com/nkhitrov url: https://github.com/nkhitrov
- login: alv2017
count: 16
avatarUrl: https://avatars.githubusercontent.com/u/31544722?v=4
url: https://github.com/alv2017
- login: jonatasoli - login: jonatasoli
count: 16 count: 16
avatarUrl: https://avatars.githubusercontent.com/u/26334101?u=071c062d2861d3dd127f6b4a5258cd8ef55d4c50&v=4 avatarUrl: https://avatars.githubusercontent.com/u/26334101?u=071c062d2861d3dd127f6b4a5258cd8ef55d4c50&v=4
@ -245,71 +245,79 @@ experts:
avatarUrl: https://avatars.githubusercontent.com/u/33907262?u=2721fb37014d50daf473267c808aa678ecaefe09&v=4 avatarUrl: https://avatars.githubusercontent.com/u/33907262?u=2721fb37014d50daf473267c808aa678ecaefe09&v=4
url: https://github.com/simondale00 url: https://github.com/simondale00
last_month_experts: last_month_experts:
- login: jgould22
count: 13
avatarUrl: https://avatars.githubusercontent.com/u/4335847?u=ed77f67e0bb069084639b24d812dbb2a2b1dc554&v=4
url: https://github.com/jgould22
- login: alv2017 - login: alv2017
count: 10 count: 12
avatarUrl: https://avatars.githubusercontent.com/u/31544722?v=4 avatarUrl: https://avatars.githubusercontent.com/u/31544722?v=4
url: https://github.com/alv2017 url: https://github.com/alv2017
- login: luzzodev - login: luzzodev
count: 8 count: 9
avatarUrl: https://avatars.githubusercontent.com/u/27291415?u=5607ae1ce75c5f54f09500ca854227f7bfd2033b&v=4 avatarUrl: https://avatars.githubusercontent.com/u/27291415?u=5607ae1ce75c5f54f09500ca854227f7bfd2033b&v=4
url: https://github.com/luzzodev url: https://github.com/luzzodev
- login: YuriiMotov - login: yauhen-sobaleu
count: 6 count: 8
avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=e83a39697a2d33ab2ec9bfbced794ee48bc29cec&v=4 avatarUrl: https://avatars.githubusercontent.com/u/51629535?u=fc1817060daf2df438bfca86c44f33da5cd667db&v=4
url: https://github.com/YuriiMotov url: https://github.com/yauhen-sobaleu
- login: Kludex
count: 4
avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=df8a3f06ba8f55ae1967a3e2d5ed882903a4e330&v=4
url: https://github.com/Kludex
- login: JavierSanchezCastro - login: JavierSanchezCastro
count: 4 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/72013291?u=ae5679e6bd971d9d98cd5e76e8683f83642ba950&v=4 avatarUrl: https://avatars.githubusercontent.com/u/72013291?u=ae5679e6bd971d9d98cd5e76e8683f83642ba950&v=4
url: https://github.com/JavierSanchezCastro url: https://github.com/JavierSanchezCastro
- login: tiangolo - login: marsboy02
count: 4 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4 avatarUrl: https://avatars.githubusercontent.com/u/86903678?u=fa4a6b91eea3a11ae93c162616ca5edf51c68572&v=4
url: https://github.com/tiangolo url: https://github.com/marsboy02
- login: Ale-Cas - login: Ale-Cas
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/64859146?u=d52a6ecf8d83d2927e2ae270bdfcc83495dba8c9&v=4 avatarUrl: https://avatars.githubusercontent.com/u/64859146?u=d52a6ecf8d83d2927e2ae270bdfcc83495dba8c9&v=4
url: https://github.com/Ale-Cas url: https://github.com/Ale-Cas
- login: vtgn - login: EverStarck
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/112889052?v=4 avatarUrl: https://avatars.githubusercontent.com/u/51029456?u=343409b7cb6b3ea6a59359f4e8370d9c3f140ecd&v=4
url: https://github.com/vtgn url: https://github.com/EverStarck
three_months_experts: - login: jgould22
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/4335847?u=ed77f67e0bb069084639b24d812dbb2a2b1dc554&v=4
url: https://github.com/jgould22
- login: Kludex
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=df8a3f06ba8f55ae1967a3e2d5ed882903a4e330&v=4
url: https://github.com/Kludex
- login: YuriiMotov - login: YuriiMotov
count: 31 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=e83a39697a2d33ab2ec9bfbced794ee48bc29cec&v=4 avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=e83a39697a2d33ab2ec9bfbced794ee48bc29cec&v=4
url: https://github.com/YuriiMotov url: https://github.com/YuriiMotov
three_months_experts:
- login: Kludex - login: Kludex
count: 25 count: 25
avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=df8a3f06ba8f55ae1967a3e2d5ed882903a4e330&v=4 avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=df8a3f06ba8f55ae1967a3e2d5ed882903a4e330&v=4
url: https://github.com/Kludex url: https://github.com/Kludex
- login: YuriiMotov
count: 25
avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=e83a39697a2d33ab2ec9bfbced794ee48bc29cec&v=4
url: https://github.com/YuriiMotov
- login: luzzodev - login: luzzodev
count: 19 count: 22
avatarUrl: https://avatars.githubusercontent.com/u/27291415?u=5607ae1ce75c5f54f09500ca854227f7bfd2033b&v=4 avatarUrl: https://avatars.githubusercontent.com/u/27291415?u=5607ae1ce75c5f54f09500ca854227f7bfd2033b&v=4
url: https://github.com/luzzodev url: https://github.com/luzzodev
- login: alv2017 - login: alv2017
count: 16 count: 22
avatarUrl: https://avatars.githubusercontent.com/u/31544722?v=4 avatarUrl: https://avatars.githubusercontent.com/u/31544722?v=4
url: https://github.com/alv2017 url: https://github.com/alv2017
- login: jgould22 - login: jgould22
count: 13 count: 13
avatarUrl: https://avatars.githubusercontent.com/u/4335847?u=ed77f67e0bb069084639b24d812dbb2a2b1dc554&v=4 avatarUrl: https://avatars.githubusercontent.com/u/4335847?u=ed77f67e0bb069084639b24d812dbb2a2b1dc554&v=4
url: https://github.com/jgould22 url: https://github.com/jgould22
- login: sehraramiz - login: yauhen-sobaleu
count: 11 count: 8
avatarUrl: https://avatars.githubusercontent.com/u/14166324?u=8fac65e84dfff24245d304a5b5b09f7b5bd69dc9&v=4 avatarUrl: https://avatars.githubusercontent.com/u/51629535?u=fc1817060daf2df438bfca86c44f33da5cd667db&v=4
url: https://github.com/sehraramiz url: https://github.com/yauhen-sobaleu
- login: JavierSanchezCastro - login: JavierSanchezCastro
count: 8 count: 8
avatarUrl: https://avatars.githubusercontent.com/u/72013291?u=ae5679e6bd971d9d98cd5e76e8683f83642ba950&v=4 avatarUrl: https://avatars.githubusercontent.com/u/72013291?u=ae5679e6bd971d9d98cd5e76e8683f83642ba950&v=4
url: https://github.com/JavierSanchezCastro url: https://github.com/JavierSanchezCastro
- login: sehraramiz
count: 7
avatarUrl: https://avatars.githubusercontent.com/u/14166324?u=8fac65e84dfff24245d304a5b5b09f7b5bd69dc9&v=4
url: https://github.com/sehraramiz
- login: tiangolo - login: tiangolo
count: 4 count: 4
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4 avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
@ -318,18 +326,30 @@ three_months_experts:
count: 4 count: 4
avatarUrl: https://avatars.githubusercontent.com/u/71908316?u=592c1e42aa0ee5cb94890e0b863e2acc78cc3bbc&v=4 avatarUrl: https://avatars.githubusercontent.com/u/71908316?u=592c1e42aa0ee5cb94890e0b863e2acc78cc3bbc&v=4
url: https://github.com/yokwejuste url: https://github.com/yokwejuste
- login: viniciusCalcantara
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/108818737?u=3d7ffe5808843ee4372f9cc5a559ff1674cf1792&v=4
url: https://github.com/viniciusCalcantara
- login: SobikXexe - login: SobikXexe
count: 3 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/87701130?v=4 avatarUrl: https://avatars.githubusercontent.com/u/87701130?v=4
url: https://github.com/SobikXexe url: https://github.com/SobikXexe
- login: PREPONDERANCE
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/112809059?u=30ab12dc9ddba2f94ab90e6ad4ad8bc5cfa7fccd&v=4
url: https://github.com/PREPONDERANCE
- login: nbx3
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/34649527?u=943812f69e0d40adbd3fa1c9b8ef50dd971a2a45&v=4
url: https://github.com/nbx3
- login: marsboy02
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/86903678?u=fa4a6b91eea3a11ae93c162616ca5edf51c68572&v=4
url: https://github.com/marsboy02
- login: Ale-Cas - login: Ale-Cas
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/64859146?u=d52a6ecf8d83d2927e2ae270bdfcc83495dba8c9&v=4 avatarUrl: https://avatars.githubusercontent.com/u/64859146?u=d52a6ecf8d83d2927e2ae270bdfcc83495dba8c9&v=4
url: https://github.com/Ale-Cas url: https://github.com/Ale-Cas
- login: EverStarck
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/51029456?u=343409b7cb6b3ea6a59359f4e8370d9c3f140ecd&v=4
url: https://github.com/EverStarck
- login: vtgn - login: vtgn
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/112889052?v=4 avatarUrl: https://avatars.githubusercontent.com/u/112889052?v=4
@ -338,14 +358,6 @@ three_months_experts:
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/9466879?v=4 avatarUrl: https://avatars.githubusercontent.com/u/9466879?v=4
url: https://github.com/Trinkes url: https://github.com/Trinkes
- login: PREPONDERANCE
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/112809059?u=30ab12dc9ddba2f94ab90e6ad4ad8bc5cfa7fccd&v=4
url: https://github.com/PREPONDERANCE
- login: nbx3
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/34649527?u=943812f69e0d40adbd3fa1c9b8ef50dd971a2a45&v=4
url: https://github.com/nbx3
- login: XiaoXinYo - login: XiaoXinYo
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/56395004?u=1eebf5ce25a8067f7bfa6251a24f667be492d9d6&v=4 avatarUrl: https://avatars.githubusercontent.com/u/56395004?u=1eebf5ce25a8067f7bfa6251a24f667be492d9d6&v=4
@ -356,45 +368,49 @@ three_months_experts:
url: https://github.com/iloveitaly url: https://github.com/iloveitaly
six_months_experts: six_months_experts:
- login: YuriiMotov - login: YuriiMotov
count: 63 count: 61
avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=e83a39697a2d33ab2ec9bfbced794ee48bc29cec&v=4 avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=e83a39697a2d33ab2ec9bfbced794ee48bc29cec&v=4
url: https://github.com/YuriiMotov url: https://github.com/YuriiMotov
- login: luzzodev - login: luzzodev
count: 48 count: 54
avatarUrl: https://avatars.githubusercontent.com/u/27291415?u=5607ae1ce75c5f54f09500ca854227f7bfd2033b&v=4 avatarUrl: https://avatars.githubusercontent.com/u/27291415?u=5607ae1ce75c5f54f09500ca854227f7bfd2033b&v=4
url: https://github.com/luzzodev url: https://github.com/luzzodev
- login: Kludex - login: Kludex
count: 48 count: 40
avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=df8a3f06ba8f55ae1967a3e2d5ed882903a4e330&v=4 avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=df8a3f06ba8f55ae1967a3e2d5ed882903a4e330&v=4
url: https://github.com/Kludex url: https://github.com/Kludex
- login: sinisaos - login: alv2017
count: 23 count: 22
avatarUrl: https://avatars.githubusercontent.com/u/30960668?v=4 avatarUrl: https://avatars.githubusercontent.com/u/31544722?v=4
url: https://github.com/sinisaos url: https://github.com/alv2017
- login: jgould22 - login: jgould22
count: 17 count: 17
avatarUrl: https://avatars.githubusercontent.com/u/4335847?u=ed77f67e0bb069084639b24d812dbb2a2b1dc554&v=4 avatarUrl: https://avatars.githubusercontent.com/u/4335847?u=ed77f67e0bb069084639b24d812dbb2a2b1dc554&v=4
url: https://github.com/jgould22 url: https://github.com/jgould22
- login: JavierSanchezCastro - login: JavierSanchezCastro
count: 17 count: 13
avatarUrl: https://avatars.githubusercontent.com/u/72013291?u=ae5679e6bd971d9d98cd5e76e8683f83642ba950&v=4 avatarUrl: https://avatars.githubusercontent.com/u/72013291?u=ae5679e6bd971d9d98cd5e76e8683f83642ba950&v=4
url: https://github.com/JavierSanchezCastro url: https://github.com/JavierSanchezCastro
- login: alv2017 - login: sinisaos
count: 16 count: 11
avatarUrl: https://avatars.githubusercontent.com/u/31544722?v=4 avatarUrl: https://avatars.githubusercontent.com/u/30960668?v=4
url: https://github.com/alv2017 url: https://github.com/sinisaos
- login: Kfir-G
count: 13
avatarUrl: https://avatars.githubusercontent.com/u/57500876?u=0cd29db046a17f12f382d398141319fca7ff230a&v=4
url: https://github.com/Kfir-G
- login: sehraramiz - login: sehraramiz
count: 11 count: 11
avatarUrl: https://avatars.githubusercontent.com/u/14166324?u=8fac65e84dfff24245d304a5b5b09f7b5bd69dc9&v=4 avatarUrl: https://avatars.githubusercontent.com/u/14166324?u=8fac65e84dfff24245d304a5b5b09f7b5bd69dc9&v=4
url: https://github.com/sehraramiz url: https://github.com/sehraramiz
- login: ceb10n - login: Kfir-G
count: 11
avatarUrl: https://avatars.githubusercontent.com/u/57500876?u=0cd29db046a17f12f382d398141319fca7ff230a&v=4
url: https://github.com/Kfir-G
- login: yauhen-sobaleu
count: 8
avatarUrl: https://avatars.githubusercontent.com/u/51629535?u=fc1817060daf2df438bfca86c44f33da5cd667db&v=4
url: https://github.com/yauhen-sobaleu
- login: yvallois
count: 7 count: 7
avatarUrl: https://avatars.githubusercontent.com/u/235213?u=edcce471814a1eba9f0cdaa4cd0de18921a940a6&v=4 avatarUrl: https://avatars.githubusercontent.com/u/36999744?v=4
url: https://github.com/ceb10n url: https://github.com/yvallois
- login: estebanx64 - login: estebanx64
count: 7 count: 7
avatarUrl: https://avatars.githubusercontent.com/u/10840422?u=45f015f95e1c0f06df602be4ab688d4b854cc8a8&v=4 avatarUrl: https://avatars.githubusercontent.com/u/10840422?u=45f015f95e1c0f06df602be4ab688d4b854cc8a8&v=4
@ -403,18 +419,10 @@ six_months_experts:
count: 6 count: 6
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4 avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
url: https://github.com/tiangolo url: https://github.com/tiangolo
- login: yvallois
count: 6
avatarUrl: https://avatars.githubusercontent.com/u/36999744?v=4
url: https://github.com/yvallois
- login: yokwejuste - login: yokwejuste
count: 4 count: 4
avatarUrl: https://avatars.githubusercontent.com/u/71908316?u=592c1e42aa0ee5cb94890e0b863e2acc78cc3bbc&v=4 avatarUrl: https://avatars.githubusercontent.com/u/71908316?u=592c1e42aa0ee5cb94890e0b863e2acc78cc3bbc&v=4
url: https://github.com/yokwejuste url: https://github.com/yokwejuste
- login: n8sty
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/2964996?v=4
url: https://github.com/n8sty
- login: viniciusCalcantara - login: viniciusCalcantara
count: 3 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/108818737?u=3d7ffe5808843ee4372f9cc5a559ff1674cf1792&v=4 avatarUrl: https://avatars.githubusercontent.com/u/108818737?u=3d7ffe5808843ee4372f9cc5a559ff1674cf1792&v=4
@ -431,18 +439,30 @@ six_months_experts:
count: 3 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/9778569?u=f2f1e9135b5e4f1b0c6821a548b17f97572720fc&v=4 avatarUrl: https://avatars.githubusercontent.com/u/9778569?u=f2f1e9135b5e4f1b0c6821a548b17f97572720fc&v=4
url: https://github.com/dbfreem url: https://github.com/dbfreem
- login: Isuxiz - login: PREPONDERANCE
count: 3 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/48672727?u=34d7b4ade252687d22a27cf53037b735b244bfc1&v=4 avatarUrl: https://avatars.githubusercontent.com/u/112809059?u=30ab12dc9ddba2f94ab90e6ad4ad8bc5cfa7fccd&v=4
url: https://github.com/Isuxiz url: https://github.com/PREPONDERANCE
- login: Minibrams - login: nbx3
count: 3 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/8108085?u=b028dbc308fa8485e0e2e9402b3d03d8deb22bf9&v=4 avatarUrl: https://avatars.githubusercontent.com/u/34649527?u=943812f69e0d40adbd3fa1c9b8ef50dd971a2a45&v=4
url: https://github.com/Minibrams url: https://github.com/nbx3
- login: marsboy02
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/86903678?u=fa4a6b91eea3a11ae93c162616ca5edf51c68572&v=4
url: https://github.com/marsboy02
- login: Ale-Cas - login: Ale-Cas
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/64859146?u=d52a6ecf8d83d2927e2ae270bdfcc83495dba8c9&v=4 avatarUrl: https://avatars.githubusercontent.com/u/64859146?u=d52a6ecf8d83d2927e2ae270bdfcc83495dba8c9&v=4
url: https://github.com/Ale-Cas url: https://github.com/Ale-Cas
- login: EverStarck
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/51029456?u=343409b7cb6b3ea6a59359f4e8370d9c3f140ecd&v=4
url: https://github.com/EverStarck
- login: n8sty
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/2964996?v=4
url: https://github.com/n8sty
- login: vtgn - login: vtgn
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/112889052?v=4 avatarUrl: https://avatars.githubusercontent.com/u/112889052?v=4
@ -451,14 +471,6 @@ six_months_experts:
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/9466879?v=4 avatarUrl: https://avatars.githubusercontent.com/u/9466879?v=4
url: https://github.com/Trinkes url: https://github.com/Trinkes
- login: PREPONDERANCE
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/112809059?u=30ab12dc9ddba2f94ab90e6ad4ad8bc5cfa7fccd&v=4
url: https://github.com/PREPONDERANCE
- login: nbx3
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/34649527?u=943812f69e0d40adbd3fa1c9b8ef50dd971a2a45&v=4
url: https://github.com/nbx3
- login: XiaoXinYo - login: XiaoXinYo
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/56395004?u=1eebf5ce25a8067f7bfa6251a24f667be492d9d6&v=4 avatarUrl: https://avatars.githubusercontent.com/u/56395004?u=1eebf5ce25a8067f7bfa6251a24f667be492d9d6&v=4
@ -479,10 +491,6 @@ six_months_experts:
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/40732698?u=611f39d3c1d2f4207a590937a78c1f10eed6232c&v=4 avatarUrl: https://avatars.githubusercontent.com/u/40732698?u=611f39d3c1d2f4207a590937a78c1f10eed6232c&v=4
url: https://github.com/gelezo43 url: https://github.com/gelezo43
- login: christiansicari
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/29756552?v=4
url: https://github.com/christiansicari
- login: 1001pepi - login: 1001pepi
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/82064861?u=8c6ffdf2275d6970a07294752c545cd2702c57d3&v=4 avatarUrl: https://avatars.githubusercontent.com/u/82064861?u=8c6ffdf2275d6970a07294752c545cd2702c57d3&v=4
@ -503,14 +511,10 @@ six_months_experts:
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/131771119?u=bcaf2559ef6266af70b151b7fda31a1ee3dbecb3&v=4 avatarUrl: https://avatars.githubusercontent.com/u/131771119?u=bcaf2559ef6266af70b151b7fda31a1ee3dbecb3&v=4
url: https://github.com/iiotsrc url: https://github.com/iiotsrc
- login: simondale00 - login: Isuxiz
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/33907262?u=2721fb37014d50daf473267c808aa678ecaefe09&v=4
url: https://github.com/simondale00
- login: jd-solanki
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/47495003?u=6e225cb42c688d0cd70e65c6baedb9f5922b1178&v=4 avatarUrl: https://avatars.githubusercontent.com/u/48672727?u=34d7b4ade252687d22a27cf53037b735b244bfc1&v=4
url: https://github.com/jd-solanki url: https://github.com/Isuxiz
- login: Reemyos - login: Reemyos
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/44867003?v=4 avatarUrl: https://avatars.githubusercontent.com/u/44867003?v=4
@ -519,33 +523,21 @@ six_months_experts:
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/37678115?u=a608798b5bd0034183a9c430ebb42fb266db86ce&v=4 avatarUrl: https://avatars.githubusercontent.com/u/37678115?u=a608798b5bd0034183a9c430ebb42fb266db86ce&v=4
url: https://github.com/deight93 url: https://github.com/deight93
- login: PhysicallyActive
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/160476156?u=7a8e44f4a43d3bba636f795bb7d9476c9233b4d8&v=4
url: https://github.com/PhysicallyActive
- login: Jkrox - login: Jkrox
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/83181939?u=d6a922d97129f7f3916d6a1c166bc011b3a72b7f&v=4 avatarUrl: https://avatars.githubusercontent.com/u/83181939?u=d6a922d97129f7f3916d6a1c166bc011b3a72b7f&v=4
url: https://github.com/Jkrox url: https://github.com/Jkrox
- login: jfeaver
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/1091338?u=0bcba366447d8fadad63f6705a52d128da4c7ec2&v=4
url: https://github.com/jfeaver
- login: tristan
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/1412?u=aab8aaa4cc0f1210ac45fc93873a5909d314c965&v=4
url: https://github.com/tristan
one_year_experts: one_year_experts:
- login: YuriiMotov - login: YuriiMotov
count: 214 count: 196
avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=e83a39697a2d33ab2ec9bfbced794ee48bc29cec&v=4 avatarUrl: https://avatars.githubusercontent.com/u/109919500?u=e83a39697a2d33ab2ec9bfbced794ee48bc29cec&v=4
url: https://github.com/YuriiMotov url: https://github.com/YuriiMotov
- login: Kludex - login: Kludex
count: 66 count: 65
avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=df8a3f06ba8f55ae1967a3e2d5ed882903a4e330&v=4 avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=df8a3f06ba8f55ae1967a3e2d5ed882903a4e330&v=4
url: https://github.com/Kludex url: https://github.com/Kludex
- login: luzzodev - login: luzzodev
count: 48 count: 54
avatarUrl: https://avatars.githubusercontent.com/u/27291415?u=5607ae1ce75c5f54f09500ca854227f7bfd2033b&v=4 avatarUrl: https://avatars.githubusercontent.com/u/27291415?u=5607ae1ce75c5f54f09500ca854227f7bfd2033b&v=4
url: https://github.com/luzzodev url: https://github.com/luzzodev
- login: sinisaos - login: sinisaos
@ -553,11 +545,11 @@ one_year_experts:
avatarUrl: https://avatars.githubusercontent.com/u/30960668?v=4 avatarUrl: https://avatars.githubusercontent.com/u/30960668?v=4
url: https://github.com/sinisaos url: https://github.com/sinisaos
- login: JavierSanchezCastro - login: JavierSanchezCastro
count: 39 count: 37
avatarUrl: https://avatars.githubusercontent.com/u/72013291?u=ae5679e6bd971d9d98cd5e76e8683f83642ba950&v=4 avatarUrl: https://avatars.githubusercontent.com/u/72013291?u=ae5679e6bd971d9d98cd5e76e8683f83642ba950&v=4
url: https://github.com/JavierSanchezCastro url: https://github.com/JavierSanchezCastro
- login: jgould22 - login: jgould22
count: 35 count: 32
avatarUrl: https://avatars.githubusercontent.com/u/4335847?u=ed77f67e0bb069084639b24d812dbb2a2b1dc554&v=4 avatarUrl: https://avatars.githubusercontent.com/u/4335847?u=ed77f67e0bb069084639b24d812dbb2a2b1dc554&v=4
url: https://github.com/jgould22 url: https://github.com/jgould22
- login: tiangolo - login: tiangolo
@ -565,7 +557,7 @@ one_year_experts:
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4 avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
url: https://github.com/tiangolo url: https://github.com/tiangolo
- login: alv2017 - login: alv2017
count: 16 count: 22
avatarUrl: https://avatars.githubusercontent.com/u/31544722?v=4 avatarUrl: https://avatars.githubusercontent.com/u/31544722?v=4
url: https://github.com/alv2017 url: https://github.com/alv2017
- login: n8sty - login: n8sty
@ -584,38 +576,38 @@ one_year_experts:
count: 15 count: 15
avatarUrl: https://avatars.githubusercontent.com/u/14166324?u=8fac65e84dfff24245d304a5b5b09f7b5bd69dc9&v=4 avatarUrl: https://avatars.githubusercontent.com/u/14166324?u=8fac65e84dfff24245d304a5b5b09f7b5bd69dc9&v=4
url: https://github.com/sehraramiz url: https://github.com/sehraramiz
- login: PhysicallyActive
count: 14
avatarUrl: https://avatars.githubusercontent.com/u/160476156?u=7a8e44f4a43d3bba636f795bb7d9476c9233b4d8&v=4
url: https://github.com/PhysicallyActive
- login: Kfir-G - login: Kfir-G
count: 13 count: 13
avatarUrl: https://avatars.githubusercontent.com/u/57500876?u=0cd29db046a17f12f382d398141319fca7ff230a&v=4 avatarUrl: https://avatars.githubusercontent.com/u/57500876?u=0cd29db046a17f12f382d398141319fca7ff230a&v=4
url: https://github.com/Kfir-G url: https://github.com/Kfir-G
- login: PhysicallyActive
count: 12
avatarUrl: https://avatars.githubusercontent.com/u/160476156?u=7a8e44f4a43d3bba636f795bb7d9476c9233b4d8&v=4
url: https://github.com/PhysicallyActive
- login: mattmess1221 - login: mattmess1221
count: 11 count: 11
avatarUrl: https://avatars.githubusercontent.com/u/3409962?u=d22ea18aa8ea688af25a45df306134d593621a44&v=4 avatarUrl: https://avatars.githubusercontent.com/u/3409962?u=d22ea18aa8ea688af25a45df306134d593621a44&v=4
url: https://github.com/mattmess1221 url: https://github.com/mattmess1221
- login: hasansezertasan - login: yauhen-sobaleu
count: 8 count: 8
avatarUrl: https://avatars.githubusercontent.com/u/13135006?u=99f0b0f0fc47e88e8abb337b4447357939ef93e7&v=4 avatarUrl: https://avatars.githubusercontent.com/u/51629535?u=fc1817060daf2df438bfca86c44f33da5cd667db&v=4
url: https://github.com/hasansezertasan url: https://github.com/yauhen-sobaleu
- login: AIdjis - login: AIdjis
count: 8 count: 8
avatarUrl: https://avatars.githubusercontent.com/u/88404339?u=2a80d80b054e9228391e32fb9bb39571509dab6a&v=4 avatarUrl: https://avatars.githubusercontent.com/u/88404339?u=2a80d80b054e9228391e32fb9bb39571509dab6a&v=4
url: https://github.com/AIdjis url: https://github.com/AIdjis
- login: yvallois - login: yvallois
count: 6 count: 7
avatarUrl: https://avatars.githubusercontent.com/u/36999744?v=4 avatarUrl: https://avatars.githubusercontent.com/u/36999744?v=4
url: https://github.com/yvallois url: https://github.com/yvallois
- login: hasansezertasan
count: 7
avatarUrl: https://avatars.githubusercontent.com/u/13135006?u=99f0b0f0fc47e88e8abb337b4447357939ef93e7&v=4
url: https://github.com/hasansezertasan
- login: PREPONDERANCE - login: PREPONDERANCE
count: 5 count: 5
avatarUrl: https://avatars.githubusercontent.com/u/112809059?u=30ab12dc9ddba2f94ab90e6ad4ad8bc5cfa7fccd&v=4 avatarUrl: https://avatars.githubusercontent.com/u/112809059?u=30ab12dc9ddba2f94ab90e6ad4ad8bc5cfa7fccd&v=4
url: https://github.com/PREPONDERANCE url: https://github.com/PREPONDERANCE
- login: pythonweb2
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/32141163?v=4
url: https://github.com/pythonweb2
- login: gustavosett - login: gustavosett
count: 5 count: 5
avatarUrl: https://avatars.githubusercontent.com/u/99373133?u=1382fe27034a0179f07cf989f63c4f23017f043c&v=4 avatarUrl: https://avatars.githubusercontent.com/u/99373133?u=1382fe27034a0179f07cf989f63c4f23017f043c&v=4
@ -624,6 +616,10 @@ one_year_experts:
count: 5 count: 5
avatarUrl: https://avatars.githubusercontent.com/u/32629225?u=3b7c30e8a09426a1b9284f6e8a0ae53a525596bf&v=4 avatarUrl: https://avatars.githubusercontent.com/u/32629225?u=3b7c30e8a09426a1b9284f6e8a0ae53a525596bf&v=4
url: https://github.com/chyok url: https://github.com/chyok
- login: acidjunk
count: 4
avatarUrl: https://avatars.githubusercontent.com/u/685002?u=b5094ab4527fc84b006c0ac9ff54367bdebb2267&v=4
url: https://github.com/acidjunk
- login: svlandeg - login: svlandeg
count: 4 count: 4
avatarUrl: https://avatars.githubusercontent.com/u/8796347?u=556c97650c27021911b0b9447ec55e75987b0e8a&v=4 avatarUrl: https://avatars.githubusercontent.com/u/8796347?u=556c97650c27021911b0b9447ec55e75987b0e8a&v=4
@ -636,10 +632,6 @@ one_year_experts:
count: 4 count: 4
avatarUrl: https://avatars.githubusercontent.com/u/71908316?u=592c1e42aa0ee5cb94890e0b863e2acc78cc3bbc&v=4 avatarUrl: https://avatars.githubusercontent.com/u/71908316?u=592c1e42aa0ee5cb94890e0b863e2acc78cc3bbc&v=4
url: https://github.com/yokwejuste url: https://github.com/yokwejuste
- login: acidjunk
count: 4
avatarUrl: https://avatars.githubusercontent.com/u/685002?u=b5094ab4527fc84b006c0ac9ff54367bdebb2267&v=4
url: https://github.com/acidjunk
- login: bertomaniac - login: bertomaniac
count: 4 count: 4
avatarUrl: https://avatars.githubusercontent.com/u/10235051?u=14484a96833228a7b29fee4a7916d411c242c4f6&v=4 avatarUrl: https://avatars.githubusercontent.com/u/10235051?u=14484a96833228a7b29fee4a7916d411c242c4f6&v=4
@ -648,6 +640,14 @@ one_year_experts:
count: 4 count: 4
avatarUrl: https://avatars.githubusercontent.com/u/8213913?u=22b68b7a0d5bf5e09c02084c0f5f53d7503114cd&v=4 avatarUrl: https://avatars.githubusercontent.com/u/8213913?u=22b68b7a0d5bf5e09c02084c0f5f53d7503114cd&v=4
url: https://github.com/binbjz url: https://github.com/binbjz
- login: CharlesPerrotMinotHCHB
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/112571330?u=a9628848d6096b491135727435a2a253152995a1&v=4
url: https://github.com/CharlesPerrotMinotHCHB
- login: ryanisn
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/53449841?v=4
url: https://github.com/ryanisn
- login: viniciusCalcantara - login: viniciusCalcantara
count: 3 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/108818737?u=3d7ffe5808843ee4372f9cc5a559ff1674cf1792&v=4 avatarUrl: https://avatars.githubusercontent.com/u/108818737?u=3d7ffe5808843ee4372f9cc5a559ff1674cf1792&v=4
@ -656,6 +656,10 @@ one_year_experts:
count: 3 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/87701130?v=4 avatarUrl: https://avatars.githubusercontent.com/u/87701130?v=4
url: https://github.com/SobikXexe url: https://github.com/SobikXexe
- login: pythonweb2
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/32141163?v=4
url: https://github.com/pythonweb2
- login: DeoLeung - login: DeoLeung
count: 3 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/3764720?u=4c222ef513814de4c7fb3736d0a7adf11d953d43&v=4 avatarUrl: https://avatars.githubusercontent.com/u/3764720?u=4c222ef513814de4c7fb3736d0a7adf11d953d43&v=4
@ -684,34 +688,54 @@ one_year_experts:
count: 3 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/8108085?u=b028dbc308fa8485e0e2e9402b3d03d8deb22bf9&v=4 avatarUrl: https://avatars.githubusercontent.com/u/8108085?u=b028dbc308fa8485e0e2e9402b3d03d8deb22bf9&v=4
url: https://github.com/Minibrams url: https://github.com/Minibrams
- login: ryanisn
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/53449841?v=4
url: https://github.com/ryanisn
- login: alexandercronin - login: alexandercronin
count: 3 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/8014288?u=69580504c51a0cdd756fc47b23bb7f404bd694e7&v=4 avatarUrl: https://avatars.githubusercontent.com/u/8014288?u=69580504c51a0cdd756fc47b23bb7f404bd694e7&v=4
url: https://github.com/alexandercronin url: https://github.com/alexandercronin
- login: omarcruzpantoja - login: nbx3
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/15116058?u=4b64c643fad49225d854e1aaecd1ffc6f9071a1b&v=4
url: https://github.com/omarcruzpantoja
- login: Wyko
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/467094?v=4 avatarUrl: https://avatars.githubusercontent.com/u/34649527?u=943812f69e0d40adbd3fa1c9b8ef50dd971a2a45&v=4
url: https://github.com/Wyko url: https://github.com/nbx3
- login: ddahan - login: marsboy02
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/1933516?u=1d200a620e8d6841df017e9f2bb7efb58b580f40&v=4 avatarUrl: https://avatars.githubusercontent.com/u/86903678?u=fa4a6b91eea3a11ae93c162616ca5edf51c68572&v=4
url: https://github.com/ddahan url: https://github.com/marsboy02
- login: Ale-Cas - login: Ale-Cas
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/64859146?u=d52a6ecf8d83d2927e2ae270bdfcc83495dba8c9&v=4 avatarUrl: https://avatars.githubusercontent.com/u/64859146?u=d52a6ecf8d83d2927e2ae270bdfcc83495dba8c9&v=4
url: https://github.com/Ale-Cas url: https://github.com/Ale-Cas
- login: patrick91
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/667029?u=e35958a75ac1f99c81b4bc99e22db8cd665ae7f0&v=4
url: https://github.com/patrick91
- login: EverStarck
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/51029456?u=343409b7cb6b3ea6a59359f4e8370d9c3f140ecd&v=4
url: https://github.com/EverStarck
- login: rustonaut
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/7632017?u=652bb86c1399727082c929fd4666fd7fa65923b1&v=4
url: https://github.com/rustonaut
- login: Trolldemorted - login: Trolldemorted
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/10261186?v=4 avatarUrl: https://avatars.githubusercontent.com/u/10261186?v=4
url: https://github.com/Trolldemorted url: https://github.com/Trolldemorted
- login: anantgupta129
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/66518357?u=6e25dcd84638f17d2c6df5dc26f07fd7c6dc118e&v=4
url: https://github.com/anantgupta129
- login: slafs
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/210173?v=4
url: https://github.com/slafs
- login: Wyko
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/467094?v=4
url: https://github.com/Wyko
- login: ddahan
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/1933516?u=1d200a620e8d6841df017e9f2bb7efb58b580f40&v=4
url: https://github.com/ddahan
- login: vtgn - login: vtgn
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/112889052?v=4 avatarUrl: https://avatars.githubusercontent.com/u/112889052?v=4
@ -720,10 +744,6 @@ one_year_experts:
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/72403396?v=4 avatarUrl: https://avatars.githubusercontent.com/u/72403396?v=4
url: https://github.com/SDAravind url: https://github.com/SDAravind
- login: slafs
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/210173?v=4
url: https://github.com/slafs
- login: redb0 - login: redb0
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/30475117?v=4 avatarUrl: https://avatars.githubusercontent.com/u/30475117?v=4
@ -748,31 +768,3 @@ one_year_experts:
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/9466879?v=4 avatarUrl: https://avatars.githubusercontent.com/u/9466879?v=4
url: https://github.com/Trinkes url: https://github.com/Trinkes
- login: anantgupta129
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/66518357?u=6e25dcd84638f17d2c6df5dc26f07fd7c6dc118e&v=4
url: https://github.com/anantgupta129
- login: nbx3
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/34649527?u=943812f69e0d40adbd3fa1c9b8ef50dd971a2a45&v=4
url: https://github.com/nbx3
- login: yanggeorge
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/2434407?v=4
url: https://github.com/yanggeorge
- login: XiaoXinYo
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/56395004?u=1eebf5ce25a8067f7bfa6251a24f667be492d9d6&v=4
url: https://github.com/XiaoXinYo
- login: monchin
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/18521800?v=4
url: https://github.com/monchin
- login: AmirHmZz
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/38752106?u=07f80e451bda00a9492bbc764e49d24ad3ada8cc&v=4
url: https://github.com/AmirHmZz
- login: iloveitaly
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/150855?v=4
url: https://github.com/iloveitaly

368
docs/en/data/topic_repos.yml

@ -1,251 +1,251 @@
- name: full-stack-fastapi-template - name: full-stack-fastapi-template
html_url: https://github.com/fastapi/full-stack-fastapi-template html_url: https://github.com/fastapi/full-stack-fastapi-template
stars: 30645 stars: 31581
owner_login: fastapi owner_login: fastapi
owner_html_url: https://github.com/fastapi owner_html_url: https://github.com/fastapi
- name: Hello-Python - name: Hello-Python
html_url: https://github.com/mouredev/Hello-Python html_url: https://github.com/mouredev/Hello-Python
stars: 28690 stars: 29256
owner_login: mouredev owner_login: mouredev
owner_html_url: https://github.com/mouredev owner_html_url: https://github.com/mouredev
- name: serve - name: serve
html_url: https://github.com/jina-ai/serve html_url: https://github.com/jina-ai/serve
stars: 21356 stars: 21487
owner_login: jina-ai owner_login: jina-ai
owner_html_url: https://github.com/jina-ai owner_html_url: https://github.com/jina-ai
- name: sqlmodel - name: sqlmodel
html_url: https://github.com/fastapi/sqlmodel html_url: https://github.com/fastapi/sqlmodel
stars: 15312 stars: 15521
owner_login: fastapi owner_login: fastapi
owner_html_url: https://github.com/fastapi owner_html_url: https://github.com/fastapi
- name: HivisionIDPhotos - name: HivisionIDPhotos
html_url: https://github.com/Zeyi-Lin/HivisionIDPhotos html_url: https://github.com/Zeyi-Lin/HivisionIDPhotos
stars: 14957 stars: 15353
owner_login: Zeyi-Lin owner_login: Zeyi-Lin
owner_html_url: https://github.com/Zeyi-Lin owner_html_url: https://github.com/Zeyi-Lin
- name: Douyin_TikTok_Download_API - name: Douyin_TikTok_Download_API
html_url: https://github.com/Evil0ctal/Douyin_TikTok_Download_API html_url: https://github.com/Evil0ctal/Douyin_TikTok_Download_API
stars: 11192 stars: 11719
owner_login: Evil0ctal owner_login: Evil0ctal
owner_html_url: https://github.com/Evil0ctal owner_html_url: https://github.com/Evil0ctal
- name: fastapi-best-practices - name: fastapi-best-practices
html_url: https://github.com/zhanymkanov/fastapi-best-practices html_url: https://github.com/zhanymkanov/fastapi-best-practices
stars: 10501 stars: 11129
owner_login: zhanymkanov owner_login: zhanymkanov
owner_html_url: https://github.com/zhanymkanov owner_html_url: https://github.com/zhanymkanov
- name: awesome-fastapi - name: awesome-fastapi
html_url: https://github.com/mjhea0/awesome-fastapi html_url: https://github.com/mjhea0/awesome-fastapi
stars: 9193 stars: 9387
owner_login: mjhea0 owner_login: mjhea0
owner_html_url: https://github.com/mjhea0 owner_html_url: https://github.com/mjhea0
- name: FastUI - name: FastUI
html_url: https://github.com/pydantic/FastUI html_url: https://github.com/pydantic/FastUI
stars: 8721 stars: 8787
owner_login: pydantic owner_login: pydantic
owner_html_url: https://github.com/pydantic owner_html_url: https://github.com/pydantic
- name: nonebot2 - name: nonebot2
html_url: https://github.com/nonebot/nonebot2 html_url: https://github.com/nonebot/nonebot2
stars: 6433 stars: 6596
owner_login: nonebot owner_login: nonebot
owner_html_url: https://github.com/nonebot owner_html_url: https://github.com/nonebot
- name: serge
html_url: https://github.com/serge-chat/serge
stars: 5699
owner_login: serge-chat
owner_html_url: https://github.com/serge-chat
- name: FileCodeBox - name: FileCodeBox
html_url: https://github.com/vastsa/FileCodeBox html_url: https://github.com/vastsa/FileCodeBox
stars: 5534 stars: 6302
owner_login: vastsa owner_login: vastsa
owner_html_url: https://github.com/vastsa owner_html_url: https://github.com/vastsa
- name: serge
html_url: https://github.com/serge-chat/serge
stars: 5707
owner_login: serge-chat
owner_html_url: https://github.com/serge-chat
- name: fastapi-users - name: fastapi-users
html_url: https://github.com/fastapi-users/fastapi-users html_url: https://github.com/fastapi-users/fastapi-users
stars: 4921 stars: 5045
owner_login: fastapi-users owner_login: fastapi-users
owner_html_url: https://github.com/fastapi-users owner_html_url: https://github.com/fastapi-users
- name: polar - name: polar
html_url: https://github.com/polarsource/polar html_url: https://github.com/polarsource/polar
stars: 4598 stars: 4870
owner_login: polarsource owner_login: polarsource
owner_html_url: https://github.com/polarsource owner_html_url: https://github.com/polarsource
- name: hatchet - name: hatchet
html_url: https://github.com/hatchet-dev/hatchet html_url: https://github.com/hatchet-dev/hatchet
stars: 4585 stars: 4658
owner_login: hatchet-dev owner_login: hatchet-dev
owner_html_url: https://github.com/hatchet-dev owner_html_url: https://github.com/hatchet-dev
- name: chatgpt-web-share - name: chatgpt-web-share
html_url: https://github.com/chatpire/chatgpt-web-share html_url: https://github.com/chatpire/chatgpt-web-share
stars: 4318 stars: 4310
owner_login: chatpire owner_login: chatpire
owner_html_url: https://github.com/chatpire owner_html_url: https://github.com/chatpire
- name: strawberry - name: strawberry
html_url: https://github.com/strawberry-graphql/strawberry html_url: https://github.com/strawberry-graphql/strawberry
stars: 4180 stars: 4217
owner_login: strawberry-graphql owner_login: strawberry-graphql
owner_html_url: https://github.com/strawberry-graphql owner_html_url: https://github.com/strawberry-graphql
- name: atrilabs-engine - name: atrilabs-engine
html_url: https://github.com/Atri-Labs/atrilabs-engine html_url: https://github.com/Atri-Labs/atrilabs-engine
stars: 4114 stars: 4111
owner_login: Atri-Labs owner_login: Atri-Labs
owner_html_url: https://github.com/Atri-Labs owner_html_url: https://github.com/Atri-Labs
- name: dynaconf - name: dynaconf
html_url: https://github.com/dynaconf/dynaconf html_url: https://github.com/dynaconf/dynaconf
stars: 3904 stars: 3936
owner_login: dynaconf owner_login: dynaconf
owner_html_url: https://github.com/dynaconf owner_html_url: https://github.com/dynaconf
- name: poem - name: poem
html_url: https://github.com/poem-web/poem html_url: https://github.com/poem-web/poem
stars: 3781 stars: 3882
owner_login: poem-web owner_login: poem-web
owner_html_url: https://github.com/poem-web owner_html_url: https://github.com/poem-web
- name: farfalle - name: farfalle
html_url: https://github.com/rashadphz/farfalle html_url: https://github.com/rashadphz/farfalle
stars: 3190 stars: 3248
owner_login: rashadphz owner_login: rashadphz
owner_html_url: https://github.com/rashadphz owner_html_url: https://github.com/rashadphz
- name: opyrator
html_url: https://github.com/ml-tooling/opyrator
stars: 3119
owner_login: ml-tooling
owner_html_url: https://github.com/ml-tooling
- name: fastapi-admin - name: fastapi-admin
html_url: https://github.com/fastapi-admin/fastapi-admin html_url: https://github.com/fastapi-admin/fastapi-admin
stars: 3086 stars: 3130
owner_login: fastapi-admin owner_login: fastapi-admin
owner_html_url: https://github.com/fastapi-admin owner_html_url: https://github.com/fastapi-admin
- name: docarray - name: opyrator
html_url: https://github.com/docarray/docarray html_url: https://github.com/ml-tooling/opyrator
stars: 3021 stars: 3116
owner_login: docarray owner_login: ml-tooling
owner_html_url: https://github.com/docarray owner_html_url: https://github.com/ml-tooling
- name: datamodel-code-generator - name: datamodel-code-generator
html_url: https://github.com/koxudaxi/datamodel-code-generator html_url: https://github.com/koxudaxi/datamodel-code-generator
stars: 2988 stars: 3054
owner_login: koxudaxi owner_login: koxudaxi
owner_html_url: https://github.com/koxudaxi owner_html_url: https://github.com/koxudaxi
- name: docarray
html_url: https://github.com/docarray/docarray
stars: 3033
owner_login: docarray
owner_html_url: https://github.com/docarray
- name: LitServe - name: LitServe
html_url: https://github.com/Lightning-AI/LitServe html_url: https://github.com/Lightning-AI/LitServe
stars: 2863 stars: 3019
owner_login: Lightning-AI owner_login: Lightning-AI
owner_html_url: https://github.com/Lightning-AI owner_html_url: https://github.com/Lightning-AI
- name: fastapi-realworld-example-app
html_url: https://github.com/nsidnev/fastapi-realworld-example-app
stars: 2850
owner_login: nsidnev
owner_html_url: https://github.com/nsidnev
- name: logfire - name: logfire
html_url: https://github.com/pydantic/logfire html_url: https://github.com/pydantic/logfire
stars: 2757 stars: 2909
owner_login: pydantic owner_login: pydantic
owner_html_url: https://github.com/pydantic owner_html_url: https://github.com/pydantic
- name: uvicorn-gunicorn-fastapi-docker - name: fastapi-realworld-example-app
html_url: https://github.com/tiangolo/uvicorn-gunicorn-fastapi-docker html_url: https://github.com/nsidnev/fastapi-realworld-example-app
stars: 2731 stars: 2863
owner_login: tiangolo owner_login: nsidnev
owner_html_url: https://github.com/tiangolo owner_html_url: https://github.com/nsidnev
- name: huma - name: huma
html_url: https://github.com/danielgtaylor/huma html_url: https://github.com/danielgtaylor/huma
stars: 2700 stars: 2861
owner_login: danielgtaylor owner_login: danielgtaylor
owner_html_url: https://github.com/danielgtaylor owner_html_url: https://github.com/danielgtaylor
- name: uvicorn-gunicorn-fastapi-docker
html_url: https://github.com/tiangolo/uvicorn-gunicorn-fastapi-docker
stars: 2736
owner_login: tiangolo
owner_html_url: https://github.com/tiangolo
- name: tracecat - name: tracecat
html_url: https://github.com/TracecatHQ/tracecat html_url: https://github.com/TracecatHQ/tracecat
stars: 2539 stars: 2556
owner_login: TracecatHQ owner_login: TracecatHQ
owner_html_url: https://github.com/TracecatHQ owner_html_url: https://github.com/TracecatHQ
- name: best-of-web-python - name: best-of-web-python
html_url: https://github.com/ml-tooling/best-of-web-python html_url: https://github.com/ml-tooling/best-of-web-python
stars: 2460 stars: 2485
owner_login: ml-tooling owner_login: ml-tooling
owner_html_url: https://github.com/ml-tooling owner_html_url: https://github.com/ml-tooling
- name: RasaGPT - name: RasaGPT
html_url: https://github.com/paulpierre/RasaGPT html_url: https://github.com/paulpierre/RasaGPT
stars: 2401 stars: 2409
owner_login: paulpierre owner_login: paulpierre
owner_html_url: https://github.com/paulpierre owner_html_url: https://github.com/paulpierre
- name: fastapi-react - name: fastapi-react
html_url: https://github.com/Buuntu/fastapi-react html_url: https://github.com/Buuntu/fastapi-react
stars: 2315 stars: 2337
owner_login: Buuntu owner_login: Buuntu
owner_html_url: https://github.com/Buuntu owner_html_url: https://github.com/Buuntu
- name: nextpy - name: nextpy
html_url: https://github.com/dot-agent/nextpy html_url: https://github.com/dot-agent/nextpy
stars: 2266 stars: 2271
owner_login: dot-agent owner_login: dot-agent
owner_html_url: https://github.com/dot-agent owner_html_url: https://github.com/dot-agent
- name: 30-Days-of-Python
html_url: https://github.com/codingforentrepreneurs/30-Days-of-Python
stars: 2163
owner_login: codingforentrepreneurs
owner_html_url: https://github.com/codingforentrepreneurs
- name: FastAPI-template - name: FastAPI-template
html_url: https://github.com/s3rius/FastAPI-template html_url: https://github.com/s3rius/FastAPI-template
stars: 2156 stars: 2223
owner_login: s3rius owner_login: s3rius
owner_html_url: https://github.com/s3rius owner_html_url: https://github.com/s3rius
- name: Kokoro-FastAPI
html_url: https://github.com/remsky/Kokoro-FastAPI
stars: 2191
owner_login: remsky
owner_html_url: https://github.com/remsky
- name: 30-Days-of-Python
html_url: https://github.com/codingforentrepreneurs/30-Days-of-Python
stars: 2172
owner_login: codingforentrepreneurs
owner_html_url: https://github.com/codingforentrepreneurs
- name: sqladmin - name: sqladmin
html_url: https://github.com/aminalaee/sqladmin html_url: https://github.com/aminalaee/sqladmin
stars: 2051 stars: 2090
owner_login: aminalaee owner_login: aminalaee
owner_html_url: https://github.com/aminalaee owner_html_url: https://github.com/aminalaee
- name: langserve - name: langserve
html_url: https://github.com/langchain-ai/langserve html_url: https://github.com/langchain-ai/langserve
stars: 2025 stars: 2055
owner_login: langchain-ai owner_login: langchain-ai
owner_html_url: https://github.com/langchain-ai owner_html_url: https://github.com/langchain-ai
- name: fastapi-utils - name: fastapi-utils
html_url: https://github.com/fastapiutils/fastapi-utils html_url: https://github.com/fastapiutils/fastapi-utils
stars: 2021 stars: 2040
owner_login: fastapiutils owner_login: fastapiutils
owner_html_url: https://github.com/fastapiutils owner_html_url: https://github.com/fastapiutils
- name: solara - name: solara
html_url: https://github.com/widgetti/solara html_url: https://github.com/widgetti/solara
stars: 1980 stars: 2005
owner_login: widgetti owner_login: widgetti
owner_html_url: https://github.com/widgetti owner_html_url: https://github.com/widgetti
- name: supabase-py - name: supabase-py
html_url: https://github.com/supabase/supabase-py html_url: https://github.com/supabase/supabase-py
stars: 1874 stars: 1936
owner_login: supabase owner_login: supabase
owner_html_url: https://github.com/supabase owner_html_url: https://github.com/supabase
- name: python-week-2022
html_url: https://github.com/rochacbruno/python-week-2022
stars: 1829
owner_login: rochacbruno
owner_html_url: https://github.com/rochacbruno
- name: mangum - name: mangum
html_url: https://github.com/Kludex/mangum html_url: https://github.com/Kludex/mangum
stars: 1820 stars: 1852
owner_login: Kludex owner_login: Kludex
owner_html_url: https://github.com/Kludex owner_html_url: https://github.com/Kludex
- name: Kokoro-FastAPI - name: python-week-2022
html_url: https://github.com/remsky/Kokoro-FastAPI html_url: https://github.com/rochacbruno/python-week-2022
stars: 1771 stars: 1828
owner_login: remsky owner_login: rochacbruno
owner_html_url: https://github.com/remsky owner_html_url: https://github.com/rochacbruno
- name: manage-fastapi - name: manage-fastapi
html_url: https://github.com/ycd/manage-fastapi html_url: https://github.com/ycd/manage-fastapi
stars: 1719 stars: 1730
owner_login: ycd owner_login: ycd
owner_html_url: https://github.com/ycd owner_html_url: https://github.com/ycd
- name: ormar - name: ormar
html_url: https://github.com/collerek/ormar html_url: https://github.com/collerek/ormar
stars: 1710 stars: 1722
owner_login: collerek owner_login: collerek
owner_html_url: https://github.com/collerek owner_html_url: https://github.com/collerek
- name: agentkit - name: agentkit
html_url: https://github.com/BCG-X-Official/agentkit html_url: https://github.com/BCG-X-Official/agentkit
stars: 1658 stars: 1715
owner_login: BCG-X-Official owner_login: BCG-X-Official
owner_html_url: https://github.com/BCG-X-Official owner_html_url: https://github.com/BCG-X-Official
- name: langchain-serve - name: langchain-serve
html_url: https://github.com/jina-ai/langchain-serve html_url: https://github.com/jina-ai/langchain-serve
stars: 1618 stars: 1625
owner_login: jina-ai owner_login: jina-ai
owner_html_url: https://github.com/jina-ai owner_html_url: https://github.com/jina-ai
- name: termpair - name: termpair
html_url: https://github.com/cs01/termpair html_url: https://github.com/cs01/termpair
stars: 1611 stars: 1610
owner_login: cs01 owner_login: cs01
owner_html_url: https://github.com/cs01 owner_html_url: https://github.com/cs01
- name: coronavirus-tracker-api - name: coronavirus-tracker-api
@ -255,241 +255,241 @@
owner_html_url: https://github.com/ExpDev07 owner_html_url: https://github.com/ExpDev07
- name: piccolo - name: piccolo
html_url: https://github.com/piccolo-orm/piccolo html_url: https://github.com/piccolo-orm/piccolo
stars: 1546 stars: 1568
owner_login: piccolo-orm owner_login: piccolo-orm
owner_html_url: https://github.com/piccolo-orm owner_html_url: https://github.com/piccolo-orm
- name: fastapi-cache - name: fastapi-cache
html_url: https://github.com/long2ice/fastapi-cache html_url: https://github.com/long2ice/fastapi-cache
stars: 1478 stars: 1526
owner_login: long2ice owner_login: long2ice
owner_html_url: https://github.com/long2ice owner_html_url: https://github.com/long2ice
- name: openapi-python-client - name: openapi-python-client
html_url: https://github.com/openapi-generators/openapi-python-client html_url: https://github.com/openapi-generators/openapi-python-client
stars: 1467 stars: 1504
owner_login: openapi-generators owner_login: openapi-generators
owner_html_url: https://github.com/openapi-generators owner_html_url: https://github.com/openapi-generators
- name: fastapi-crudrouter - name: fastapi-crudrouter
html_url: https://github.com/awtkns/fastapi-crudrouter html_url: https://github.com/awtkns/fastapi-crudrouter
stars: 1462 stars: 1476
owner_login: awtkns owner_login: awtkns
owner_html_url: https://github.com/awtkns owner_html_url: https://github.com/awtkns
- name: awesome-fastapi-projects - name: awesome-fastapi-projects
html_url: https://github.com/Kludex/awesome-fastapi-projects html_url: https://github.com/Kludex/awesome-fastapi-projects
stars: 1418 stars: 1433
owner_login: Kludex owner_login: Kludex
owner_html_url: https://github.com/Kludex owner_html_url: https://github.com/Kludex
- name: awesome-python-resources
html_url: https://github.com/DjangoEx/awesome-python-resources
stars: 1383
owner_login: DjangoEx
owner_html_url: https://github.com/DjangoEx
- name: slowapi - name: slowapi
html_url: https://github.com/laurentS/slowapi html_url: https://github.com/laurentS/slowapi
stars: 1363 stars: 1408
owner_login: laurentS owner_login: laurentS
owner_html_url: https://github.com/laurentS owner_html_url: https://github.com/laurentS
- name: awesome-python-resources
html_url: https://github.com/DjangoEx/awesome-python-resources
stars: 1386
owner_login: DjangoEx
owner_html_url: https://github.com/DjangoEx
- name: budgetml - name: budgetml
html_url: https://github.com/ebhy/budgetml html_url: https://github.com/ebhy/budgetml
stars: 1344 stars: 1343
owner_login: ebhy owner_login: ebhy
owner_html_url: https://github.com/ebhy owner_html_url: https://github.com/ebhy
- name: fastapi-pagination - name: fastapi-pagination
html_url: https://github.com/uriyyo/fastapi-pagination html_url: https://github.com/uriyyo/fastapi-pagination
stars: 1284 stars: 1309
owner_login: uriyyo owner_login: uriyyo
owner_html_url: https://github.com/uriyyo owner_html_url: https://github.com/uriyyo
- name: fastapi-boilerplate - name: fastapi-boilerplate
html_url: https://github.com/teamhide/fastapi-boilerplate html_url: https://github.com/teamhide/fastapi-boilerplate
stars: 1234 stars: 1262
owner_login: teamhide owner_login: teamhide
owner_html_url: https://github.com/teamhide owner_html_url: https://github.com/teamhide
- name: fastapi-tutorial - name: fastapi-tutorial
html_url: https://github.com/liaogx/fastapi-tutorial html_url: https://github.com/liaogx/fastapi-tutorial
stars: 1181 stars: 1203
owner_login: liaogx owner_login: liaogx
owner_html_url: https://github.com/liaogx owner_html_url: https://github.com/liaogx
- name: fastapi-amis-admin - name: fastapi-amis-admin
html_url: https://github.com/amisadmin/fastapi-amis-admin html_url: https://github.com/amisadmin/fastapi-amis-admin
stars: 1164 stars: 1195
owner_login: amisadmin owner_login: amisadmin
owner_html_url: https://github.com/amisadmin owner_html_url: https://github.com/amisadmin
- name: SurfSense
html_url: https://github.com/MODSetter/SurfSense
stars: 1169
owner_login: MODSetter
owner_html_url: https://github.com/MODSetter
- name: fastapi-code-generator - name: fastapi-code-generator
html_url: https://github.com/koxudaxi/fastapi-code-generator html_url: https://github.com/koxudaxi/fastapi-code-generator
stars: 1132 stars: 1157
owner_login: koxudaxi owner_login: koxudaxi
owner_html_url: https://github.com/koxudaxi owner_html_url: https://github.com/koxudaxi
- name: bolt-python - name: bolt-python
html_url: https://github.com/slackapi/bolt-python html_url: https://github.com/slackapi/bolt-python
stars: 1130 stars: 1143
owner_login: slackapi owner_login: slackapi
owner_html_url: https://github.com/slackapi owner_html_url: https://github.com/slackapi
- name: langchain-extract - name: langchain-extract
html_url: https://github.com/langchain-ai/langchain-extract html_url: https://github.com/langchain-ai/langchain-extract
stars: 1110 stars: 1122
owner_login: langchain-ai owner_login: langchain-ai
owner_html_url: https://github.com/langchain-ai owner_html_url: https://github.com/langchain-ai
- name: odmantic
html_url: https://github.com/art049/odmantic
stars: 1104
owner_login: art049
owner_html_url: https://github.com/art049
- name: fastapi_production_template - name: fastapi_production_template
html_url: https://github.com/zhanymkanov/fastapi_production_template html_url: https://github.com/zhanymkanov/fastapi_production_template
stars: 1093 stars: 1112
owner_login: zhanymkanov owner_login: zhanymkanov
owner_html_url: https://github.com/zhanymkanov owner_html_url: https://github.com/zhanymkanov
- name: SurfSense - name: odmantic
html_url: https://github.com/MODSetter/SurfSense html_url: https://github.com/art049/odmantic
stars: 1081 stars: 1109
owner_login: MODSetter owner_login: art049
owner_html_url: https://github.com/MODSetter owner_html_url: https://github.com/art049
- name: fastapi-alembic-sqlmodel-async
html_url: https://github.com/jonra1993/fastapi-alembic-sqlmodel-async
stars: 1063
owner_login: jonra1993
owner_html_url: https://github.com/jonra1993
- name: prometheus-fastapi-instrumentator - name: prometheus-fastapi-instrumentator
html_url: https://github.com/trallnag/prometheus-fastapi-instrumentator html_url: https://github.com/trallnag/prometheus-fastapi-instrumentator
stars: 1059 stars: 1091
owner_login: trallnag owner_login: trallnag
owner_html_url: https://github.com/trallnag owner_html_url: https://github.com/trallnag
- name: vue-fastapi-admin
html_url: https://github.com/mizhexiaoxiao/vue-fastapi-admin
stars: 1086
owner_login: mizhexiaoxiao
owner_html_url: https://github.com/mizhexiaoxiao
- name: bedrock-claude-chat - name: bedrock-claude-chat
html_url: https://github.com/aws-samples/bedrock-claude-chat html_url: https://github.com/aws-samples/bedrock-claude-chat
stars: 1039 stars: 1075
owner_login: aws-samples owner_login: aws-samples
owner_html_url: https://github.com/aws-samples owner_html_url: https://github.com/aws-samples
- name: fastapi-alembic-sqlmodel-async
html_url: https://github.com/jonra1993/fastapi-alembic-sqlmodel-async
stars: 1074
owner_login: jonra1993
owner_html_url: https://github.com/jonra1993
- name: runhouse - name: runhouse
html_url: https://github.com/run-house/runhouse html_url: https://github.com/run-house/runhouse
stars: 1005 stars: 1016
owner_login: run-house owner_login: run-house
owner_html_url: https://github.com/run-house owner_html_url: https://github.com/run-house
- name: vue-fastapi-admin - name: restish
html_url: https://github.com/mizhexiaoxiao/vue-fastapi-admin html_url: https://github.com/danielgtaylor/restish
stars: 987 stars: 1012
owner_login: mizhexiaoxiao owner_login: danielgtaylor
owner_html_url: https://github.com/mizhexiaoxiao owner_html_url: https://github.com/danielgtaylor
- name: lanarky - name: lanarky
html_url: https://github.com/ajndkr/lanarky html_url: https://github.com/ajndkr/lanarky
stars: 986 stars: 988
owner_login: ajndkr owner_login: ajndkr
owner_html_url: https://github.com/ajndkr owner_html_url: https://github.com/ajndkr
- name: autollm - name: autollm
html_url: https://github.com/viddexa/autollm html_url: https://github.com/viddexa/autollm
stars: 986 stars: 987
owner_login: viddexa owner_login: viddexa
owner_html_url: https://github.com/viddexa owner_html_url: https://github.com/viddexa
- name: restish
html_url: https://github.com/danielgtaylor/restish
stars: 984
owner_login: danielgtaylor
owner_html_url: https://github.com/danielgtaylor
- name: fastcrud - name: fastcrud
html_url: https://github.com/igorbenav/fastcrud html_url: https://github.com/igorbenav/fastcrud
stars: 964 stars: 985
owner_login: igorbenav owner_login: igorbenav
owner_html_url: https://github.com/igorbenav owner_html_url: https://github.com/igorbenav
- name: secure - name: secure
html_url: https://github.com/TypeError/secure html_url: https://github.com/TypeError/secure
stars: 928 stars: 930
owner_login: TypeError owner_login: TypeError
owner_html_url: https://github.com/TypeError owner_html_url: https://github.com/TypeError
- name: langcorn - name: langcorn
html_url: https://github.com/msoedov/langcorn html_url: https://github.com/msoedov/langcorn
stars: 916 stars: 924
owner_login: msoedov owner_login: msoedov
owner_html_url: https://github.com/msoedov owner_html_url: https://github.com/msoedov
- name: fastapi_best_architecture
html_url: https://github.com/fastapi-practices/fastapi_best_architecture
stars: 921
owner_login: fastapi-practices
owner_html_url: https://github.com/fastapi-practices
- name: energy-forecasting - name: energy-forecasting
html_url: https://github.com/iusztinpaul/energy-forecasting html_url: https://github.com/iusztinpaul/energy-forecasting
stars: 898 stars: 903
owner_login: iusztinpaul owner_login: iusztinpaul
owner_html_url: https://github.com/iusztinpaul owner_html_url: https://github.com/iusztinpaul
- name: authx - name: authx
html_url: https://github.com/yezz123/authx html_url: https://github.com/yezz123/authx
stars: 874 stars: 900
owner_login: yezz123 owner_login: yezz123
owner_html_url: https://github.com/yezz123 owner_html_url: https://github.com/yezz123
- name: titiler
html_url: https://github.com/developmentseed/titiler
stars: 841
owner_login: developmentseed
owner_html_url: https://github.com/developmentseed
- name: FastAPI-boilerplate - name: FastAPI-boilerplate
html_url: https://github.com/igorbenav/FastAPI-boilerplate html_url: https://github.com/igorbenav/FastAPI-boilerplate
stars: 820 stars: 877
owner_login: igorbenav owner_login: igorbenav
owner_html_url: https://github.com/igorbenav owner_html_url: https://github.com/igorbenav
- name: titiler
html_url: https://github.com/developmentseed/titiler
stars: 853
owner_login: developmentseed
owner_html_url: https://github.com/developmentseed
- name: ludic
html_url: https://github.com/getludic/ludic
stars: 831
owner_login: getludic
owner_html_url: https://github.com/getludic
- name: marker-api - name: marker-api
html_url: https://github.com/adithya-s-k/marker-api html_url: https://github.com/adithya-s-k/marker-api
stars: 813 stars: 829
owner_login: adithya-s-k owner_login: adithya-s-k
owner_html_url: https://github.com/adithya-s-k owner_html_url: https://github.com/adithya-s-k
- name: fastapi_best_architecture - name: fastapi-observability
html_url: https://github.com/fastapi-practices/fastapi_best_architecture html_url: https://github.com/blueswen/fastapi-observability
stars: 802 stars: 771
owner_login: fastapi-practices owner_login: blueswen
owner_html_url: https://github.com/fastapi-practices owner_html_url: https://github.com/blueswen
- name: fastapi-do-zero - name: fastapi-do-zero
html_url: https://github.com/dunossauro/fastapi-do-zero html_url: https://github.com/dunossauro/fastapi-do-zero
stars: 745 stars: 767
owner_login: dunossauro owner_login: dunossauro
owner_html_url: https://github.com/dunossauro owner_html_url: https://github.com/dunossauro
- name: fastapi-mail - name: fastapi-mail
html_url: https://github.com/sabuhish/fastapi-mail html_url: https://github.com/sabuhish/fastapi-mail
stars: 744 stars: 759
owner_login: sabuhish owner_login: sabuhish
owner_html_url: https://github.com/sabuhish owner_html_url: https://github.com/sabuhish
- name: fastapi-observability
html_url: https://github.com/blueswen/fastapi-observability
stars: 743
owner_login: blueswen
owner_html_url: https://github.com/blueswen
- name: lccn_predictor - name: lccn_predictor
html_url: https://github.com/baoliay2008/lccn_predictor html_url: https://github.com/baoliay2008/lccn_predictor
stars: 741 stars: 749
owner_login: baoliay2008 owner_login: baoliay2008
owner_html_url: https://github.com/baoliay2008 owner_html_url: https://github.com/baoliay2008
- name: flock
html_url: https://github.com/Onelevenvy/flock
stars: 746
owner_login: Onelevenvy
owner_html_url: https://github.com/Onelevenvy
- name: starlette-admin
html_url: https://github.com/jowilf/starlette-admin
stars: 737
owner_login: jowilf
owner_html_url: https://github.com/jowilf
- name: annotated-py-projects - name: annotated-py-projects
html_url: https://github.com/hhstore/annotated-py-projects html_url: https://github.com/hhstore/annotated-py-projects
stars: 727 stars: 729
owner_login: hhstore owner_login: hhstore
owner_html_url: https://github.com/hhstore owner_html_url: https://github.com/hhstore
- name: KonomiTV
html_url: https://github.com/tsukumijima/KonomiTV
stars: 727
owner_login: tsukumijima
owner_html_url: https://github.com/tsukumijima
- name: learn-generative-ai - name: learn-generative-ai
html_url: https://github.com/panaverse/learn-generative-ai html_url: https://github.com/panaverse/learn-generative-ai
stars: 714 stars: 725
owner_login: panaverse owner_login: panaverse
owner_html_url: https://github.com/panaverse owner_html_url: https://github.com/panaverse
- name: starlette-admin - name: FastAPI-Backend-Template
html_url: https://github.com/jowilf/starlette-admin html_url: https://github.com/Aeternalis-Ingenium/FastAPI-Backend-Template
stars: 713 stars: 719
owner_login: jowilf owner_login: Aeternalis-Ingenium
owner_html_url: https://github.com/jowilf owner_html_url: https://github.com/Aeternalis-Ingenium
- name: chatGPT-web - name: chatGPT-web
html_url: https://github.com/mic1on/chatGPT-web html_url: https://github.com/mic1on/chatGPT-web
stars: 712 stars: 712
owner_login: mic1on owner_login: mic1on
owner_html_url: https://github.com/mic1on owner_html_url: https://github.com/mic1on
- name: FastAPI-Backend-Template
html_url: https://github.com/Aeternalis-Ingenium/FastAPI-Backend-Template
stars: 709
owner_login: Aeternalis-Ingenium
owner_html_url: https://github.com/Aeternalis-Ingenium
- name: linbing - name: linbing
html_url: https://github.com/taomujian/linbing html_url: https://github.com/taomujian/linbing
stars: 698 stars: 698
owner_login: taomujian owner_login: taomujian
owner_html_url: https://github.com/taomujian owner_html_url: https://github.com/taomujian
- name: KonomiTV
html_url: https://github.com/tsukumijima/KonomiTV
stars: 687
owner_login: tsukumijima
owner_html_url: https://github.com/tsukumijima
- name: fastapi-jwt-auth
html_url: https://github.com/IndominusByte/fastapi-jwt-auth
stars: 685
owner_login: IndominusByte
owner_html_url: https://github.com/IndominusByte
- name: pity
html_url: https://github.com/wuranxu/pity
stars: 667
owner_login: wuranxu
owner_html_url: https://github.com/wuranxu

178
docs/en/data/translation_reviewers.yml

@ -8,16 +8,16 @@ Xewus:
count: 140 count: 140
avatarUrl: https://avatars.githubusercontent.com/u/85196001?u=f8e2dc7e5104f109cef944af79050ea8d1b8f914&v=4 avatarUrl: https://avatars.githubusercontent.com/u/85196001?u=f8e2dc7e5104f109cef944af79050ea8d1b8f914&v=4
url: https://github.com/Xewus url: https://github.com/Xewus
sodaMelon:
login: sodaMelon
count: 113
avatarUrl: https://avatars.githubusercontent.com/u/66295123?u=be939db90f1119efee9e6110cc05066ff1f40f00&v=4
url: https://github.com/sodaMelon
ceb10n: ceb10n:
login: ceb10n login: ceb10n
count: 112 count: 112
avatarUrl: https://avatars.githubusercontent.com/u/235213?u=edcce471814a1eba9f0cdaa4cd0de18921a940a6&v=4 avatarUrl: https://avatars.githubusercontent.com/u/235213?u=edcce471814a1eba9f0cdaa4cd0de18921a940a6&v=4
url: https://github.com/ceb10n url: https://github.com/ceb10n
sodaMelon:
login: sodaMelon
count: 111
avatarUrl: https://avatars.githubusercontent.com/u/66295123?u=be939db90f1119efee9e6110cc05066ff1f40f00&v=4
url: https://github.com/sodaMelon
tokusumi: tokusumi:
login: tokusumi login: tokusumi
count: 104 count: 104
@ -33,6 +33,11 @@ hard-coders:
count: 92 count: 92
avatarUrl: https://avatars.githubusercontent.com/u/9651103?u=95db33927bbff1ed1c07efddeb97ac2ff33068ed&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
alv2017:
login: alv2017
count: 86
avatarUrl: https://avatars.githubusercontent.com/u/31544722?v=4
url: https://github.com/alv2017
nazarepiedady: nazarepiedady:
login: nazarepiedady login: nazarepiedady
count: 83 count: 83
@ -43,11 +48,6 @@ AlertRED:
count: 81 count: 81
avatarUrl: https://avatars.githubusercontent.com/u/15695000?u=f5a4944c6df443030409c88da7d7fa0b7ead985c&v=4 avatarUrl: https://avatars.githubusercontent.com/u/15695000?u=f5a4944c6df443030409c88da7d7fa0b7ead985c&v=4
url: https://github.com/AlertRED url: https://github.com/AlertRED
alv2017:
login: alv2017
count: 81
avatarUrl: https://avatars.githubusercontent.com/u/31544722?v=4
url: https://github.com/alv2017
Alexandrhub: Alexandrhub:
login: Alexandrhub login: Alexandrhub
count: 68 count: 68
@ -65,12 +65,12 @@ cassiobotaro:
url: https://github.com/cassiobotaro url: https://github.com/cassiobotaro
mattwang44: mattwang44:
login: mattwang44 login: mattwang44
count: 58 count: 59
avatarUrl: https://avatars.githubusercontent.com/u/24987826?u=58e37fb3927b9124b458945ac4c97aa0f1062d85&v=4 avatarUrl: https://avatars.githubusercontent.com/u/24987826?u=58e37fb3927b9124b458945ac4c97aa0f1062d85&v=4
url: https://github.com/mattwang44 url: https://github.com/mattwang44
tiangolo: tiangolo:
login: tiangolo login: tiangolo
count: 51 count: 52
avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4 avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=cb5d06e73a9e1998141b1641aa88e443c6717651&v=4
url: https://github.com/tiangolo url: https://github.com/tiangolo
Laineyzhang55: Laineyzhang55:
@ -88,16 +88,26 @@ komtaki:
count: 45 count: 45
avatarUrl: https://avatars.githubusercontent.com/u/39375566?u=260ad6b1a4b34c07dbfa728da5e586f16f6d1824&v=4 avatarUrl: https://avatars.githubusercontent.com/u/39375566?u=260ad6b1a4b34c07dbfa728da5e586f16f6d1824&v=4
url: https://github.com/komtaki url: https://github.com/komtaki
rostik1410:
login: rostik1410
count: 42
avatarUrl: https://avatars.githubusercontent.com/u/11443899?u=e26a635c2ba220467b308a326a579b8ccf4a8701&v=4
url: https://github.com/rostik1410
svlandeg:
login: svlandeg
count: 42
avatarUrl: https://avatars.githubusercontent.com/u/8796347?u=556c97650c27021911b0b9447ec55e75987b0e8a&v=4
url: https://github.com/svlandeg
alperiox: alperiox:
login: alperiox login: alperiox
count: 42 count: 42
avatarUrl: https://avatars.githubusercontent.com/u/34214152?u=2c5acad3461d4dbc2d48371ba86cac56ae9b25cc&v=4 avatarUrl: https://avatars.githubusercontent.com/u/34214152?u=2c5acad3461d4dbc2d48371ba86cac56ae9b25cc&v=4
url: https://github.com/alperiox url: https://github.com/alperiox
rostik1410: Rishat-F:
login: rostik1410 login: Rishat-F
count: 41 count: 41
avatarUrl: https://avatars.githubusercontent.com/u/11443899?u=e26a635c2ba220467b308a326a579b8ccf4a8701&v=4 avatarUrl: https://avatars.githubusercontent.com/u/66554797?v=4
url: https://github.com/rostik1410 url: https://github.com/Rishat-F
Winand: Winand:
login: Winand login: Winand
count: 40 count: 40
@ -126,7 +136,7 @@ SwftAlpc:
alejsdev: alejsdev:
login: alejsdev login: alejsdev
count: 36 count: 36
avatarUrl: https://avatars.githubusercontent.com/u/90076947?u=356f39ff3f0211c720b06d3dbb060e98884085e3&v=4 avatarUrl: https://avatars.githubusercontent.com/u/90076947?u=843355286cea366cbb3a4fc3a14343bd4eceef55&v=4
url: https://github.com/alejsdev url: https://github.com/alejsdev
timothy-jeong: timothy-jeong:
login: timothy-jeong login: timothy-jeong
@ -138,16 +148,6 @@ nilslindemann:
count: 35 count: 35
avatarUrl: https://avatars.githubusercontent.com/u/6892179?u=1dca6a22195d6cd1ab20737c0e19a4c55d639472&v=4 avatarUrl: https://avatars.githubusercontent.com/u/6892179?u=1dca6a22195d6cd1ab20737c0e19a4c55d639472&v=4
url: https://github.com/nilslindemann url: https://github.com/nilslindemann
svlandeg:
login: svlandeg
count: 35
avatarUrl: https://avatars.githubusercontent.com/u/8796347?u=556c97650c27021911b0b9447ec55e75987b0e8a&v=4
url: https://github.com/svlandeg
Rishat-F:
login: Rishat-F
count: 35
avatarUrl: https://avatars.githubusercontent.com/u/66554797?v=4
url: https://github.com/Rishat-F
rjNemo: rjNemo:
login: rjNemo login: rjNemo
count: 34 count: 34
@ -158,6 +158,11 @@ codingjenny:
count: 34 count: 34
avatarUrl: https://avatars.githubusercontent.com/u/103817302?u=3a042740dc0ff58615da0d8679230966fd7693e8&v=4 avatarUrl: https://avatars.githubusercontent.com/u/103817302?u=3a042740dc0ff58615da0d8679230966fd7693e8&v=4
url: https://github.com/codingjenny url: https://github.com/codingjenny
mezgoodle:
login: mezgoodle
count: 33
avatarUrl: https://avatars.githubusercontent.com/u/41520940?u=4a9c765af688389d54296845d18b8f6cd6ddf09a&v=4
url: https://github.com/mezgoodle
akarev0: akarev0:
login: akarev0 login: akarev0
count: 33 count: 33
@ -178,6 +183,11 @@ LorhanSohaky:
count: 30 count: 30
avatarUrl: https://avatars.githubusercontent.com/u/16273730?u=095b66f243a2cd6a0aadba9a095009f8aaf18393&v=4 avatarUrl: https://avatars.githubusercontent.com/u/16273730?u=095b66f243a2cd6a0aadba9a095009f8aaf18393&v=4
url: https://github.com/LorhanSohaky url: https://github.com/LorhanSohaky
Vincy1230:
login: Vincy1230
count: 30
avatarUrl: https://avatars.githubusercontent.com/u/81342412?u=ab5e256a4077a4a91f3f9cd2115ba80780454cbe&v=4
url: https://github.com/Vincy1230
black-redoc: black-redoc:
login: black-redoc login: black-redoc
count: 29 count: 29
@ -201,7 +211,7 @@ dedkot01:
hsuanchi: hsuanchi:
login: hsuanchi login: hsuanchi
count: 28 count: 28
avatarUrl: https://avatars.githubusercontent.com/u/24913710?u=0b094ae292292fee093818e37ceb645c114d2bff&v=4 avatarUrl: https://avatars.githubusercontent.com/u/24913710?u=7d25a398e478b6e63503bf6f26c54efa9e0da07b&v=4
url: https://github.com/hsuanchi url: https://github.com/hsuanchi
dpinezich: dpinezich:
login: dpinezich login: dpinezich
@ -228,16 +238,6 @@ junah201:
count: 26 count: 26
avatarUrl: https://avatars.githubusercontent.com/u/75025529?u=2451c256e888fa2a06bcfc0646d09b87ddb6a945&v=4 avatarUrl: https://avatars.githubusercontent.com/u/75025529?u=2451c256e888fa2a06bcfc0646d09b87ddb6a945&v=4
url: https://github.com/junah201 url: https://github.com/junah201
mezgoodle:
login: mezgoodle
count: 26
avatarUrl: https://avatars.githubusercontent.com/u/41520940?u=e871bc26734eb2436d98c19c3fb57a4773e13c24&v=4
url: https://github.com/mezgoodle
Vincy1230:
login: Vincy1230
count: 26
avatarUrl: https://avatars.githubusercontent.com/u/81342412?u=ab5e256a4077a4a91f3f9cd2115ba80780454cbe&v=4
url: https://github.com/Vincy1230
zy7y: zy7y:
login: zy7y login: zy7y
count: 25 count: 25
@ -376,8 +376,13 @@ Joao-Pedro-P-Holanda:
JaeHyuckSa: JaeHyuckSa:
login: JaeHyuckSa login: JaeHyuckSa
count: 16 count: 16
avatarUrl: https://avatars.githubusercontent.com/u/104830931?v=4 avatarUrl: https://avatars.githubusercontent.com/u/104830931?u=b19b3e24d6030f88d22bd3e953f9525d2f062da3&v=4
url: https://github.com/JaeHyuckSa url: https://github.com/JaeHyuckSa
SofiiaTrufanova:
login: SofiiaTrufanova
count: 16
avatarUrl: https://avatars.githubusercontent.com/u/63260929?u=483e0b64fabc76343b3be39b7e1dcb930a95e1bb&v=4
url: https://github.com/SofiiaTrufanova
Jedore: Jedore:
login: Jedore login: Jedore
count: 15 count: 15
@ -411,8 +416,13 @@ BORA040126:
mattkoehne: mattkoehne:
login: mattkoehne login: mattkoehne
count: 14 count: 14
avatarUrl: https://avatars.githubusercontent.com/u/80362153?u=6e1439582715693407b86182eb66263bb578a761&v=4 avatarUrl: https://avatars.githubusercontent.com/u/80362153?v=4
url: https://github.com/mattkoehne url: https://github.com/mattkoehne
DianaTrufanova:
login: DianaTrufanova
count: 14
avatarUrl: https://avatars.githubusercontent.com/u/119067607?u=1cd55f841b68b4a187fa6d06a7dafa5f070195aa&v=4
url: https://github.com/DianaTrufanova
jovicon: jovicon:
login: jovicon login: jovicon
count: 13 count: 13
@ -706,7 +716,7 @@ KimJoonSeo:
MinLee0210: MinLee0210:
login: MinLee0210 login: MinLee0210
count: 8 count: 8
avatarUrl: https://avatars.githubusercontent.com/u/57653278?u=7def7c0654ad82f43b46d6dfc3b51c4d2be15011&v=4 avatarUrl: https://avatars.githubusercontent.com/u/57653278?u=25f979af418692b95e907df93607a09117e14b53&v=4
url: https://github.com/MinLee0210 url: https://github.com/MinLee0210
camigomezdev: camigomezdev:
login: camigomezdev login: camigomezdev
@ -718,6 +728,11 @@ maru0123-2004:
count: 8 count: 8
avatarUrl: https://avatars.githubusercontent.com/u/43961566?u=16ed8603a4d6a4665cb6c53a7aece6f31379b769&v=4 avatarUrl: https://avatars.githubusercontent.com/u/43961566?u=16ed8603a4d6a4665cb6c53a7aece6f31379b769&v=4
url: https://github.com/maru0123-2004 url: https://github.com/maru0123-2004
minaton-ru:
login: minaton-ru
count: 8
avatarUrl: https://avatars.githubusercontent.com/u/53541518?u=67336ca11a85493f75031508aade588dad3b9910&v=4
url: https://github.com/minaton-ru
Serrones: Serrones:
login: Serrones login: Serrones
count: 7 count: 7
@ -873,16 +888,11 @@ bankofsardine:
count: 6 count: 6
avatarUrl: https://avatars.githubusercontent.com/u/44944207?u=0368e1b698ffab6bf29e202f9fd2dddd352429f1&v=4 avatarUrl: https://avatars.githubusercontent.com/u/44944207?u=0368e1b698ffab6bf29e202f9fd2dddd352429f1&v=4
url: https://github.com/bankofsardine url: https://github.com/bankofsardine
SofiiaTrufanova: valentinDruzhinin:
login: SofiiaTrufanova login: valentinDruzhinin
count: 6
avatarUrl: https://avatars.githubusercontent.com/u/63260929?v=4
url: https://github.com/SofiiaTrufanova
DianaTrufanova:
login: DianaTrufanova
count: 6 count: 6
avatarUrl: https://avatars.githubusercontent.com/u/119067607?v=4 avatarUrl: https://avatars.githubusercontent.com/u/12831905?u=aae1ebc675c91e8fa582df4fcc4fc4128106344d&v=4
url: https://github.com/DianaTrufanova url: https://github.com/valentinDruzhinin
rsip22: rsip22:
login: rsip22 login: rsip22
count: 5 count: 5
@ -911,7 +921,7 @@ TemaSpb:
BugLight: BugLight:
login: BugLight login: BugLight
count: 5 count: 5
avatarUrl: https://avatars.githubusercontent.com/u/13618366?u=57572e544e40c2a491db5bf7255bd24886d2cb09&v=4 avatarUrl: https://avatars.githubusercontent.com/u/13618366?u=7d733749f80e5f7e66a434cf42aedcfc60340f43&v=4
url: https://github.com/BugLight url: https://github.com/BugLight
0x4Dark: 0x4Dark:
login: 0x4Dark login: 0x4Dark
@ -998,6 +1008,11 @@ devluisrodrigues:
count: 5 count: 5
avatarUrl: https://avatars.githubusercontent.com/u/103431660?u=d9674a3249edc4601d2c712cdebf899918503c3a&v=4 avatarUrl: https://avatars.githubusercontent.com/u/103431660?u=d9674a3249edc4601d2c712cdebf899918503c3a&v=4
url: https://github.com/devluisrodrigues url: https://github.com/devluisrodrigues
Zerohertz:
login: Zerohertz
count: 5
avatarUrl: https://avatars.githubusercontent.com/u/42334717?u=c6acda352c866b1747921e0ff8782b58571d849e&v=4
url: https://github.com/Zerohertz
11kkw: 11kkw:
login: 11kkw login: 11kkw
count: 5 count: 5
@ -1033,6 +1048,11 @@ FelipeSilva93:
count: 4 count: 4
avatarUrl: https://avatars.githubusercontent.com/u/66804965?u=e7cb4b580e46f2e04ecb4cd4d7a12acdddd3c6c1&v=4 avatarUrl: https://avatars.githubusercontent.com/u/66804965?u=e7cb4b580e46f2e04ecb4cd4d7a12acdddd3c6c1&v=4
url: https://github.com/FelipeSilva93 url: https://github.com/FelipeSilva93
peacekimjapan:
login: peacekimjapan
count: 4
avatarUrl: https://avatars.githubusercontent.com/u/33534175?u=e4219bcebc3773a7068cc34c3eb268ef77cec31b&v=4
url: https://github.com/peacekimjapan
bas-baskara: bas-baskara:
login: bas-baskara login: bas-baskara
count: 4 count: 4
@ -1061,7 +1081,7 @@ aminalaee:
erfan-rfmhr: erfan-rfmhr:
login: erfan-rfmhr login: erfan-rfmhr
count: 4 count: 4
avatarUrl: https://avatars.githubusercontent.com/u/98986056?u=6c4f9218fe5bb04780dd92bfced360c55e2009f0&v=4 avatarUrl: https://avatars.githubusercontent.com/u/98986056?u=b1559d684b1ced11b2204546fa3cf28addf665a8&v=4
url: https://github.com/erfan-rfmhr url: https://github.com/erfan-rfmhr
Scorpionchiques: Scorpionchiques:
login: Scorpionchiques login: Scorpionchiques
@ -1123,11 +1143,11 @@ gerry-sabar:
count: 4 count: 4
avatarUrl: https://avatars.githubusercontent.com/u/1120123?v=4 avatarUrl: https://avatars.githubusercontent.com/u/1120123?v=4
url: https://github.com/gerry-sabar url: https://github.com/gerry-sabar
valentinDruzhinin: cookie-byte217:
login: valentinDruzhinin login: cookie-byte217
count: 4 count: 4
avatarUrl: https://avatars.githubusercontent.com/u/12831905?u=aae1ebc675c91e8fa582df4fcc4fc4128106344d&v=4 avatarUrl: https://avatars.githubusercontent.com/u/57880178?v=4
url: https://github.com/valentinDruzhinin url: https://github.com/cookie-byte217
tyronedamasceno: tyronedamasceno:
login: tyronedamasceno login: tyronedamasceno
count: 3 count: 3
@ -1206,7 +1226,7 @@ RuslanTer:
FedorGN: FedorGN:
login: FedorGN login: FedorGN
count: 3 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/66411909?u=1c6734e92f50c7d66f130ef7d394e72b53770fe6&v=4 avatarUrl: https://avatars.githubusercontent.com/u/66411909?u=22382380e7d66ee57ffbfc2ae6bd5efd0cdb672e&v=4
url: https://github.com/FedorGN url: https://github.com/FedorGN
rafsaf: rafsaf:
login: rafsaf login: rafsaf
@ -1328,6 +1348,11 @@ kohiry:
count: 3 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/57669492?u=f6ab0a062740261e882879269a41a47788c84043&v=4 avatarUrl: https://avatars.githubusercontent.com/u/57669492?u=f6ab0a062740261e882879269a41a47788c84043&v=4
url: https://github.com/kohiry url: https://github.com/kohiry
ptt3199:
login: ptt3199
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/51350651?u=2c3d947a80283e32bf616d4c3af139a6be69680f&v=4
url: https://github.com/ptt3199
arynoot: arynoot:
login: arynoot login: arynoot
count: 3 count: 3
@ -1353,16 +1378,21 @@ RyaWcksn:
count: 3 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/42831964?u=0cb4265faf3e3425a89e59b6fddd3eb2de180af0&v=4 avatarUrl: https://avatars.githubusercontent.com/u/42831964?u=0cb4265faf3e3425a89e59b6fddd3eb2de180af0&v=4
url: https://github.com/RyaWcksn url: https://github.com/RyaWcksn
Zerohertz:
login: Zerohertz
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/42334717?u=c6acda352c866b1747921e0ff8782b58571d849e&v=4
url: https://github.com/Zerohertz
tienduong-21: tienduong-21:
login: tienduong-21 login: tienduong-21
count: 3 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/80129618?v=4 avatarUrl: https://avatars.githubusercontent.com/u/80129618?v=4
url: https://github.com/tienduong-21 url: https://github.com/tienduong-21
jameselite:
login: jameselite
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/178516095?u=6964d633449bf7d4a83d0fa0198f81f9ee5cfcd0&v=4
url: https://github.com/jameselite
zbellos:
login: zbellos
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/204500646?v=4
url: https://github.com/zbellos
blaisep: blaisep:
login: blaisep login: blaisep
count: 2 count: 2
@ -1468,11 +1498,6 @@ lindsayzhou:
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/26602940?u=3c52ce6393bb547c97e6380ccdee03e0c64152c6&v=4 avatarUrl: https://avatars.githubusercontent.com/u/26602940?u=3c52ce6393bb547c97e6380ccdee03e0c64152c6&v=4
url: https://github.com/0xflotus url: https://github.com/0xflotus
peacekimjapan:
login: peacekimjapan
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/33534175?u=e4219bcebc3773a7068cc34c3eb268ef77cec31b&v=4
url: https://github.com/peacekimjapan
jonatasoli: jonatasoli:
login: jonatasoli login: jonatasoli
count: 2 count: 2
@ -1656,7 +1681,7 @@ zhiquanchi:
Jamim: Jamim:
login: Jamim login: Jamim
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/5607572?u=0cf3027bec78ba4f0b89802430c136bc69847d7a&v=4 avatarUrl: https://avatars.githubusercontent.com/u/5607572?u=9ce0b6a6d1a5124e28b3c04d8d26827ca328713a&v=4
url: https://github.com/Jamim url: https://github.com/Jamim
alvinkhalil: alvinkhalil:
login: alvinkhalil login: alvinkhalil
@ -1666,7 +1691,7 @@ alvinkhalil:
leylaeminova: leylaeminova:
login: leylaeminova login: leylaeminova
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/100516839?u=35a9ce14bb86d7d7faa25d432f61dec2984cb818&v=4 avatarUrl: https://avatars.githubusercontent.com/u/100516839?u=0b0dab9e31742076b22812b14a39b4e6d8f6de4a&v=4
url: https://github.com/leylaeminova url: https://github.com/leylaeminova
UN-9BOT: UN-9BOT:
login: UN-9BOT login: UN-9BOT
@ -1678,11 +1703,6 @@ flasonme:
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/30571019?v=4 avatarUrl: https://avatars.githubusercontent.com/u/30571019?v=4
url: https://github.com/flasonme url: https://github.com/flasonme
ptt3199:
login: ptt3199
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/51350651?u=ccf51f8820787e17983954f26b06acf226cba293&v=4
url: https://github.com/ptt3199
gustavoprezoto: gustavoprezoto:
login: gustavoprezoto login: gustavoprezoto
count: 2 count: 2
@ -1733,3 +1753,13 @@ J-Fuji:
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/101452903?v=4 avatarUrl: https://avatars.githubusercontent.com/u/101452903?v=4
url: https://github.com/J-Fuji url: https://github.com/J-Fuji
MrL8199:
login: MrL8199
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/39489075?u=3fc4f89c86973e40b5970d838c801bdbc13ac828&v=4
url: https://github.com/MrL8199
ivintoiu:
login: ivintoiu
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/1853336?u=5e3d0977f44661fb9712fa297cc8f7608ea6ce48&v=4
url: https://github.com/ivintoiu

49
docs/en/data/translators.yml

@ -33,6 +33,11 @@ waynerv:
count: 20 count: 20
avatarUrl: https://avatars.githubusercontent.com/u/39515546?u=ec35139777597cdbbbddda29bf8b9d4396b429a9&v=4 avatarUrl: https://avatars.githubusercontent.com/u/39515546?u=ec35139777597cdbbbddda29bf8b9d4396b429a9&v=4
url: https://github.com/waynerv url: https://github.com/waynerv
valentinDruzhinin:
login: valentinDruzhinin
count: 18
avatarUrl: https://avatars.githubusercontent.com/u/12831905?u=aae1ebc675c91e8fa582df4fcc4fc4128106344d&v=4
url: https://github.com/valentinDruzhinin
AlertRED: AlertRED:
login: AlertRED login: AlertRED
count: 16 count: 16
@ -53,16 +58,16 @@ codingjenny:
count: 14 count: 14
avatarUrl: https://avatars.githubusercontent.com/u/103817302?u=3a042740dc0ff58615da0d8679230966fd7693e8&v=4 avatarUrl: https://avatars.githubusercontent.com/u/103817302?u=3a042740dc0ff58615da0d8679230966fd7693e8&v=4
url: https://github.com/codingjenny url: https://github.com/codingjenny
valentinDruzhinin:
login: valentinDruzhinin
count: 14
avatarUrl: https://avatars.githubusercontent.com/u/12831905?u=aae1ebc675c91e8fa582df4fcc4fc4128106344d&v=4
url: https://github.com/valentinDruzhinin
Xewus: Xewus:
login: Xewus login: Xewus
count: 13 count: 13
avatarUrl: https://avatars.githubusercontent.com/u/85196001?u=f8e2dc7e5104f109cef944af79050ea8d1b8f914&v=4 avatarUrl: https://avatars.githubusercontent.com/u/85196001?u=f8e2dc7e5104f109cef944af79050ea8d1b8f914&v=4
url: https://github.com/Xewus url: https://github.com/Xewus
Zhongheng-Cheng:
login: Zhongheng-Cheng
count: 13
avatarUrl: https://avatars.githubusercontent.com/u/95612344?u=a0f7730a3cc7486827965e01a119ad610bda4b0a&v=4
url: https://github.com/Zhongheng-Cheng
Smlep: Smlep:
login: Smlep login: Smlep
count: 11 count: 11
@ -83,11 +88,6 @@ Vincy1230:
count: 9 count: 9
avatarUrl: https://avatars.githubusercontent.com/u/81342412?u=ab5e256a4077a4a91f3f9cd2115ba80780454cbe&v=4 avatarUrl: https://avatars.githubusercontent.com/u/81342412?u=ab5e256a4077a4a91f3f9cd2115ba80780454cbe&v=4
url: https://github.com/Vincy1230 url: https://github.com/Vincy1230
Zhongheng-Cheng:
login: Zhongheng-Cheng
count: 9
avatarUrl: https://avatars.githubusercontent.com/u/95612344?u=a0f7730a3cc7486827965e01a119ad610bda4b0a&v=4
url: https://github.com/Zhongheng-Cheng
rjNemo: rjNemo:
login: rjNemo login: rjNemo
count: 8 count: 8
@ -103,6 +103,11 @@ pablocm83:
count: 8 count: 8
avatarUrl: https://avatars.githubusercontent.com/u/28315068?u=3310fbb05bb8bfc50d2c48b6cb64ac9ee4a14549&v=4 avatarUrl: https://avatars.githubusercontent.com/u/28315068?u=3310fbb05bb8bfc50d2c48b6cb64ac9ee4a14549&v=4
url: https://github.com/pablocm83 url: https://github.com/pablocm83
ptt3199:
login: ptt3199
count: 7
avatarUrl: https://avatars.githubusercontent.com/u/51350651?u=2c3d947a80283e32bf616d4c3af139a6be69680f&v=4
url: https://github.com/ptt3199
batlopes: batlopes:
login: batlopes login: batlopes
count: 6 count: 6
@ -118,11 +123,6 @@ Alexandrhub:
count: 6 count: 6
avatarUrl: https://avatars.githubusercontent.com/u/119126536?u=9fc0d48f3307817bafecc5861eb2168401a6cb04&v=4 avatarUrl: https://avatars.githubusercontent.com/u/119126536?u=9fc0d48f3307817bafecc5861eb2168401a6cb04&v=4
url: https://github.com/Alexandrhub url: https://github.com/Alexandrhub
ptt3199:
login: ptt3199
count: 6
avatarUrl: https://avatars.githubusercontent.com/u/51350651?u=ccf51f8820787e17983954f26b06acf226cba293&v=4
url: https://github.com/ptt3199
Serrones: Serrones:
login: Serrones login: Serrones
count: 5 count: 5
@ -203,6 +203,11 @@ kwang1215:
count: 4 count: 4
avatarUrl: https://avatars.githubusercontent.com/u/74170199?u=2a63ff6692119dde3f5e5693365b9fcd6f977b08&v=4 avatarUrl: https://avatars.githubusercontent.com/u/74170199?u=2a63ff6692119dde3f5e5693365b9fcd6f977b08&v=4
url: https://github.com/kwang1215 url: https://github.com/kwang1215
k94-ishi:
login: k94-ishi
count: 4
avatarUrl: https://avatars.githubusercontent.com/u/32672580?u=bc7c5c07af0656be9fe4f1784a444af8d81ded89&v=4
url: https://github.com/k94-ishi
jfunez: jfunez:
login: jfunez login: jfunez
count: 3 count: 3
@ -271,12 +276,12 @@ mojtabapaso:
hsuanchi: hsuanchi:
login: hsuanchi login: hsuanchi
count: 3 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/24913710?u=0b094ae292292fee093818e37ceb645c114d2bff&v=4 avatarUrl: https://avatars.githubusercontent.com/u/24913710?u=7d25a398e478b6e63503bf6f26c54efa9e0da07b&v=4
url: https://github.com/hsuanchi url: https://github.com/hsuanchi
alejsdev: alejsdev:
login: alejsdev login: alejsdev
count: 3 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/90076947?u=356f39ff3f0211c720b06d3dbb060e98884085e3&v=4 avatarUrl: https://avatars.githubusercontent.com/u/90076947?u=843355286cea366cbb3a4fc3a14343bd4eceef55&v=4
url: https://github.com/alejsdev url: https://github.com/alejsdev
riroan: riroan:
login: riroan login: riroan
@ -333,11 +338,6 @@ gerry-sabar:
count: 3 count: 3
avatarUrl: https://avatars.githubusercontent.com/u/1120123?v=4 avatarUrl: https://avatars.githubusercontent.com/u/1120123?v=4
url: https://github.com/gerry-sabar url: https://github.com/gerry-sabar
k94-ishi:
login: k94-ishi
count: 3
avatarUrl: https://avatars.githubusercontent.com/u/32672580?u=bc7c5c07af0656be9fe4f1784a444af8d81ded89&v=4
url: https://github.com/k94-ishi
Rishat-F: Rishat-F:
login: Rishat-F login: Rishat-F
count: 3 count: 3
@ -513,3 +513,8 @@ timothy-jeong:
count: 2 count: 2
avatarUrl: https://avatars.githubusercontent.com/u/21125286?v=4 avatarUrl: https://avatars.githubusercontent.com/u/21125286?v=4
url: https://github.com/11kkw url: https://github.com/11kkw
yes0ng:
login: yes0ng
count: 2
avatarUrl: https://avatars.githubusercontent.com/u/25501794?u=3aed18b0d491e0220a167a1e9e58bea3638c6707&v=4
url: https://github.com/yes0ng

2
docs/en/docs/advanced/generate-clients.md

@ -24,7 +24,7 @@ For example, you might want to try:
* <a href="https://speakeasy.com/?utm_source=fastapi+repo&utm_medium=github+sponsorship" class="external-link" target="_blank">Speakeasy</a> * <a href="https://speakeasy.com/?utm_source=fastapi+repo&utm_medium=github+sponsorship" class="external-link" target="_blank">Speakeasy</a>
* <a href="https://www.stainlessapi.com/?utm_source=fastapi&utm_medium=referral" class="external-link" target="_blank">Stainless</a> * <a href="https://www.stainlessapi.com/?utm_source=fastapi&utm_medium=referral" class="external-link" target="_blank">Stainless</a>
* <a href="https://developers.liblab.com/tutorials/sdk-for-fastapi/?utm_source=fastapi" class="external-link" target="_blank">liblab</a> * <a href="https://developers.liblab.com/tutorials/sdk-for-fastapi?utm_source=fastapi" class="external-link" target="_blank">liblab</a>
There are also several other companies offering similar services that you can search and find online. 🤓 There are also several other companies offering similar services that you can search and find online. 🤓

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

@ -9,6 +9,36 @@ hide:
### Docs ### Docs
* 📝 Fix liblab client generation doc link. PR [#13571](https://github.com/fastapi/fastapi/pull/13571) by [@EFord36](https://github.com/EFord36).
* ✏️ Fix talk information typo. PR [#13544](https://github.com/fastapi/fastapi/pull/13544) by [@blueswen](https://github.com/blueswen).
* 📝 Add External Link: Taiwanese talk on FastAPI with observability . PR [#13527](https://github.com/fastapi/fastapi/pull/13527) by [@blueswen](https://github.com/blueswen).
### Translations
* 🌐 Add Russian translation for `docs/ru/docs/tutorial/header-param-models.md`. PR [#13526](https://github.com/fastapi/fastapi/pull/13526) by [@minaton-ru](https://github.com/minaton-ru).
* 🌐 Update Chinese translation for `docs/zh/docs/tutorial/index.md`. PR [#13374](https://github.com/fastapi/fastapi/pull/13374) by [@Zhongheng-Cheng](https://github.com/Zhongheng-Cheng).
* 🌐 Update Chinese translation for `docs/zh/docs/deployment/manually.md`. PR [#13324](https://github.com/fastapi/fastapi/pull/13324) by [@Zhongheng-Cheng](https://github.com/Zhongheng-Cheng).
* 🌐 Update Chinese translation for `docs/zh/docs/deployment/server-workers.md`. PR [#13292](https://github.com/fastapi/fastapi/pull/13292) by [@Zhongheng-Cheng](https://github.com/Zhongheng-Cheng).
* 🌐 Update Chinese translation for `docs/zh/docs/tutorial/first-steps.md`. PR [#13348](https://github.com/fastapi/fastapi/pull/13348) by [@Zhongheng-Cheng](https://github.com/Zhongheng-Cheng).
### Internal
* 👥 Update FastAPI People - Experts. PR [#13568](https://github.com/fastapi/fastapi/pull/13568) by [@tiangolo](https://github.com/tiangolo).
* 👥 Update FastAPI GitHub topic repositories. PR [#13565](https://github.com/fastapi/fastapi/pull/13565) by [@tiangolo](https://github.com/tiangolo).
* 👥 Update FastAPI People - Sponsors. PR [#13559](https://github.com/fastapi/fastapi/pull/13559) by [@tiangolo](https://github.com/tiangolo).
* 👥 Update FastAPI People - Contributors and Translators. PR [#13558](https://github.com/fastapi/fastapi/pull/13558) by [@tiangolo](https://github.com/tiangolo).
* ⬆ Bump dirty-equals from 0.8.0 to 0.9.0. PR [#13561](https://github.com/fastapi/fastapi/pull/13561) by [@dependabot[bot]](https://github.com/apps/dependabot).
* 🔧 Clean up `docs/en/mkdocs.yml` configuration file. PR [#13542](https://github.com/fastapi/fastapi/pull/13542) by [@svlandeg](https://github.com/svlandeg).
* ⬆ [pre-commit.ci] pre-commit autoupdate. PR [#12986](https://github.com/fastapi/fastapi/pull/12986) by [@pre-commit-ci[bot]](https://github.com/apps/pre-commit-ci).
## 0.115.12
### Fixes
* 🐛 Fix `convert_underscores=False` for header Pydantic models. PR [#13515](https://github.com/fastapi/fastapi/pull/13515) by [@tiangolo](https://github.com/tiangolo).
### Docs
* 📝 Update `docs/en/docs/tutorial/middleware.md`. PR [#13444](https://github.com/fastapi/fastapi/pull/13444) by [@Rishat-F](https://github.com/Rishat-F). * 📝 Update `docs/en/docs/tutorial/middleware.md`. PR [#13444](https://github.com/fastapi/fastapi/pull/13444) by [@Rishat-F](https://github.com/Rishat-F).
* 👥 Update FastAPI People - Experts. PR [#13493](https://github.com/fastapi/fastapi/pull/13493) by [@tiangolo](https://github.com/tiangolo). * 👥 Update FastAPI People - Experts. PR [#13493](https://github.com/fastapi/fastapi/pull/13493) by [@tiangolo](https://github.com/tiangolo).

16
docs/en/docs/tutorial/header-param-models.md

@ -51,6 +51,22 @@ For example, if the client tries to send a `tool` header with a value of `plumbu
} }
``` ```
## Disable Convert Underscores
The same way as with regular header parameters, when you have underscore characters in the parameter names, they are **automatically converted to hyphens**.
For example, if you have a header parameter `save_data` in the code, the expected HTTP header will be `save-data`, and it will show up like that in the docs.
If for some reason you need to disable this automatic conversion, you can do it as well for Pydantic models for header parameters.
{* ../../docs_src/header_param_models/tutorial003_an_py310.py hl[19] *}
/// warning
Before setting `convert_underscores` to `False`, bear in mind that some HTTP proxies and servers disallow the usage of headers with underscores.
///
## Summary ## Summary
You can use **Pydantic models** to declare **headers** in **FastAPI**. 😎 You can use **Pydantic models** to declare **headers** in **FastAPI**. 😎

76
docs/en/mkdocs.yml

@ -6,7 +6,7 @@ theme:
name: material name: material
custom_dir: ../en/overrides custom_dir: ../en/overrides
palette: palette:
- media: "(prefers-color-scheme)" - media: (prefers-color-scheme)
toggle: toggle:
icon: material/lightbulb-auto icon: material/lightbulb-auto
name: Switch to light mode name: Switch to light mode
@ -27,7 +27,6 @@ theme:
features: features:
- content.code.annotate - content.code.annotate
- content.code.copy - content.code.copy
# - content.code.select
- content.footnote.tooltips - content.footnote.tooltips
- content.tabs.link - content.tabs.link
- content.tooltips - content.tooltips
@ -35,7 +34,6 @@ theme:
- navigation.indexes - navigation.indexes
- navigation.instant - navigation.instant
- navigation.instant.prefetch - navigation.instant.prefetch
# - navigation.instant.preview
- navigation.instant.progress - navigation.instant.progress
- navigation.path - navigation.path
- navigation.tabs - navigation.tabs
@ -46,7 +44,6 @@ theme:
- search.share - search.share
- search.suggest - search.suggest
- toc.follow - toc.follow
icon: icon:
repo: fontawesome/brands/github-alt repo: fontawesome/brands/github-alt
logo: img/icon-white.svg logo: img/icon-white.svg
@ -55,11 +52,7 @@ theme:
repo_name: fastapi/fastapi repo_name: fastapi/fastapi
repo_url: https://github.com/fastapi/fastapi repo_url: https://github.com/fastapi/fastapi
plugins: plugins:
# Material for MkDocs search: null
search:
# Configured in mkdocs.insiders.yml
# social:
# Other plugins
macros: macros:
include_yaml: include_yaml:
- external_links: ../en/data/external_links.yml - external_links: ../en/data/external_links.yml
@ -103,7 +96,6 @@ plugins:
signature_crossrefs: true signature_crossrefs: true
show_symbol_type_heading: true show_symbol_type_heading: true
show_symbol_type_toc: true show_symbol_type_toc: true
nav: nav:
- FastAPI: index.md - FastAPI: index.md
- features.md - features.md
@ -258,33 +250,27 @@ nav:
- benchmarks.md - benchmarks.md
- management.md - management.md
- release-notes.md - release-notes.md
markdown_extensions: markdown_extensions:
# Python Markdown abbr: null
abbr: attr_list: null
attr_list: footnotes: null
footnotes: md_in_html: null
md_in_html: tables: null
tables:
toc: toc:
permalink: true permalink: true
pymdownx.betterem: null
# Python Markdown Extensions pymdownx.caret: null
pymdownx.betterem:
pymdownx.caret:
pymdownx.highlight: pymdownx.highlight:
line_spans: __span line_spans: __span
pymdownx.inlinehilite: pymdownx.inlinehilite: null
pymdownx.keys: pymdownx.keys: null
pymdownx.mark: pymdownx.mark: null
pymdownx.superfences: pymdownx.superfences:
custom_fences: custom_fences:
- name: mermaid - name: mermaid
class: mermaid class: mermaid
format: !!python/name:pymdownx.superfences.fence_code_format format: !!python/name:pymdownx.superfences.fence_code_format ''
pymdownx.tilde: pymdownx.tilde: null
# pymdownx blocks
pymdownx.blocks.admonition: pymdownx.blocks.admonition:
types: types:
- note - note
@ -295,17 +281,13 @@ markdown_extensions:
- tip - tip
- hint - hint
- warning - warning
# Custom types
- info - info
- check - check
pymdownx.blocks.details: pymdownx.blocks.details: null
pymdownx.blocks.tab: pymdownx.blocks.tab:
alternate_style: True alternate_style: true
mdx_include: null
# Other extensions markdown_include_variants: null
mdx_include:
markdown_include_variants:
extra: extra:
analytics: analytics:
provider: google provider: google
@ -313,16 +295,14 @@ extra:
feedback: feedback:
title: Was this page helpful? title: Was this page helpful?
ratings: ratings:
- icon: material/emoticon-happy-outline - icon: material/emoticon-happy-outline
name: This page was helpful name: This page was helpful
data: 1 data: 1
note: >- note: Thanks for your feedback!
Thanks for your feedback! - icon: material/emoticon-sad-outline
- icon: material/emoticon-sad-outline name: This page could be improved
name: This page could be improved data: 0
data: 0 note: Thanks for your feedback!
note: >-
Thanks for your feedback!
social: social:
- icon: fontawesome/brands/github-alt - icon: fontawesome/brands/github-alt
link: https://github.com/fastapi/fastapi link: https://github.com/fastapi/fastapi
@ -338,7 +318,6 @@ extra:
link: https://medium.com/@tiangolo link: https://medium.com/@tiangolo
- icon: fontawesome/solid/globe - icon: fontawesome/solid/globe
link: https://tiangolo.com link: https://tiangolo.com
alternate: alternate:
- link: / - link: /
name: en - English name: en - English
@ -390,14 +369,11 @@ extra:
name: zh-hant - 繁體中文 name: zh-hant - 繁體中文
- link: /em/ - link: /em/
name: 😉 name: 😉
extra_css: extra_css:
- css/termynal.css - css/termynal.css
- css/custom.css - css/custom.css
extra_javascript: extra_javascript:
- js/termynal.js - js/termynal.js
- js/custom.js - js/custom.js
hooks: hooks:
- ../../scripts/mkdocs_hooks.py - ../../scripts/mkdocs_hooks.py

72
docs/ru/docs/tutorial/header-param-models.md

@ -0,0 +1,72 @@
# Модели Header-параметров
Если у вас есть группа связанных **header-параметров**, то вы можете объединить их в одну **Pydantic-модель**.
Это позволит вам **переиспользовать модель** в **разных местах**, а также задать валидацию и метаданные сразу для всех параметров. 😎
/// note | Заметка
Этот функционал доступен в FastAPI начиная с версии `0.115.0`. 🤓
///
## Header-параметры в виде Pydantic-модели
Объявите нужные **header-параметры** в **Pydantic-модели** и затем аннотируйте параметр как `Header`:
{* ../../docs_src/header_param_models/tutorial001_an_py310.py hl[9:14,18] *}
**FastAPI** **извлечёт** данные для **каждого поля** из **заголовков** запроса и выдаст заданную вами Pydantic-модель.
## Проверьте документацию
Вы можете посмотреть нужные header-параметры в графическом интерфейсе сгенерированной документации по пути `/docs`:
<div class="screenshot">
<img src="/img/tutorial/header-param-models/image01.png">
</div>
## Как запретить дополнительные заголовки
В некоторых случаях (не особо часто встречающихся) вам может понадобиться **ограничить** заголовки, которые вы хотите получать.
Вы можете использовать возможности конфигурации Pydantic-модели для того, чтобы запретить (`forbid`) любые дополнительные (`extra`) поля:
{* ../../docs_src/header_param_models/tutorial002_an_py310.py hl[10] *}
Если клиент попробует отправить **дополнительные заголовки**, то в ответ он получит **ошибку**.
Например, если клиент попытается отправить заголовок `tool` со значением `plumbus`, то в ответ он получит ошибку, сообщающую ему, что header-параметр `tool` не разрешен:
```json
{
"detail": [
{
"type": "extra_forbidden",
"loc": ["header", "tool"],
"msg": "Extra inputs are not permitted",
"input": "plumbus",
}
]
}
```
## Как отключить автоматическое преобразование подчеркиваний
Как и в случае с обычными заголовками, если у вас в именах параметров имеются символы подчеркивания, они **автоматически преобразовываются в дефис**.
Например, если в коде есть header-параметр `save_data`, то ожидаемый HTTP-заголовок будет `save-data` и именно так он будет отображаться в документации.
Если по каким-то причинам вам нужно отключить данное автоматическое преобразование, это можно сделать и для Pydantic-моделей для header-параметров.
{* ../../docs_src/header_param_models/tutorial003_an_py310.py hl[19] *}
/// warning | Внимание
Перед тем как устанавливать для параметра `convert_underscores` значение `False`, имейте в виду, что некоторые HTTP-прокси и серверы не разрешают использовать заголовки с символами подчеркивания.
///
## Резюме
Вы можете использовать **Pydantic-модели** для объявления **header-параметров** в **FastAPI**. 😎

158
docs/zh/docs/deployment/manually.md

@ -1,159 +1,157 @@
# 手动运行服务器 - Uvicorn # 手动运行服务器
在远程服务器计算机上运行 **FastAPI** 应用程序所需的主要东西是 ASGI 服务器程序,例如 **Uvicorn** ## 使用 `fastapi run` 命令
有 3 个主要可选方案 简而言之,使用 `fastapi run` 来运行您的 FastAPI 应用程序
* <a href="https://www.uvicorn.org/" class="external-link" target="_blank">Uvicorn</a>:高性能 ASGI 服务器。 <div class="termy">
* <a href="https://hypercorn.readthedocs.io/" class="external-link" target="_blank">Hypercorn</a>:与 HTTP/2 和 Trio 等兼容的 ASGI 服务器。
* <a href="https://github.com/django/daphne" class="external-link" target="_blank">Daphne</a>:为 Django Channels 构建的 ASGI 服务器。
## 服务器主机和服务器程序
关于名称,有一个小细节需要记住。 💡
“**服务器**”一词通常用于指远程/云计算机(物理机或虚拟机)以及在该计算机上运行的程序(例如 Uvicorn)。
请记住,当您一般读到“服务器”这个名词时,它可能指的是这两者之一。 ```console
$ <font color="#4E9A06">fastapi</font> run <u style="text-decoration-style:solid">main.py</u>
当提到远程主机时,通常将其称为**服务器**,但也称为**机器**(machine)、**VM**(虚拟机)、**节点**。 这些都是指某种类型的远程计算机,通常运行 Linux,您可以在其中运行程序。 <span style="background-color:#009485"><font color="#D3D7CF"> FastAPI </font></span> Starting production server 🚀
Searching for package file structure from directories
with <font color="#3465A4">__init__.py</font> files
Importing from <font color="#75507B">/home/user/code/</font><font color="#AD7FA8">awesomeapp</font>
## 安装服务器程序 <span style="background-color:#007166"><font color="#D3D7CF"> module </font></span> 🐍 main.py
您可以使用以下命令安装 ASGI 兼容服务器: <span style="background-color:#007166"><font color="#D3D7CF"> code </font></span> Importing the FastAPI app object from the module with
the following code:
//// tab | Uvicorn <u style="text-decoration-style:solid">from </u><u style="text-decoration-style:solid"><b>main</b></u><u style="text-decoration-style:solid"> import </u><u style="text-decoration-style:solid"><b>app</b></u>
* <a href="https://www.uvicorn.org/" class="external-link" target="_blank">Uvicorn</a>,一个快如闪电 ASGI 服务器,基于 uvloop 和 httptools 构建。 <span style="background-color:#007166"><font color="#D3D7CF"> app </font></span> Using import string: <font color="#3465A4">main:app</font>
<div class="termy"> <span style="background-color:#007166"><font color="#D3D7CF"> server </font></span> Server started at <font color="#729FCF"><u style="text-decoration-style:solid">http://0.0.0.0:8000</u></font>
<span style="background-color:#007166"><font color="#D3D7CF"> server </font></span> Documentation at <font color="#729FCF"><u style="text-decoration-style:solid">http://0.0.0.0:8000/docs</u></font>
```console Logs:
$ pip install "uvicorn[standard]"
---> 100% <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Started server process <b>[</b><font color="#34E2E2"><b>2306215</b></font><b>]</b>
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Waiting for application startup.
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Application startup complete.
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Uvicorn running on <font color="#729FCF"><u style="text-decoration-style:solid">http://0.0.0.0:8000</u></font> <b>(</b>Press CTRL+C
to quit<b>)</b>
``` ```
</div> </div>
/// tip 这在大多数情况下都能正常运行。😎
通过添加`standard`,Uvicorn 将安装并使用一些推荐的额外依赖项 例如,您可以使用该命令在容器、服务器等环境中启动您的 **FastAPI** 应用
其中包括`uvloop`,它是`asyncio`的高性能替代品,它提供了巨大的并发性能提升。 ## ASGI 服务器
/// 让我们深入了解一些细节。
//// FastAPI 使用了一种用于构建 Python Web 框架和服务器的标准,称为 <abbr title="Asynchronous Server Gateway Interface,异步服务器网关接口">ASGI</abbr>。FastAPI 本质上是一个 ASGI Web 框架。
//// tab | Hypercorn 要在远程服务器上运行 **FastAPI** 应用(或任何其他 ASGI 应用),您需要一个 ASGI 服务器程序,例如 **Uvicorn**。它是 `fastapi` 命令默认使用的 ASGI 服务器。
* <a href="https://github.com/pgjones/hypercorn" class="external-link" target="_blank">Hypercorn</a>,一个也与 HTTP/2 兼容的 ASGI 服务器。 除此之外,还有其他一些可选的 ASGI 服务器,例如:
<div class="termy">
```console * <a href="https://www.uvicorn.org/" class="external-link" target="_blank">Uvicorn</a>:高性能 ASGI 服务器。
$ pip install hypercorn * <a href="https://hypercorn.readthedocs.io/" class="external-link" target="_blank">Hypercorn</a>:与 HTTP/2 和 Trio 等兼容的 ASGI 服务器。
* <a href="https://github.com/django/daphne" class="external-link" target="_blank">Daphne</a>:为 Django Channels 构建的 ASGI 服务器。
---> 100% * <a href="https://github.com/emmett-framework/granian" class="external-link" target="_blank">Granian</a>:基于 Rust 的 HTTP 服务器,专为 Python 应用设计。
``` * <a href="https://unit.nginx.org/howto/fastapi/" class="external-link" target="_blank">NGINX Unit</a>:NGINX Unit 是一个轻量级且灵活的 Web 应用运行时环境。
</div>
...或任何其他 ASGI 服务器。 ## 服务器主机和服务器程序
//// 关于名称,有一个小细节需要记住。 💡
## 运行服务器程序 “**服务器**”一词通常用于指远程/云计算机(物理机或虚拟机)以及在该计算机上运行的程序(例如 Uvicorn)。
您可以按照之前教程中的相同方式运行应用程序,但不使用`--reload`选项,例如: 请记住,当您一般读到“服务器”这个名词时,它可能指的是这两者之一。
//// tab | Uvicorn 当提到远程主机时,通常将其称为**服务器**,但也称为**机器**(machine)、**VM**(虚拟机)、**节点**。 这些都是指某种类型的远程计算机,通常运行 Linux,您可以在其中运行程序。
<div class="termy">
```console ## 安装服务器程序
$ uvicorn main:app --host 0.0.0.0 --port 80
<span style="color: green;">INFO</span>: Uvicorn running on http://0.0.0.0:80 (Press CTRL+C to quit) 当您安装 FastAPI 时,它自带一个生产环境服务器——Uvicorn,并且您可以使用 `fastapi run` 命令来启动它。
```
</div> 不过,您也可以手动安装 ASGI 服务器。
//// 请确保您创建并激活一个[虚拟环境](../virtual-environments.md){.internal-link target=_blank},然后再安装服务器应用程序。
//// tab | Hypercorn 例如,要安装 Uvicorn,可以运行以下命令:
<div class="termy"> <div class="termy">
```console ```console
$ hypercorn main:app --bind 0.0.0.0:80 $ pip install "uvicorn[standard]"
Running on 0.0.0.0:8080 over http (CTRL + C to quit) ---> 100%
``` ```
</div> </div>
//// 类似的流程也适用于任何其他 ASGI 服务器程序。
/// warning /// tip
如果您正在使用`--reload`选项,请记住删除它 通过添加 `standard` 选项,Uvicorn 将安装并使用一些推荐的额外依赖项
`--reload` 选项消耗更多资源,并且更不稳定 其中包括 `uvloop`,这是 `asyncio` 的高性能替代方案,能够显著提升并发性能
它在**开发**期间有很大帮助,但您**不应该**在**生产环境**中使用它 当您使用 `pip install "fastapi[standard]"` 安装 FastAPI 时,实际上也会安装 `uvicorn[standard]`
/// ///
## Hypercorn with Trio ## 运行服务器程序
Starlette 和 **FastAPI** 基于 <a href="https://anyio.readthedocs.io/en/stable/" class="external-link" target="_blank">AnyIO</a>, 所以它们才能同时与 Python 的标准库 <a href="https://docs.python.org/3/library/asyncio-task.html" class="external-link" target="_blank">asyncio</a><a href="https://trio.readthedocs.io/en/stable/" class="external-link" target="_blank">Trio</a> 兼容。
尽管如此,Uvicorn 目前仅与 asyncio 兼容,并且通常使用 <a href="https://github.com/MagicStack/uvloop" class="external-link" target="_blank">`uvloop`</a >, 它是`asyncio`的高性能替代品。
但如果你想直接使用**Trio**,那么你可以使用**Hypercorn**,因为它支持它。 ✨
### 安装具有 Trio 的 Hypercorn
首先,您需要安装具有 Trio 支持的 Hypercorn 如果您手动安装了 ASGI 服务器,通常需要以特定格式传递一个导入字符串,以便服务器能够正确导入您的 FastAPI 应用:
<div class="termy"> <div class="termy">
```console ```console
$ pip install "hypercorn[trio]" $ uvicorn main:app --host 0.0.0.0 --port 80
---> 100%
<span style="color: green;">INFO</span>: Uvicorn running on http://0.0.0.0:80 (Press CTRL+C to quit)
``` ```
</div> </div>
### Run with Trio /// note
然后你可以传递值`trio`给命令行选项`--worker-class`: 命令 `uvicorn main:app` 的含义如下:
<div class="termy"> * `main`:指的是 `main.py` 文件(即 Python “模块”)。
* `app`:指的是 `main.py` 文件中通过 `app = FastAPI()` 创建的对象。
```console 它等价于以下导入语句:
$ hypercorn main:app --worker-class trio
```Python
from main import app
``` ```
</div> ///
每种 ASGI 服务器程序通常都会有类似的命令,您可以在它们的官方文档中找到更多信息。
/// warning
Uvicorn 和其他服务器支持 `--reload` 选项,该选项在开发过程中非常有用。
这将通过您的应用程序启动 Hypercorn,并使用 Trio 作为后端。 `--reload` 选项会消耗更多资源,且相对不稳定
现在您可以在应用程序内部使用 Trio。 或者更好的是,您可以使用 AnyIO,使您的代码与 Trio 和 asyncio 兼容。 🎉 它对于**开发阶段**非常有帮助,但在**生产环境**中**不应该**使用。
///
## 部署概念 ## 部署概念
这些示例运行服务器程序(例如 Uvicorn),启动**单个进程**,在所有 IP(`0.0.0.0`)上监听预定义端口(例如`80`) 这些示例运行服务器程序(例如 Uvicorn),启动**单个进程**,在所有 IP(`0.0.0.0`)上监听预定义端口(例如`80`)
这是基本思路。 但您可能需要处理一些其他事情,例如: 这是基本思路。 但您可能需要处理一些其他事情,例如:
* 安全性 - HTTPS * 安全性 - HTTPS
* 启动时运行 * 启动时运行
* 重新启动 * 重新启动
* Replication(运行的进程数) * 复制(运行的进程数)
* 内存 * 内存
* 开始前的步骤 * 开始前的步骤

144
docs/zh/docs/deployment/server-workers.md

@ -1,4 +1,4 @@
# Server Workers - Gunicorn with Uvicorn # 服务器工作进程(Workers) - 使用 Uvicorn 的多工作进程模式
让我们回顾一下之前的部署概念: 让我们回顾一下之前的部署概念:
@ -9,125 +9,79 @@
* 内存 * 内存
* 启动前的先前步骤 * 启动前的先前步骤
到目前为止,通过文档中的所有教程,您可能已经在**单个进程**上运行了像 Uvicorn 这样的**服务器程序**。 到目前为止,在文档中的所有教程中,您可能一直是在运行一个**服务器程序**,例如使用 `fastapi` 命令来启动 Uvicorn,而它默认运行的是**单进程模式**。
部署应用程序时,您可能希望进行一些**进程复制**,以利用**多核**并能够处理更多请求。 部署应用程序时,您可能希望进行一些**进程复制**,以利用**多核** CPU 并能够处理更多请求。
正如您在上一章有关[部署概念](concepts.md){.internal-link target=_blank}中看到的,您可以使用多种策略。 正如您在上一章有关[部署概念](concepts.md){.internal-link target=_blank}中看到的,您可以使用多种策略。
这里我将向您展示如何将 <a href="https://gunicorn.org/" class="external-link" target="_blank">**Gunicorn**</a>**Uvicorn worker 进程** 一起使用 本章节中,我将向您展示如何使用 `fastapi` 命令或直接使用 `uvicorn` 命令以**多工作进程模式**运行 **Uvicorn**
/// info /// info
如果您正在使用容器,例如 Docker 或 Kubernetes,我将在下一章中告诉您更多相关信息:[容器中的 FastAPI - Docker](docker.md){.internal-link target=_blank}。 如果您正在使用容器,例如 Docker 或 Kubernetes,我将在下一章中告诉您更多相关信息:[容器中的 FastAPI - Docker](docker.md){.internal-link target=_blank}。
特别是,当在 **Kubernetes** 上运行时,您可能**不想**使用 Gunicorn,而是运行 **每个容器一个 Uvicorn 进程**,但我将在本章后面告诉您这一点。 比较特别的是,在 **Kubernetes** 环境中运行时,您通常**不需要**使用多个工作进程,而是**每个容器运行一个 Uvicorn 进程**。不过,我会在本章节的后续部分详细介绍这一点。
/// ///
## Gunicorn with Uvicorn Workers ## 多个工作进程
**Gunicorn**主要是一个使用**WSGI标准**的应用服务器。 这意味着 Gunicorn 可以为 Flask 和 Django 等应用程序提供服务。 Gunicorn 本身与 **FastAPI** 不兼容,因为 FastAPI 使用最新的 **<a href="https://asgi.readthedocs.io/en/latest/" class="external-link" target=" _blank">ASGI 标准</a>**。 您可以使用 `--workers` 命令行选项来启动多个工作进程:
但 Gunicorn 支持充当 **进程管理器** 并允许用户告诉它要使用哪个特定的 **worker类**。 然后 Gunicorn 将使用该类启动一个或多个 **worker进程** //// tab | `fastapi`
**Uvicorn** 有一个 Gunicorn 兼容的worker类。 如果您使用 `fastapi` 命令:
使用这种组合,Gunicorn 将充当 **进程管理器**,监听 **端口****IP**。 它会将通信**传输**到运行**Uvicorn类**的worker进程。
然后与Gunicorn兼容的**Uvicorn worker**类将负责将Gunicorn发送的数据转换为ASGI标准以供FastAPI使用。
## 安装 Gunicorn 和 Uvicorn
<div class="termy"> <div class="termy">
```console ```console
$ pip install "uvicorn[standard]" gunicorn $ <font color="#4E9A06">fastapi</font> run --workers 4 <u style="text-decoration-style:solid">main.py</u>
---> 100%
```
</div>
这将安装带有`standard`扩展包(以获得高性能)的 Uvicorn 和 Gunicorn。 <span style="background-color:#009485"><font color="#D3D7CF"> FastAPI </font></span> Starting production server 🚀
## Run Gunicorn with Uvicorn Workers Searching for package file structure from directories with
<font color="#3465A4">__init__.py</font> files
Importing from <font color="#75507B">/home/user/code/</font><font color="#AD7FA8">awesomeapp</font>
接下来你可以通过以下命令运行Gunicorn: <span style="background-color:#007166"><font color="#D3D7CF"> module </font></span> 🐍 main.py
<div class="termy">
```console
$ gunicorn main:app --workers 4 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:80
[19499] [INFO] Starting gunicorn 20.1.0
[19499] [INFO] Listening at: http://0.0.0.0:80 (19499)
[19499] [INFO] Using worker: uvicorn.workers.UvicornWorker
[19511] [INFO] Booting worker with pid: 19511
[19513] [INFO] Booting worker with pid: 19513
[19514] [INFO] Booting worker with pid: 19514
[19515] [INFO] Booting worker with pid: 19515
[19511] [INFO] Started server process [19511]
[19511] [INFO] Waiting for application startup.
[19511] [INFO] Application startup complete.
[19513] [INFO] Started server process [19513]
[19513] [INFO] Waiting for application startup.
[19513] [INFO] Application startup complete.
[19514] [INFO] Started server process [19514]
[19514] [INFO] Waiting for application startup.
[19514] [INFO] Application startup complete.
[19515] [INFO] Started server process [19515]
[19515] [INFO] Waiting for application startup.
[19515] [INFO] Application startup complete.
```
</div>
<span style="background-color:#007166"><font color="#D3D7CF"> code </font></span> Importing the FastAPI app object from the module with the
following code:
让我们看看每个选项的含义: <u style="text-decoration-style:solid">from </u><u style="text-decoration-style:solid"><b>main</b></u><u style="text-decoration-style:solid"> import </u><u style="text-decoration-style:solid"><b>app</b></u>
* `main:app`:这与 Uvicorn 使用的语法相同,`main` 表示名为"`main`"的 Python 模块,因此是文件 `main.py``app`**FastAPI** 应用程序的变量名称。 <span style="background-color:#007166"><font color="#D3D7CF"> app </font></span> Using import string: <font color="#3465A4">main:app</font>
* 你可以想象 `main:app` 相当于一个 Python `import` 语句,例如:
```Python <span style="background-color:#007166"><font color="#D3D7CF"> server </font></span> Server started at <font color="#729FCF"><u style="text-decoration-style:solid">http://0.0.0.0:8000</u></font>
from main import app <span style="background-color:#007166"><font color="#D3D7CF"> server </font></span> Documentation at <font color="#729FCF"><u style="text-decoration-style:solid">http://0.0.0.0:8000/docs</u></font>
```
* 因此,`main:app` 中的冒号相当于 `from main import app` 中的 Python `import` 部分。 Logs:
* `--workers`:要使用的worker进程数量,每个进程将运行一个 Uvicorn worker进程,在本例中为 4 个worker进程。 <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Uvicorn running on <font color="#729FCF"><u style="text-decoration-style:solid">http://0.0.0.0:8000</u></font> <b>(</b>Press CTRL+C to
quit<b>)</b>
* `--worker-class`:在worker进程中使用的与 Gunicorn 兼容的工作类。 <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Started parent process <b>[</b><font color="#34E2E2"><b>27365</b></font><b>]</b>
* 这里我们传递了 Gunicorn 可以导入和使用的类: <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Started server process <b>[</b><font color="#34E2E2"><b>27368</b></font><b>]</b>
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Started server process <b>[</b><font color="#34E2E2"><b>27369</b></font><b>]</b>
```Python <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Started server process <b>[</b><font color="#34E2E2"><b>27370</b></font><b>]</b>
import uvicorn.workers.UvicornWorker <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Started server process <b>[</b><font color="#34E2E2"><b>27367</b></font><b>]</b>
``` <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Waiting for application startup.
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Waiting for application startup.
* `--bind`:这告诉 Gunicorn 要监听的 IP 和端口,使用冒号 (`:`) 分隔 IP 和端口。 <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Waiting for application startup.
* 如果您直接运行 Uvicorn,则可以使用`--host 0.0.0.0`和`--port 80`,而不是`--bind 0.0.0.0:80`(Gunicorn 选项)。 <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Waiting for application startup.
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Application startup complete.
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Application startup complete.
在输出中,您可以看到它显示了每个进程的 **PID**(进程 ID)(它只是一个数字)。 <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Application startup complete.
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Application startup complete.
你可以看到: ```
* Gunicorn **进程管理器** 以 PID `19499` 开头(在您的情况下,它将是一个不同的数字)。
* 然后它开始`Listening at: http://0.0.0.0:80`。
* 然后它检测到它必须使用 `uvicorn.workers.UvicornWorker` 处的worker类。
* 然后它启动**4个worker**,每个都有自己的PID:`19511`、`19513`、`19514`和`19515`。
Gunicorn 还将负责管理**死进程**和**重新启动**新进程(如果需要保持worker数量)。 因此,这在一定程度上有助于上面列表中**重启**的概念。
尽管如此,您可能还希望有一些外部的东西,以确保在必要时**重新启动 Gunicorn**,并且**在启动时运行它**等。
## Uvicorn with Workers </div>
Uvicorn 也有一个选项可以启动和运行多个 **worker进程** ////
然而,到目前为止,Uvicorn 处理worker进程的能力比 Gunicorn 更有限。 因此,如果您想拥有这个级别(Python 级别)的进程管理器,那么最好尝试使用 Gunicorn 作为进程管理器。 //// tab | `uvicorn`
无论如何,您都可以像这样运行它 如果您更想要直接使用 `uvicorn` 命令:
<div class="termy"> <div class="termy">
@ -151,13 +105,15 @@ $ uvicorn main:app --host 0.0.0.0 --port 8080 --workers 4
</div> </div>
////
这里唯一的新选项是 `--workers` 告诉 Uvicorn 启动 4 个工作进程。 这里唯一的新选项是 `--workers` 告诉 Uvicorn 启动 4 个工作进程。
您还可以看到它显示了每个进程的 **PID**,父进程(这是 **进程管理器**)的 PID 为`27365`,每个工作进程的 PID 为:`27368`、`27369`, `27370`和`27367`。 您还可以看到它显示了每个进程的 **PID**,父进程(这是**进程管理器**)的 PID 为`27365`,每个工作进程的 PID 为:`27368`、`27369`, `27370`和`27367`。
## 部署概念 ## 部署概念
在这里,您了解了如何使用 **Gunicorn**(或 Uvicorn)管理 **Uvicorn 工作进程**来**并行**应用程序的执行,利用 CPU 中的 **多核**,并 能够满足**更多请求**。 在这里,您学习了如何使用多个**工作进程(workers)**来让应用程序的执行**并行化**,充分利用 CPU 的**多核性能**,并能够处理**更多的请求**。
从上面的部署概念列表来看,使用worker主要有助于**复制**部分,并对**重新启动**有一点帮助,但您仍然需要照顾其他部分: 从上面的部署概念列表来看,使用worker主要有助于**复制**部分,并对**重新启动**有一点帮助,但您仍然需要照顾其他部分:
@ -170,15 +126,13 @@ $ uvicorn main:app --host 0.0.0.0 --port 8080 --workers 4
## 容器和 Docker ## 容器和 Docker
在关于 [容器中的 FastAPI - Docker](docker.md){.internal-link target=_blank} 的下一章中,我将介绍一些可用于处理其他 **部署概念** 的策略。 在关于 [容器中的 FastAPI - Docker](docker.md){.internal-link target=_blank} 的下一章中,我将介绍一些可用于处理其他**部署概念**的策略。
我还将向您展示 **官方 Docker 镜像**,其中包括 **Gunicorn 和 Uvicorn worker** 以及一些对简单情况有用的默认配置。
在那里,我还将向您展示如何 **从头开始构建自己的镜像** 以运行单个 Uvicorn 进程(没有 Gunicorn)。 这是一个简单的过程,并且可能是您在使用像 **Kubernetes** 这样的分布式容器管理系统时想要做的事情 我将向您展示如何**从零开始构建自己的镜像**,以运行一个单独的 Uvicorn 进程。这个过程相对简单,并且在使用 **Kubernetes** 等分布式容器管理系统时,这通常是您需要采取的方法。
## 回顾 ## 回顾
您可以使用**Gunicorn**(或Uvicorn)作为Uvicorn工作进程的进程管理器,以利用**多核CPU**,**并行运行多个进程**。 您可以在使用 `fastapi``uvicorn` 命令时,通过 `--workers` CLI 选项启用多个工作进程(workers),以充分利用**多核 CPU**,以**并行运行多个进程**。
如果您要设置**自己的部署系统**,同时自己处理其他部署概念,则可以使用这些工具和想法。 如果您要设置**自己的部署系统**,同时自己处理其他部署概念,则可以使用这些工具和想法。

95
docs/zh/docs/tutorial/first-steps.md

@ -11,26 +11,42 @@
<div class="termy"> <div class="termy">
```console ```console
$ uvicorn main:app --reload $ <font color="#4E9A06">fastapi</font> dev <u style="text-decoration-style:solid">main.py</u>
<span style="color: green;">INFO</span>: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) <span style="background-color:#009485"><font color="#D3D7CF"> FastAPI </font></span> Starting development server 🚀
<span style="color: green;">INFO</span>: Started reloader process [28720]
<span style="color: green;">INFO</span>: Started server process [28722]
<span style="color: green;">INFO</span>: Waiting for application startup.
<span style="color: green;">INFO</span>: Application startup complete.
```
</div> Searching for package file structure from directories
with <font color="#3465A4">__init__.py</font> files
Importing from <font color="#75507B">/home/user/code/</font><font color="#AD7FA8">awesomeapp</font>
/// note <span style="background-color:#007166"><font color="#D3D7CF"> module </font></span> 🐍 main.py
`uvicorn main:app` 命令含义如下: <span style="background-color:#007166"><font color="#D3D7CF"> code </font></span> Importing the FastAPI app object from the module with
the following code:
* `main`:`main.py` 文件(一个 Python「模块」)。 <u style="text-decoration-style:solid">from </u><u style="text-decoration-style:solid"><b>main</b></u><u style="text-decoration-style:solid"> import </u><u style="text-decoration-style:solid"><b>app</b></u>
* `app`:在 `main.py` 文件中通过 `app = FastAPI()` 创建的对象。
* `--reload`:让服务器在更新代码后重新启动。仅在开发时使用该选项。
/// <span style="background-color:#007166"><font color="#D3D7CF"> app </font></span> Using import string: <font color="#3465A4">main:app</font>
<span style="background-color:#007166"><font color="#D3D7CF"> server </font></span> Server started at <font color="#729FCF"><u style="text-decoration-style:solid">http://127.0.0.1:8000</u></font>
<span style="background-color:#007166"><font color="#D3D7CF"> server </font></span> Documentation at <font color="#729FCF"><u style="text-decoration-style:solid">http://127.0.0.1:8000/docs</u></font>
<span style="background-color:#007166"><font color="#D3D7CF"> tip </font></span> Running in development mode, for production use:
<b>fastapi run</b>
Logs:
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Will watch for changes in these directories:
<b>[</b><font color="#4E9A06">&apos;/home/user/code/awesomeapp&apos;</font><b>]</b>
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Uvicorn running on <font color="#729FCF"><u style="text-decoration-style:solid">http://127.0.0.1:8000</u></font> <b>(</b>Press CTRL+C
to quit<b>)</b>
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Started reloader process <b>[</b><font color="#34E2E2"><b>383138</b></font><b>]</b> using WatchFiles
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Started server process <b>[</b><font color="#34E2E2"><b>383153</b></font><b>]</b>
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Waiting for application startup.
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Application startup complete.
```
</div>
在输出中,会有一行信息像下面这样: 在输出中,会有一行信息像下面这样:
@ -38,7 +54,6 @@ $ uvicorn main:app --reload
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
``` ```
该行显示了你的应用在本机所提供服务的 URL 地址。 该行显示了你的应用在本机所提供服务的 URL 地址。
### 查看 ### 查看
@ -63,7 +78,7 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
前往 <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a> 前往 <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a>
你将会看到可选的自动生成文档 (由 <a href="https://github.com/Rebilly/ReDoc" class="external-link" target="_blank">ReDoc</a> 提供) 你将会看到可选的自动生成文档 (由 <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) ![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png)
@ -77,9 +92,9 @@ INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
#### API「模式」 #### API「模式」
在这种场景下,OpenAPI 是一种规定如何定义 API 模式的规范。 在这种场景下,<a href="https://github.com/OAI/OpenAPI-Specification" class="external-link" target="_blank">OpenAPI</a> 是一种规定如何定义 API 模式的规范。
定义的 OpenAPI 模式将包括你的 API 路径,以及它们可能使用的参数等等。 「模式」的定义包括你的 API 路径,以及它们可能使用的参数等等。
#### 数据「模式」 #### 数据「模式」
@ -93,7 +108,7 @@ OpenAPI 为你的 API 定义 API 模式。该模式中包含了你的 API 发送
#### 查看 `openapi.json` #### 查看 `openapi.json`
如果你对原始的 OpenAPI 模式长什么样子感到好奇,其实它只是一个自动生成的包含了所有 API 描述的 JSON 如果你对原始的 OpenAPI 模式长什么样子感到好奇,FastAPI 自动生成了包含所有 API 描述的 JSON(模式)
你可以直接在:<a href="http://127.0.0.1:8000/openapi.json" class="external-link" target="_blank">http://127.0.0.1:8000/openapi.json</a> 看到它。 你可以直接在:<a href="http://127.0.0.1:8000/openapi.json" class="external-link" target="_blank">http://127.0.0.1:8000/openapi.json</a> 看到它。
@ -101,7 +116,7 @@ OpenAPI 为你的 API 定义 API 模式。该模式中包含了你的 API 发送
```JSON ```JSON
{ {
"openapi": "3.0.2", "openapi": "3.1.0",
"info": { "info": {
"title": "FastAPI", "title": "FastAPI",
"version": "0.1.0" "version": "0.1.0"
@ -140,7 +155,7 @@ OpenAPI 为你的 API 定义 API 模式。该模式中包含了你的 API 发送
`FastAPI` 是直接从 `Starlette` 继承的类。 `FastAPI` 是直接从 `Starlette` 继承的类。
你可以通过 `FastAPI` 使用所有的 Starlette 的功能。 你可以通过 `FastAPI` 使用所有的 <a href="https://www.starlette.io/" class="external-link" target="_blank">Starlette</a> 的功能。
/// ///
@ -152,34 +167,6 @@ OpenAPI 为你的 API 定义 API 模式。该模式中包含了你的 API 发送
这个实例将是创建你所有 API 的主要交互对象。 这个实例将是创建你所有 API 的主要交互对象。
这个 `app` 同样在如下命令中被 `uvicorn` 所引用:
<div class="termy">
```console
$ uvicorn main:app --reload
<span style="color: green;">INFO</span>: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
```
</div>
如果你像下面这样创建应用:
{* ../../docs_src/first_steps/tutorial002.py hl[3] *}
将代码放入 `main.py` 文件中,然后你可以像下面这样运行 `uvicorn`
<div class="termy">
```console
$ uvicorn main:my_awesome_api --reload
<span style="color: green;">INFO</span>: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
```
</div>
### 步骤 3:创建一个*路径操作* ### 步骤 3:创建一个*路径操作*
#### 路径 #### 路径
@ -279,13 +266,13 @@ https://example.com/items/foo
/// tip /// tip
可以随意使用任何一个操作(HTTP方法)。 可以随意使用任何一个操作(HTTP方法)。
**FastAPI** 没有强制要求操作有任何特定的含义。 **FastAPI** 没有强制要求操作有任何特定的含义。
此处提供的信息仅作为指导,而不是要求。 此处提供的信息仅作为指导,而不是要求。
比如,当使用 GraphQL 时通常你所有的动作都通过 `post` 一种方法执行。 比如,当使用 GraphQL 时通常你所有的动作都通过 `POST` 一种方法执行。
/// ///
@ -331,6 +318,6 @@ https://example.com/items/foo
* 导入 `FastAPI` * 导入 `FastAPI`
* 创建一个 `app` 实例。 * 创建一个 `app` 实例。
* 编写一个**路径操作装饰器**`@app.get("/")` * 编写一个**路径操作装饰器**`@app.get("/")`
* 编写一个**路径操作函数**(如上面的 `def root(): ...` * 定义一个**路径操作函数**,如 `def root(): ...`
* 运行开发服务器(如 `uvicorn main:app --reload` * 使用命令 `fastapi dev` 运行开发服务器

80
docs/zh/docs/tutorial/index.md

@ -1,34 +1,58 @@
# 教程 - 用户指南 # 教程 - 用户指南
本教程将一步步向展示如何使用 **FastAPI** 的绝大部分特性。 本教程将一步步向展示如何使用 **FastAPI** 的绝大部分特性。
各个章节的内容循序渐进,但是又围绕着单独的主题,所以你可以直接跳转到某个章节以解决你的特定需求。 各个章节的内容循序渐进,但是又围绕着单独的主题,所以您可以直接跳转到某个章节以解决您的特定需求。
本教程同样可以作为将来的参考手册。 本教程同样可以作为将来的参考手册,所以您可以随时回到本教程并查阅您需要的内容。
你可以随时回到本教程并查阅你需要的内容。
## 运行代码 ## 运行代码
所有代码片段都可以复制后直接使用(它们实际上是经过测试的 Python 文件)。 所有代码片段都可以复制后直接使用(它们实际上是经过测试的 Python 文件)。
要运行任何示例,请将代码复制到 `main.py` 文件中,然后使用以下命令启动 `uvicorn` 要运行任何示例,请将代码复制到 `main.py` 文件中,然后使用以下命令启动 `fastapi dev`
<div class="termy"> <div class="termy">
```console ```console
$ uvicorn main:app --reload $ <font color="#4E9A06">fastapi</font> dev <u style="text-decoration-style:solid">main.py</u>
<span style="background-color:#009485"><font color="#D3D7CF"> FastAPI </font></span> Starting development server 🚀
Searching for package file structure from directories
with <font color="#3465A4">__init__.py</font> files
Importing from <font color="#75507B">/home/user/code/</font><font color="#AD7FA8">awesomeapp</font>
<span style="background-color:#007166"><font color="#D3D7CF"> module </font></span> 🐍 main.py
<span style="background-color:#007166"><font color="#D3D7CF"> code </font></span> Importing the FastAPI app object from the module with
the following code:
<u style="text-decoration-style:solid">from </u><u style="text-decoration-style:solid"><b>main</b></u><u style="text-decoration-style:solid"> import </u><u style="text-decoration-style:solid"><b>app</b></u>
<span style="background-color:#007166"><font color="#D3D7CF"> app </font></span> Using import string: <font color="#3465A4">main:app</font>
<span style="background-color:#007166"><font color="#D3D7CF"> server </font></span> Server started at <font color="#729FCF"><u style="text-decoration-style:solid">http://127.0.0.1:8000</u></font>
<span style="background-color:#007166"><font color="#D3D7CF"> server </font></span> Documentation at <font color="#729FCF"><u style="text-decoration-style:solid">http://127.0.0.1:8000/docs</u></font>
<span style="background-color:#007166"><font color="#D3D7CF"> tip </font></span> Running in development mode, for production use:
<b>fastapi run</b>
Logs:
<span style="color: green;">INFO</span>: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Will watch for changes in these directories:
<span style="color: green;">INFO</span>: Started reloader process [28720] <b>[</b><font color="#4E9A06">&apos;/home/user/code/awesomeapp&apos;</font><b>]</b>
<span style="color: green;">INFO</span>: Started server process [28722] <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Uvicorn running on <font color="#729FCF"><u style="text-decoration-style:solid">http://127.0.0.1:8000</u></font> <b>(</b>Press CTRL+C
<span style="color: green;">INFO</span>: Waiting for application startup. to quit<b>)</b>
<span style="color: green;">INFO</span>: Application startup complete. <span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Started reloader process <b>[</b><font color="#34E2E2"><b>383138</b></font><b>]</b> using WatchFiles
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Started server process <b>[</b><font color="#34E2E2"><b>383153</b></font><b>]</b>
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Waiting for application startup.
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Application startup complete.
``` ```
</div> </div>
强烈建议你在本地编写或复制代码,对其进行编辑并运行。 **强烈建议**您在本地编写或复制代码,对其进行编辑并运行。
在编辑器中使用 FastAPI 会真正地展现出它的优势:只需要编写很少的代码,所有的类型检查,代码补全等等。 在编辑器中使用 FastAPI 会真正地展现出它的优势:只需要编写很少的代码,所有的类型检查,代码补全等等。
@ -36,48 +60,34 @@ $ uvicorn main:app --reload
## 安装 FastAPI ## 安装 FastAPI
第一个步骤是安装 FastAPI 第一个步骤是安装 FastAPI.
为了使用本教程,你可能需要安装所有的可选依赖及对应功能 请确保您创建并激活一个[虚拟环境](../virtual-environments.md){.internal-link target=_blank},然后**安装 FastAPI**
<div class="termy"> <div class="termy">
```console ```console
$ pip install "fastapi[all]" $ pip install "fastapi[standard]"
---> 100% ---> 100%
``` ```
</div> </div>
......以上安装还包括了 `uvicorn`,你可以将其用作运行代码的服务器。
/// note /// note
你也可以分开来安装。 当您使用 `pip install "fastapi[standard]"` 进行安装时,它会附带一些默认的可选标准依赖项。
假如你想将应用程序部署到生产环境,你可能要执行以下操作:
```
pip install fastapi
```
并且安装`uvicorn`来作为服务器:
```
pip install "uvicorn[standard]"
```
然后对你想使用的每个可选依赖项也执行相同的操作 如果您不想安装这些可选依赖,可以选择安装 `pip install fastapi`
/// ///
## 进阶用户指南 ## 进阶用户指南
在本**教程-用户指南**之后,可以阅读**进阶用户指南**。 在本**教程-用户指南**之后,您可以阅读**进阶用户指南**。
**进阶用户指南**以本教程为基础,使用相同的概念,并教授一些额外的特性。 **进阶用户指南**以本教程为基础,使用相同的概念,并教授一些额外的特性。
但是你应该先阅读**教程-用户指南**(即你现在正在阅读的内容)。 但是您应该先阅读**教程-用户指南**(即您现在正在阅读的内容)。
教程经过精心设计,使你可以仅通过**教程-用户指南**来开发一个完整的应用程序,然后根据你的需要,使用**进阶用户指南**中的一些其他概念,以不同的方式来扩展它。 教程经过精心设计,使您可以仅通过**教程-用户指南**来开发一个完整的应用程序,然后根据您的需要,使用**进阶用户指南**中的一些其他概念,以不同的方式来扩展它。

19
docs_src/header_param_models/tutorial003.py

@ -0,0 +1,19 @@
from typing import List, Union
from fastapi import FastAPI, Header
from pydantic import BaseModel
app = FastAPI()
class CommonHeaders(BaseModel):
host: str
save_data: bool
if_modified_since: Union[str, None] = None
traceparent: Union[str, None] = None
x_tag: List[str] = []
@app.get("/items/")
async def read_items(headers: CommonHeaders = Header(convert_underscores=False)):
return headers

22
docs_src/header_param_models/tutorial003_an.py

@ -0,0 +1,22 @@
from typing import List, Union
from fastapi import FastAPI, Header
from pydantic import BaseModel
from typing_extensions import Annotated
app = FastAPI()
class CommonHeaders(BaseModel):
host: str
save_data: bool
if_modified_since: Union[str, None] = None
traceparent: Union[str, None] = None
x_tag: List[str] = []
@app.get("/items/")
async def read_items(
headers: Annotated[CommonHeaders, Header(convert_underscores=False)],
):
return headers

21
docs_src/header_param_models/tutorial003_an_py310.py

@ -0,0 +1,21 @@
from typing import Annotated
from fastapi import FastAPI, Header
from pydantic import BaseModel
app = FastAPI()
class CommonHeaders(BaseModel):
host: str
save_data: bool
if_modified_since: str | None = None
traceparent: str | None = None
x_tag: list[str] = []
@app.get("/items/")
async def read_items(
headers: Annotated[CommonHeaders, Header(convert_underscores=False)],
):
return headers

21
docs_src/header_param_models/tutorial003_an_py39.py

@ -0,0 +1,21 @@
from typing import Annotated, Union
from fastapi import FastAPI, Header
from pydantic import BaseModel
app = FastAPI()
class CommonHeaders(BaseModel):
host: str
save_data: bool
if_modified_since: Union[str, None] = None
traceparent: Union[str, None] = None
x_tag: list[str] = []
@app.get("/items/")
async def read_items(
headers: Annotated[CommonHeaders, Header(convert_underscores=False)],
):
return headers

17
docs_src/header_param_models/tutorial003_py310.py

@ -0,0 +1,17 @@
from fastapi import FastAPI, Header
from pydantic import BaseModel
app = FastAPI()
class CommonHeaders(BaseModel):
host: str
save_data: bool
if_modified_since: str | None = None
traceparent: str | None = None
x_tag: list[str] = []
@app.get("/items/")
async def read_items(headers: CommonHeaders = Header(convert_underscores=False)):
return headers

19
docs_src/header_param_models/tutorial003_py39.py

@ -0,0 +1,19 @@
from typing import Union
from fastapi import FastAPI, Header
from pydantic import BaseModel
app = FastAPI()
class CommonHeaders(BaseModel):
host: str
save_data: bool
if_modified_since: Union[str, None] = None
traceparent: Union[str, None] = None
x_tag: list[str] = []
@app.get("/items/")
async def read_items(headers: CommonHeaders = Header(convert_underscores=False)):
return headers

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.115.11" __version__ = "0.115.12"
from starlette import status as status from starlette import status as status

10
fastapi/dependencies/utils.py

@ -753,9 +753,15 @@ def request_params_to_args(
first_field = fields[0] first_field = fields[0]
fields_to_extract = fields fields_to_extract = fields
single_not_embedded_field = False single_not_embedded_field = False
default_convert_underscores = True
if len(fields) == 1 and lenient_issubclass(first_field.type_, BaseModel): if len(fields) == 1 and lenient_issubclass(first_field.type_, BaseModel):
fields_to_extract = get_cached_model_fields(first_field.type_) fields_to_extract = get_cached_model_fields(first_field.type_)
single_not_embedded_field = True single_not_embedded_field = True
# If headers are in a Pydantic model, the way to disable convert_underscores
# would be with Header(convert_underscores=False) at the Pydantic model level
default_convert_underscores = getattr(
first_field.field_info, "convert_underscores", True
)
params_to_process: Dict[str, Any] = {} params_to_process: Dict[str, Any] = {}
@ -766,7 +772,9 @@ def request_params_to_args(
if isinstance(received_params, Headers): if isinstance(received_params, Headers):
# Handle fields extracted from a Pydantic Model for a header, each field # Handle fields extracted from a Pydantic Model for a header, each field
# doesn't have a FieldInfo of type Header with the default convert_underscores=True # doesn't have a FieldInfo of type Header with the default convert_underscores=True
convert_underscores = getattr(field.field_info, "convert_underscores", True) convert_underscores = getattr(
field.field_info, "convert_underscores", default_convert_underscores
)
if convert_underscores: if convert_underscores:
alias = ( alias = (
field.alias field.alias

23
fastapi/openapi/utils.py

@ -32,6 +32,7 @@ from fastapi.utils import (
generate_operation_id_for_path, generate_operation_id_for_path,
is_body_allowed_for_status_code, is_body_allowed_for_status_code,
) )
from pydantic import BaseModel
from starlette.responses import JSONResponse from starlette.responses import JSONResponse
from starlette.routing import BaseRoute from starlette.routing import BaseRoute
from starlette.status import HTTP_422_UNPROCESSABLE_ENTITY from starlette.status import HTTP_422_UNPROCESSABLE_ENTITY
@ -113,6 +114,13 @@ def _get_openapi_operation_parameters(
(ParamTypes.header, header_params), (ParamTypes.header, header_params),
(ParamTypes.cookie, cookie_params), (ParamTypes.cookie, cookie_params),
] ]
default_convert_underscores = True
if len(flat_dependant.header_params) == 1:
first_field = flat_dependant.header_params[0]
if lenient_issubclass(first_field.type_, BaseModel):
default_convert_underscores = getattr(
first_field.field_info, "convert_underscores", True
)
for param_type, param_group in parameter_groups: for param_type, param_group in parameter_groups:
for param in param_group: for param in param_group:
field_info = param.field_info field_info = param.field_info
@ -126,8 +134,21 @@ def _get_openapi_operation_parameters(
field_mapping=field_mapping, field_mapping=field_mapping,
separate_input_output_schemas=separate_input_output_schemas, separate_input_output_schemas=separate_input_output_schemas,
) )
name = param.alias
convert_underscores = getattr(
param.field_info,
"convert_underscores",
default_convert_underscores,
)
if (
param_type == ParamTypes.header
and param.alias == param.name
and convert_underscores
):
name = param.name.replace("_", "-")
parameter = { parameter = {
"name": param.alias, "name": name,
"in": param_type.value, "in": param_type.value,
"required": param.required, "required": param.required,
"schema": param_schema, "schema": param_schema,

2
requirements-docs-tests.txt

@ -1,4 +1,4 @@
# For mkdocstrings and tests # For mkdocstrings and tests
httpx >=0.23.0,<0.28.0 httpx >=0.23.0,<0.28.0
# For linting and generating docs versions # For linting and generating docs versions
ruff ==0.9.4 ruff ==0.11.2

2
requirements-tests.txt

@ -3,7 +3,7 @@
pytest >=7.1.3,<9.0.0 pytest >=7.1.3,<9.0.0
coverage[toml] >= 6.5.0,< 8.0 coverage[toml] >= 6.5.0,< 8.0
mypy ==1.8.0 mypy ==1.8.0
dirty-equals ==0.8.0 dirty-equals ==0.9.0
sqlmodel==0.0.23 sqlmodel==0.0.23
flask >=1.1.2,<4.0.0 flask >=1.1.2,<4.0.0
anyio[trio] >=3.2.1,<5.0.0 anyio[trio] >=3.2.1,<5.0.0

6
tests/test_tutorial/test_header_param_models/test_tutorial001.py

@ -129,13 +129,13 @@ def test_openapi_schema(client: TestClient):
"schema": {"type": "string", "title": "Host"}, "schema": {"type": "string", "title": "Host"},
}, },
{ {
"name": "save_data", "name": "save-data",
"in": "header", "in": "header",
"required": True, "required": True,
"schema": {"type": "boolean", "title": "Save Data"}, "schema": {"type": "boolean", "title": "Save Data"},
}, },
{ {
"name": "if_modified_since", "name": "if-modified-since",
"in": "header", "in": "header",
"required": False, "required": False,
"schema": IsDict( "schema": IsDict(
@ -171,7 +171,7 @@ def test_openapi_schema(client: TestClient):
), ),
}, },
{ {
"name": "x_tag", "name": "x-tag",
"in": "header", "in": "header",
"required": False, "required": False,
"schema": { "schema": {

6
tests/test_tutorial/test_header_param_models/test_tutorial002.py

@ -140,13 +140,13 @@ def test_openapi_schema(client: TestClient):
"schema": {"type": "string", "title": "Host"}, "schema": {"type": "string", "title": "Host"},
}, },
{ {
"name": "save_data", "name": "save-data",
"in": "header", "in": "header",
"required": True, "required": True,
"schema": {"type": "boolean", "title": "Save Data"}, "schema": {"type": "boolean", "title": "Save Data"},
}, },
{ {
"name": "if_modified_since", "name": "if-modified-since",
"in": "header", "in": "header",
"required": False, "required": False,
"schema": IsDict( "schema": IsDict(
@ -182,7 +182,7 @@ def test_openapi_schema(client: TestClient):
), ),
}, },
{ {
"name": "x_tag", "name": "x-tag",
"in": "header", "in": "header",
"required": False, "required": False,
"schema": { "schema": {

285
tests/test_tutorial/test_header_param_models/test_tutorial003.py

@ -0,0 +1,285 @@
import importlib
import pytest
from dirty_equals import IsDict
from fastapi.testclient import TestClient
from inline_snapshot import snapshot
from tests.utils import needs_py39, needs_py310
@pytest.fixture(
name="client",
params=[
"tutorial003",
pytest.param("tutorial003_py39", marks=needs_py39),
pytest.param("tutorial003_py310", marks=needs_py310),
"tutorial003_an",
pytest.param("tutorial003_an_py39", marks=needs_py39),
pytest.param("tutorial003_an_py310", marks=needs_py310),
],
)
def get_client(request: pytest.FixtureRequest):
mod = importlib.import_module(f"docs_src.header_param_models.{request.param}")
client = TestClient(mod.app)
return client
def test_header_param_model(client: TestClient):
response = client.get(
"/items/",
headers=[
("save_data", "true"),
("if_modified_since", "yesterday"),
("traceparent", "123"),
("x_tag", "one"),
("x_tag", "two"),
],
)
assert response.status_code == 200
assert response.json() == {
"host": "testserver",
"save_data": True,
"if_modified_since": "yesterday",
"traceparent": "123",
"x_tag": ["one", "two"],
}
def test_header_param_model_no_underscore(client: TestClient):
response = client.get(
"/items/",
headers=[
("save-data", "true"),
("if-modified-since", "yesterday"),
("traceparent", "123"),
("x-tag", "one"),
("x-tag", "two"),
],
)
assert response.status_code == 422
assert response.json() == snapshot(
{
"detail": [
IsDict(
{
"type": "missing",
"loc": ["header", "save_data"],
"msg": "Field required",
"input": {
"host": "testserver",
"traceparent": "123",
"x_tag": [],
"accept": "*/*",
"accept-encoding": "gzip, deflate",
"connection": "keep-alive",
"user-agent": "testclient",
"save-data": "true",
"if-modified-since": "yesterday",
"x-tag": "two",
},
}
)
| IsDict(
# TODO: remove when deprecating Pydantic v1
{
"type": "value_error.missing",
"loc": ["header", "save_data"],
"msg": "field required",
}
)
]
}
)
def test_header_param_model_defaults(client: TestClient):
response = client.get("/items/", headers=[("save_data", "true")])
assert response.status_code == 200
assert response.json() == {
"host": "testserver",
"save_data": True,
"if_modified_since": None,
"traceparent": None,
"x_tag": [],
}
def test_header_param_model_invalid(client: TestClient):
response = client.get("/items/")
assert response.status_code == 422
assert response.json() == snapshot(
{
"detail": [
IsDict(
{
"type": "missing",
"loc": ["header", "save_data"],
"msg": "Field required",
"input": {
"x_tag": [],
"host": "testserver",
"accept": "*/*",
"accept-encoding": "gzip, deflate",
"connection": "keep-alive",
"user-agent": "testclient",
},
}
)
| IsDict(
# TODO: remove when deprecating Pydantic v1
{
"type": "value_error.missing",
"loc": ["header", "save_data"],
"msg": "field required",
}
)
]
}
)
def test_header_param_model_extra(client: TestClient):
response = client.get(
"/items/", headers=[("save_data", "true"), ("tool", "plumbus")]
)
assert response.status_code == 200, response.text
assert response.json() == snapshot(
{
"host": "testserver",
"save_data": True,
"if_modified_since": None,
"traceparent": None,
"x_tag": [],
}
)
def test_openapi_schema(client: TestClient):
response = client.get("/openapi.json")
assert response.status_code == 200, response.text
assert response.json() == snapshot(
{
"openapi": "3.1.0",
"info": {"title": "FastAPI", "version": "0.1.0"},
"paths": {
"/items/": {
"get": {
"summary": "Read Items",
"operationId": "read_items_items__get",
"parameters": [
{
"name": "host",
"in": "header",
"required": True,
"schema": {"type": "string", "title": "Host"},
},
{
"name": "save_data",
"in": "header",
"required": True,
"schema": {"type": "boolean", "title": "Save Data"},
},
{
"name": "if_modified_since",
"in": "header",
"required": False,
"schema": IsDict(
{
"anyOf": [{"type": "string"}, {"type": "null"}],
"title": "If Modified Since",
}
)
| IsDict(
# TODO: remove when deprecating Pydantic v1
{
"type": "string",
"title": "If Modified Since",
}
),
},
{
"name": "traceparent",
"in": "header",
"required": False,
"schema": IsDict(
{
"anyOf": [{"type": "string"}, {"type": "null"}],
"title": "Traceparent",
}
)
| IsDict(
# TODO: remove when deprecating Pydantic v1
{
"type": "string",
"title": "Traceparent",
}
),
},
{
"name": "x_tag",
"in": "header",
"required": False,
"schema": {
"type": "array",
"items": {"type": "string"},
"default": [],
"title": "X Tag",
},
},
],
"responses": {
"200": {
"description": "Successful Response",
"content": {"application/json": {"schema": {}}},
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
},
},
},
}
}
},
"components": {
"schemas": {
"HTTPValidationError": {
"properties": {
"detail": {
"items": {
"$ref": "#/components/schemas/ValidationError"
},
"type": "array",
"title": "Detail",
}
},
"type": "object",
"title": "HTTPValidationError",
},
"ValidationError": {
"properties": {
"loc": {
"items": {
"anyOf": [{"type": "string"}, {"type": "integer"}]
},
"type": "array",
"title": "Location",
},
"msg": {"type": "string", "title": "Message"},
"type": {"type": "string", "title": "Error Type"},
},
"type": "object",
"required": ["loc", "msg", "type"],
"title": "ValidationError",
},
}
},
}
)
Loading…
Cancel
Save