From d8f3e8f20de8ebca5293f5b3ce71ee93c9124328 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Sat, 25 Jun 2022 21:49:44 +0200 Subject: [PATCH 01/52] =?UTF-8?q?=F0=9F=94=A7=20Update=20sponsors,=20remov?= =?UTF-8?q?e=20Classiq,=20add=20ImgWhale=20(#5079)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 🔧 Update sponsors, remove Classiq, add ImgWhale * 🔧 Update README --- README.md | 2 +- docs/en/data/sponsors.yml | 6 ++-- docs/en/data/sponsors_badge.yml | 1 + docs/en/docs/img/sponsors/imgwhale-banner.svg | 14 ++++++++++ docs/en/docs/img/sponsors/imgwhale.svg | 28 +++++++++++++++++++ docs/en/overrides/main.html | 12 ++++---- 6 files changed, 53 insertions(+), 10 deletions(-) create mode 100644 docs/en/docs/img/sponsors/imgwhale-banner.svg create mode 100644 docs/en/docs/img/sponsors/imgwhale.svg diff --git a/README.md b/README.md index 5e9e97a2a..d605affac 100644 --- a/README.md +++ b/README.md @@ -49,8 +49,8 @@ The key features are: - + diff --git a/docs/en/data/sponsors.yml b/docs/en/data/sponsors.yml index ac825193b..2fc08b3a5 100644 --- a/docs/en/data/sponsors.yml +++ b/docs/en/data/sponsors.yml @@ -5,12 +5,12 @@ gold: - url: https://cryptapi.io/ title: "CryptAPI: Your easy to use, secure and privacy oriented payment gateway." img: https://fastapi.tiangolo.com/img/sponsors/cryptapi.svg - - url: https://classiq.link/n4s - title: Join the team building a new SaaS platform that will change the computing world - img: https://fastapi.tiangolo.com/img/sponsors/classiq.png - url: https://www.dropbase.io/careers title: Dropbase - seamlessly collect, clean, and centralize data. img: https://fastapi.tiangolo.com/img/sponsors/dropbase.svg + - url: https://app.imgwhale.xyz/ + title: The ultimate solution to unlimited and forever cloud storage. + img: https://fastapi.tiangolo.com/img/sponsors/imgwhale.svg silver: - url: https://www.deta.sh/?ref=fastapi title: The launchpad for all your (team's) ideas diff --git a/docs/en/data/sponsors_badge.yml b/docs/en/data/sponsors_badge.yml index 1c8b0cde7..10a31b86a 100644 --- a/docs/en/data/sponsors_badge.yml +++ b/docs/en/data/sponsors_badge.yml @@ -10,3 +10,4 @@ logins: - InesIvanova - DropbaseHQ - VincentParedes + - BLUE-DEVIL1134 diff --git a/docs/en/docs/img/sponsors/imgwhale-banner.svg b/docs/en/docs/img/sponsors/imgwhale-banner.svg new file mode 100644 index 000000000..db87cc4c9 --- /dev/null +++ b/docs/en/docs/img/sponsors/imgwhale-banner.svg @@ -0,0 +1,14 @@ + + + + + + + + + + ImgWhale + The ultimate solution to unlimited and forevercloud storage. + + diff --git a/docs/en/docs/img/sponsors/imgwhale.svg b/docs/en/docs/img/sponsors/imgwhale.svg new file mode 100644 index 000000000..46aefd930 --- /dev/null +++ b/docs/en/docs/img/sponsors/imgwhale.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + ImgWhale + + The ultimate solution to unlimited and forever cloud storage. + + The ultimate solution to unlimited and forever cloud storage. + + + + diff --git a/docs/en/overrides/main.html b/docs/en/overrides/main.html index eb1cb5c82..62063da47 100644 --- a/docs/en/overrides/main.html +++ b/docs/en/overrides/main.html @@ -40,18 +40,18 @@ -
- - - - -
+
+ + + + +
{% endblock %} From f8c875bb3fd2f01112df666c4ab4ff4d1fe7d49b Mon Sep 17 00:00:00 2001 From: github-actions Date: Sat, 25 Jun 2022 19:50:20 +0000 Subject: [PATCH 02/52] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index edc58171b..0e60b0abf 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,7 @@ ## Latest Changes +* 🔧 Update sponsors, remove Classiq, add ImgWhale. PR [#5079](https://github.com/tiangolo/fastapi/pull/5079) by [@tiangolo](https://github.com/tiangolo). ## 0.78.0 From 6c6382df4d2d2c9f003658dae42f84fd2fbad36c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Fri, 1 Jul 2022 10:58:40 +0200 Subject: [PATCH 03/52] =?UTF-8?q?=F0=9F=94=A7=20Update=20sponsors,=20remov?= =?UTF-8?q?e=20Dropbase,=20add=20Doist=20(#5096)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- docs/en/data/sponsors.yml | 6 +-- docs/en/docs/img/sponsors/doist-banner.svg | 46 ++++++++++++++++++ docs/en/docs/img/sponsors/doist.svg | 54 ++++++++++++++++++++++ docs/en/overrides/main.html | 12 ++--- 5 files changed, 110 insertions(+), 10 deletions(-) create mode 100644 docs/en/docs/img/sponsors/doist-banner.svg create mode 100644 docs/en/docs/img/sponsors/doist.svg diff --git a/README.md b/README.md index d605affac..505005ae9 100644 --- a/README.md +++ b/README.md @@ -49,8 +49,8 @@ The key features are: - + diff --git a/docs/en/data/sponsors.yml b/docs/en/data/sponsors.yml index 2fc08b3a5..c99c4b57a 100644 --- a/docs/en/data/sponsors.yml +++ b/docs/en/data/sponsors.yml @@ -5,12 +5,12 @@ gold: - url: https://cryptapi.io/ title: "CryptAPI: Your easy to use, secure and privacy oriented payment gateway." img: https://fastapi.tiangolo.com/img/sponsors/cryptapi.svg - - url: https://www.dropbase.io/careers - title: Dropbase - seamlessly collect, clean, and centralize data. - img: https://fastapi.tiangolo.com/img/sponsors/dropbase.svg - url: https://app.imgwhale.xyz/ title: The ultimate solution to unlimited and forever cloud storage. img: https://fastapi.tiangolo.com/img/sponsors/imgwhale.svg + - url: https://doist.com/careers/9B437B1615-wa-senior-backend-engineer-python + title: Help us migrate doist to FastAPI + img: https://fastapi.tiangolo.com/img/sponsors/doist.svg silver: - url: https://www.deta.sh/?ref=fastapi title: The launchpad for all your (team's) ideas diff --git a/docs/en/docs/img/sponsors/doist-banner.svg b/docs/en/docs/img/sponsors/doist-banner.svg new file mode 100644 index 000000000..3a4d9a295 --- /dev/null +++ b/docs/en/docs/img/sponsors/doist-banner.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/docs/img/sponsors/doist.svg b/docs/en/docs/img/sponsors/doist.svg new file mode 100644 index 000000000..b55855f06 --- /dev/null +++ b/docs/en/docs/img/sponsors/doist.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/overrides/main.html b/docs/en/overrides/main.html index 62063da47..9bed0253f 100644 --- a/docs/en/overrides/main.html +++ b/docs/en/overrides/main.html @@ -40,18 +40,18 @@ - + {% endblock %} From 80472301817d3581f56163874b42d06c26d99942 Mon Sep 17 00:00:00 2001 From: github-actions Date: Fri, 1 Jul 2022 08:59:26 +0000 Subject: [PATCH 04/52] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index 0e60b0abf..2ae0a2ed0 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,7 @@ ## Latest Changes +* 🔧 Update sponsors, remove Dropbase, add Doist. PR [#5096](https://github.com/tiangolo/fastapi/pull/5096) by [@tiangolo](https://github.com/tiangolo). * 🔧 Update sponsors, remove Classiq, add ImgWhale. PR [#5079](https://github.com/tiangolo/fastapi/pull/5079) by [@tiangolo](https://github.com/tiangolo). ## 0.78.0 From b7686435777d1d4f79adad8f29191039bbc558b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Mon, 11 Jul 2022 21:30:41 +0200 Subject: [PATCH 05/52] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Move=20from=20`Optio?= =?UTF-8?q?nal[X]`=20to=20`Union[X,=20None]`=20for=20internal=20utils=20(#?= =?UTF-8?q?5124)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../comment-docs-preview-in-pr/app/main.py | 6 +++--- .../actions/notify-translations/app/main.py | 6 +++--- .github/actions/people/app/main.py | 18 +++++++++--------- .github/actions/watch-previews/app/main.py | 6 +++--- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/.github/actions/comment-docs-preview-in-pr/app/main.py b/.github/actions/comment-docs-preview-in-pr/app/main.py index c9fb7cbbe..68914fdb9 100644 --- a/.github/actions/comment-docs-preview-in-pr/app/main.py +++ b/.github/actions/comment-docs-preview-in-pr/app/main.py @@ -1,7 +1,7 @@ import logging import sys from pathlib import Path -from typing import Optional +from typing import Union import httpx from github import Github @@ -14,7 +14,7 @@ github_api = "https://api.github.com" class Settings(BaseSettings): github_repository: str github_event_path: Path - github_event_name: Optional[str] = None + github_event_name: Union[str, None] = None input_token: SecretStr input_deploy_url: str @@ -42,7 +42,7 @@ if __name__ == "__main__": except ValidationError as e: logging.error(f"Error parsing event file: {e.errors()}") sys.exit(0) - use_pr: Optional[PullRequest] = None + use_pr: Union[PullRequest, None] = None for pr in repo.get_pulls(): if pr.head.sha == event.workflow_run.head_commit.id: use_pr = pr diff --git a/.github/actions/notify-translations/app/main.py b/.github/actions/notify-translations/app/main.py index 823685e00..d4ba0ecfc 100644 --- a/.github/actions/notify-translations/app/main.py +++ b/.github/actions/notify-translations/app/main.py @@ -2,7 +2,7 @@ import logging import random import time from pathlib import Path -from typing import Dict, Optional +from typing import Dict, Union import yaml from github import Github @@ -18,8 +18,8 @@ class Settings(BaseSettings): github_repository: str input_token: SecretStr github_event_path: Path - github_event_name: Optional[str] = None - input_debug: Optional[bool] = False + github_event_name: Union[str, None] = None + input_debug: Union[bool, None] = False class PartialGitHubEventIssue(BaseModel): diff --git a/.github/actions/people/app/main.py b/.github/actions/people/app/main.py index 9de6fc250..1455d01ca 100644 --- a/.github/actions/people/app/main.py +++ b/.github/actions/people/app/main.py @@ -4,7 +4,7 @@ import sys from collections import Counter, defaultdict from datetime import datetime, timedelta, timezone from pathlib import Path -from typing import Container, DefaultDict, Dict, List, Optional, Set +from typing import Container, DefaultDict, Dict, List, Set, Union import httpx import yaml @@ -133,7 +133,7 @@ class Author(BaseModel): class CommentsNode(BaseModel): createdAt: datetime - author: Optional[Author] = None + author: Union[Author, None] = None class Comments(BaseModel): @@ -142,7 +142,7 @@ class Comments(BaseModel): class IssuesNode(BaseModel): number: int - author: Optional[Author] = None + author: Union[Author, None] = None title: str createdAt: datetime state: str @@ -179,7 +179,7 @@ class Labels(BaseModel): class ReviewNode(BaseModel): - author: Optional[Author] = None + author: Union[Author, None] = None state: str @@ -190,7 +190,7 @@ class Reviews(BaseModel): class PullRequestNode(BaseModel): number: int labels: Labels - author: Optional[Author] = None + author: Union[Author, None] = None title: str createdAt: datetime state: str @@ -263,7 +263,7 @@ class Settings(BaseSettings): def get_graphql_response( - *, settings: Settings, query: str, after: Optional[str] = None + *, settings: Settings, query: str, after: Union[str, None] = None ): headers = {"Authorization": f"token {settings.input_token.get_secret_value()}"} variables = {"after": after} @@ -280,19 +280,19 @@ def get_graphql_response( return data -def get_graphql_issue_edges(*, settings: Settings, after: Optional[str] = None): +def get_graphql_issue_edges(*, settings: Settings, after: Union[str, None] = None): data = get_graphql_response(settings=settings, query=issues_query, after=after) graphql_response = IssuesResponse.parse_obj(data) return graphql_response.data.repository.issues.edges -def get_graphql_pr_edges(*, settings: Settings, after: Optional[str] = None): +def get_graphql_pr_edges(*, settings: Settings, after: Union[str, None] = None): data = get_graphql_response(settings=settings, query=prs_query, after=after) graphql_response = PRsResponse.parse_obj(data) return graphql_response.data.repository.pullRequests.edges -def get_graphql_sponsor_edges(*, settings: Settings, after: Optional[str] = None): +def get_graphql_sponsor_edges(*, settings: Settings, after: Union[str, None] = None): data = get_graphql_response(settings=settings, query=sponsors_query, after=after) graphql_response = SponsorsResponse.parse_obj(data) return graphql_response.data.user.sponsorshipsAsMaintainer.edges diff --git a/.github/actions/watch-previews/app/main.py b/.github/actions/watch-previews/app/main.py index 3b3520599..51285d02b 100644 --- a/.github/actions/watch-previews/app/main.py +++ b/.github/actions/watch-previews/app/main.py @@ -1,7 +1,7 @@ import logging from datetime import datetime from pathlib import Path -from typing import List, Optional +from typing import List, Union import httpx from github import Github @@ -16,7 +16,7 @@ class Settings(BaseSettings): input_token: SecretStr github_repository: str github_event_path: Path - github_event_name: Optional[str] = None + github_event_name: Union[str, None] = None class Artifact(BaseModel): @@ -74,7 +74,7 @@ if __name__ == "__main__": logging.info(f"Docs preview was notified: {notified}") if not notified: artifact_name = f"docs-zip-{commit}" - use_artifact: Optional[Artifact] = None + use_artifact: Union[Artifact, None] = None for artifact in artifacts_response.artifacts: if artifact.name == artifact_name: use_artifact = artifact From bea5194ffcbc943f7666a8ac46950936a0a43811 Mon Sep 17 00:00:00 2001 From: github-actions Date: Mon, 11 Jul 2022 19:31:26 +0000 Subject: [PATCH 06/52] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index 2ae0a2ed0..9e5ed6371 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,7 @@ ## Latest Changes +* ♻️ Move from `Optional[X]` to `Union[X, None]` for internal utils. PR [#5124](https://github.com/tiangolo/fastapi/pull/5124) by [@tiangolo](https://github.com/tiangolo). * 🔧 Update sponsors, remove Dropbase, add Doist. PR [#5096](https://github.com/tiangolo/fastapi/pull/5096) by [@tiangolo](https://github.com/tiangolo). * 🔧 Update sponsors, remove Classiq, add ImgWhale. PR [#5079](https://github.com/tiangolo/fastapi/pull/5079) by [@tiangolo](https://github.com/tiangolo). From 1d5bbe5552a7eb9f7cefd3ae265c12c18dd67974 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Tue, 12 Jul 2022 18:53:38 +0200 Subject: [PATCH 07/52] =?UTF-8?q?=F0=9F=91=B7=20Add=20Dependabot=20(#5128)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/dependabot.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..946f2358c --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,12 @@ +version: 2 +updates: + # GitHub Actions + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" + # Python + - package-ecosystem: "pip" + directory: "/" + schedule: + interval: "daily" From a0fd613527d4bb3e035b5c00051c654777dcbca1 Mon Sep 17 00:00:00 2001 From: github-actions Date: Tue, 12 Jul 2022 16:54:11 +0000 Subject: [PATCH 08/52] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index 9e5ed6371..e7326d0f1 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,7 @@ ## Latest Changes +* 👷 Add Dependabot. PR [#5128](https://github.com/tiangolo/fastapi/pull/5128) by [@tiangolo](https://github.com/tiangolo). * ♻️ Move from `Optional[X]` to `Union[X, None]` for internal utils. PR [#5124](https://github.com/tiangolo/fastapi/pull/5124) by [@tiangolo](https://github.com/tiangolo). * 🔧 Update sponsors, remove Dropbase, add Doist. PR [#5096](https://github.com/tiangolo/fastapi/pull/5096) by [@tiangolo](https://github.com/tiangolo). * 🔧 Update sponsors, remove Classiq, add ImgWhale. PR [#5079](https://github.com/tiangolo/fastapi/pull/5079) by [@tiangolo](https://github.com/tiangolo). From c43120258fa89bc20d6f8ee671b6ead9ab223fc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Thu, 14 Jul 2022 13:19:42 +0200 Subject: [PATCH 09/52] =?UTF-8?q?=F0=9F=90=9B=20Fix=20removing=20body=20fr?= =?UTF-8?q?om=20status=20codes=20that=20do=20not=20support=20it=20(#5145)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fastapi/openapi/constants.py | 1 - fastapi/openapi/utils.py | 12 ++++------- fastapi/routing.py | 33 +++++++++++++++++------------ fastapi/utils.py | 7 ++++++ tests/test_response_code_no_body.py | 9 +++++++- 5 files changed, 38 insertions(+), 24 deletions(-) diff --git a/fastapi/openapi/constants.py b/fastapi/openapi/constants.py index 3e69e5524..1897ad750 100644 --- a/fastapi/openapi/constants.py +++ b/fastapi/openapi/constants.py @@ -1,3 +1,2 @@ METHODS_WITH_BODY = {"GET", "HEAD", "POST", "PUT", "DELETE", "PATCH"} -STATUS_CODES_WITH_NO_BODY = {100, 101, 102, 103, 204, 304} REF_PREFIX = "#/components/schemas/" diff --git a/fastapi/openapi/utils.py b/fastapi/openapi/utils.py index 4eb727bd4..5d3d95c24 100644 --- a/fastapi/openapi/utils.py +++ b/fastapi/openapi/utils.py @@ -9,11 +9,7 @@ from fastapi.datastructures import DefaultPlaceholder from fastapi.dependencies.models import Dependant from fastapi.dependencies.utils import get_flat_dependant, get_flat_params from fastapi.encoders import jsonable_encoder -from fastapi.openapi.constants import ( - METHODS_WITH_BODY, - REF_PREFIX, - STATUS_CODES_WITH_NO_BODY, -) +from fastapi.openapi.constants import METHODS_WITH_BODY, REF_PREFIX from fastapi.openapi.models import OpenAPI from fastapi.params import Body, Param from fastapi.responses import Response @@ -21,6 +17,7 @@ from fastapi.utils import ( deep_dict_update, generate_operation_id_for_path, get_model_definitions, + is_body_allowed_for_status_code, ) from pydantic import BaseModel from pydantic.fields import ModelField, Undefined @@ -265,9 +262,8 @@ def get_openapi_path( operation.setdefault("responses", {}).setdefault(status_code, {})[ "description" ] = route.response_description - if ( - route_response_media_type - and route.status_code not in STATUS_CODES_WITH_NO_BODY + if route_response_media_type and is_body_allowed_for_status_code( + route.status_code ): response_schema = {"type": "string"} if lenient_issubclass(current_response_class, JSONResponse): diff --git a/fastapi/routing.py b/fastapi/routing.py index a6542c15a..6f1a8e900 100644 --- a/fastapi/routing.py +++ b/fastapi/routing.py @@ -29,13 +29,13 @@ from fastapi.dependencies.utils import ( ) from fastapi.encoders import DictIntStrAny, SetIntStr, jsonable_encoder from fastapi.exceptions import RequestValidationError, WebSocketRequestValidationError -from fastapi.openapi.constants import STATUS_CODES_WITH_NO_BODY from fastapi.types import DecoratedCallable from fastapi.utils import ( create_cloned_field, create_response_field, generate_unique_id, get_value_or_default, + is_body_allowed_for_status_code, ) from pydantic import BaseModel from pydantic.error_wrappers import ErrorWrapper, ValidationError @@ -232,7 +232,17 @@ def get_request_handler( if raw_response.background is None: raw_response.background = background_tasks return raw_response - response_data = await serialize_response( + response_args: Dict[str, Any] = {"background": background_tasks} + # If status_code was set, use it, otherwise use the default from the + # response class, in the case of redirect it's 307 + current_status_code = ( + status_code if status_code else sub_response.status_code + ) + if current_status_code is not None: + response_args["status_code"] = current_status_code + if sub_response.status_code: + response_args["status_code"] = sub_response.status_code + content = await serialize_response( field=response_field, response_content=raw_response, include=response_model_include, @@ -243,15 +253,10 @@ def get_request_handler( exclude_none=response_model_exclude_none, is_coroutine=is_coroutine, ) - response_args: Dict[str, Any] = {"background": background_tasks} - # If status_code was set, use it, otherwise use the default from the - # response class, in the case of redirect it's 307 - if status_code is not None: - response_args["status_code"] = status_code - response = actual_response_class(response_data, **response_args) + response = actual_response_class(content, **response_args) + if not is_body_allowed_for_status_code(status_code): + response.body = b"" response.headers.raw.extend(sub_response.headers.raw) - if sub_response.status_code: - response.status_code = sub_response.status_code return response return app @@ -377,8 +382,8 @@ class APIRoute(routing.Route): status_code = int(status_code) self.status_code = status_code if self.response_model: - assert ( - status_code not in STATUS_CODES_WITH_NO_BODY + assert is_body_allowed_for_status_code( + status_code ), f"Status code {status_code} must not have a response body" response_name = "Response_" + self.unique_id self.response_field = create_response_field( @@ -410,8 +415,8 @@ class APIRoute(routing.Route): assert isinstance(response, dict), "An additional response must be a dict" model = response.get("model") if model: - assert ( - additional_status_code not in STATUS_CODES_WITH_NO_BODY + assert is_body_allowed_for_status_code( + additional_status_code ), f"Status code {additional_status_code} must not have a response body" response_name = f"Response_{additional_status_code}_{self.unique_id}" response_field = create_response_field(name=response_name, type_=model) diff --git a/fastapi/utils.py b/fastapi/utils.py index a7e135bca..887d57c90 100644 --- a/fastapi/utils.py +++ b/fastapi/utils.py @@ -18,6 +18,13 @@ if TYPE_CHECKING: # pragma: nocover from .routing import APIRoute +def is_body_allowed_for_status_code(status_code: Union[int, str, None]) -> bool: + if status_code is None: + return True + current_status_code = int(status_code) + return not (current_status_code < 200 or current_status_code in {204, 304}) + + def get_model_definitions( *, flat_models: Set[Union[Type[BaseModel], Type[Enum]]], diff --git a/tests/test_response_code_no_body.py b/tests/test_response_code_no_body.py index 45e2fabc7..6d9b5c333 100644 --- a/tests/test_response_code_no_body.py +++ b/tests/test_response_code_no_body.py @@ -28,7 +28,7 @@ class JsonApiError(BaseModel): responses={500: {"description": "Error", "model": JsonApiError}}, ) async def a(): - pass # pragma: no cover + pass @app.get("/b", responses={204: {"description": "No Content"}}) @@ -106,3 +106,10 @@ def test_openapi_schema(): response = client.get("/openapi.json") assert response.status_code == 200, response.text assert response.json() == openapi_schema + + +def test_get_response(): + response = client.get("/a") + assert response.status_code == 204, response.text + assert "content-length" not in response.headers + assert response.content == b"" From 43d8ebfb4d118b5c904b40f66a5faaedff298611 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 14 Jul 2022 11:20:21 +0000 Subject: [PATCH 10/52] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index e7326d0f1..042d4a921 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,7 @@ ## Latest Changes +* 🐛 Fix removing body from status codes that do not support it. PR [#5145](https://github.com/tiangolo/fastapi/pull/5145) by [@tiangolo](https://github.com/tiangolo). * 👷 Add Dependabot. PR [#5128](https://github.com/tiangolo/fastapi/pull/5128) by [@tiangolo](https://github.com/tiangolo). * ♻️ Move from `Optional[X]` to `Union[X, None]` for internal utils. PR [#5124](https://github.com/tiangolo/fastapi/pull/5124) by [@tiangolo](https://github.com/tiangolo). * 🔧 Update sponsors, remove Dropbase, add Doist. PR [#5096](https://github.com/tiangolo/fastapi/pull/5096) by [@tiangolo](https://github.com/tiangolo). From ff47d50a9b59bbb96d64fb12bd6d584c9aed6595 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Jul 2022 13:20:51 +0200 Subject: [PATCH 11/52] =?UTF-8?q?=E2=AC=86=20Bump=20actions/setup-python?= =?UTF-8?q?=20from=202=20to=204=20(#5129)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [actions/setup-python](https://github.com/actions/setup-python) from 2 to 4. - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/v2...v4) --- updated-dependencies: - dependency-name: actions/setup-python dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build-docs.yml | 2 +- .github/workflows/publish.yml | 2 +- .github/workflows/test.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index 505d66f9f..7f0c4fa66 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -15,7 +15,7 @@ jobs: run: echo "$GITHUB_CONTEXT" - uses: actions/checkout@v2 - name: Set up Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: "3.7" - uses: actions/cache@v2 diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 9dde4e066..ad61ff7a8 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -15,7 +15,7 @@ jobs: run: echo "$GITHUB_CONTEXT" - uses: actions/checkout@v2 - name: Set up Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: "3.6" - uses: actions/cache@v2 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f0a82344e..dbc452048 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -18,7 +18,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Set up Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - uses: actions/cache@v2 From 2fcf044a9009e299ed22b4ae2c376ea3163cd256 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 14 Jul 2022 11:21:27 +0000 Subject: [PATCH 12/52] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index 042d4a921..d522ed333 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,7 @@ ## Latest Changes +* ⬆ Bump actions/setup-python from 2 to 4. PR [#5129](https://github.com/tiangolo/fastapi/pull/5129) by [@dependabot[bot]](https://github.com/apps/dependabot). * 🐛 Fix removing body from status codes that do not support it. PR [#5145](https://github.com/tiangolo/fastapi/pull/5145) by [@tiangolo](https://github.com/tiangolo). * 👷 Add Dependabot. PR [#5128](https://github.com/tiangolo/fastapi/pull/5128) by [@tiangolo](https://github.com/tiangolo). * ♻️ Move from `Optional[X]` to `Union[X, None]` for internal utils. PR [#5124](https://github.com/tiangolo/fastapi/pull/5124) by [@tiangolo](https://github.com/tiangolo). From 397a2e3484e043cfce857bc8a709691dad690ac4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Jul 2022 13:21:37 +0200 Subject: [PATCH 13/52] =?UTF-8?q?=E2=AC=86=20Bump=20dawidd6/action-downloa?= =?UTF-8?q?d-artifact=20from=202.9.0=20to=202.21.1=20(#5130)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bump dawidd6/action-download-artifact from 2.9.0 to 2.21.1 Bumps [dawidd6/action-download-artifact](https://github.com/dawidd6/action-download-artifact) from 2.9.0 to 2.21.1. - [Release notes](https://github.com/dawidd6/action-download-artifact/releases) - [Commits](https://github.com/dawidd6/action-download-artifact/compare/v2.9.0...v2.21.1) --- updated-dependencies: - dependency-name: dawidd6/action-download-artifact dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/preview-docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/preview-docs.yml b/.github/workflows/preview-docs.yml index 104c2677f..49a9a50c1 100644 --- a/.github/workflows/preview-docs.yml +++ b/.github/workflows/preview-docs.yml @@ -12,7 +12,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Download Artifact Docs - uses: dawidd6/action-download-artifact@v2.9.0 + uses: dawidd6/action-download-artifact@v2.21.1 with: github_token: ${{ secrets.GITHUB_TOKEN }} workflow: build-docs.yml From 7c3137301b2b5051c78ae4b42c9c36fc7bbc2769 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Jul 2022 13:22:02 +0200 Subject: [PATCH 14/52] =?UTF-8?q?=E2=AC=86=20Bump=20codecov/codecov-action?= =?UTF-8?q?=20from=202=20to=203=20(#5131)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [codecov/codecov-action](https://github.com/codecov/codecov-action) from 2 to 3. - [Release notes](https://github.com/codecov/codecov-action/releases) - [Changelog](https://github.com/codecov/codecov-action/blob/master/CHANGELOG.md) - [Commits](https://github.com/codecov/codecov-action/compare/v2...v3) --- updated-dependencies: - dependency-name: codecov/codecov-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index dbc452048..dfa3ed2df 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -38,4 +38,4 @@ jobs: - name: Test run: bash scripts/test.sh - name: Upload coverage - uses: codecov/codecov-action@v2 + uses: codecov/codecov-action@v3 From 6497cb08f5314e78f3bad842fbfc17f43be79add Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Jul 2022 13:22:16 +0200 Subject: [PATCH 15/52] =?UTF-8?q?=E2=AC=86=20Bump=20nwtgck/actions-netlify?= =?UTF-8?q?=20from=201.1.5=20to=201.2.3=20(#5132)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build-docs.yml | 2 +- .github/workflows/preview-docs.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index 7f0c4fa66..bdc664429 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -41,7 +41,7 @@ jobs: name: docs-zip path: ./docs.zip - name: Deploy to Netlify - uses: nwtgck/actions-netlify@v1.1.5 + uses: nwtgck/actions-netlify@v1.2.3 with: publish-dir: './site' production-branch: master diff --git a/.github/workflows/preview-docs.yml b/.github/workflows/preview-docs.yml index 49a9a50c1..a05b367d4 100644 --- a/.github/workflows/preview-docs.yml +++ b/.github/workflows/preview-docs.yml @@ -25,7 +25,7 @@ jobs: rm -f docs.zip - name: Deploy to Netlify id: netlify - uses: nwtgck/actions-netlify@v1.1.5 + uses: nwtgck/actions-netlify@v1.2.3 with: publish-dir: './site' production-deploy: false From 3ccb9604781cdc0d5cdfe7b112b96b0bea4044b8 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 14 Jul 2022 11:22:19 +0000 Subject: [PATCH 16/52] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index d522ed333..86e26372d 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,7 @@ ## Latest Changes +* ⬆ Bump dawidd6/action-download-artifact from 2.9.0 to 2.21.1. PR [#5130](https://github.com/tiangolo/fastapi/pull/5130) by [@dependabot[bot]](https://github.com/apps/dependabot). * ⬆ Bump actions/setup-python from 2 to 4. PR [#5129](https://github.com/tiangolo/fastapi/pull/5129) by [@dependabot[bot]](https://github.com/apps/dependabot). * 🐛 Fix removing body from status codes that do not support it. PR [#5145](https://github.com/tiangolo/fastapi/pull/5145) by [@tiangolo](https://github.com/tiangolo). * 👷 Add Dependabot. PR [#5128](https://github.com/tiangolo/fastapi/pull/5128) by [@tiangolo](https://github.com/tiangolo). From b7bd3c1d55b98b475c9d1e11edf5b1a2ab96fedc Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 14 Jul 2022 11:23:15 +0000 Subject: [PATCH 17/52] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index 86e26372d..44d08b86b 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,7 @@ ## Latest Changes +* ⬆ Bump codecov/codecov-action from 2 to 3. PR [#5131](https://github.com/tiangolo/fastapi/pull/5131) by [@dependabot[bot]](https://github.com/apps/dependabot). * ⬆ Bump dawidd6/action-download-artifact from 2.9.0 to 2.21.1. PR [#5130](https://github.com/tiangolo/fastapi/pull/5130) by [@dependabot[bot]](https://github.com/apps/dependabot). * ⬆ Bump actions/setup-python from 2 to 4. PR [#5129](https://github.com/tiangolo/fastapi/pull/5129) by [@dependabot[bot]](https://github.com/apps/dependabot). * 🐛 Fix removing body from status codes that do not support it. PR [#5145](https://github.com/tiangolo/fastapi/pull/5145) by [@tiangolo](https://github.com/tiangolo). From c15fce3248f83444106409e82d31fa0381ce7600 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 14 Jul 2022 11:24:11 +0000 Subject: [PATCH 18/52] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index 44d08b86b..8ff9f8fcc 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,7 @@ ## Latest Changes +* ⬆ Bump nwtgck/actions-netlify from 1.1.5 to 1.2.3. PR [#5132](https://github.com/tiangolo/fastapi/pull/5132) by [@dependabot[bot]](https://github.com/apps/dependabot). * ⬆ Bump codecov/codecov-action from 2 to 3. PR [#5131](https://github.com/tiangolo/fastapi/pull/5131) by [@dependabot[bot]](https://github.com/apps/dependabot). * ⬆ Bump dawidd6/action-download-artifact from 2.9.0 to 2.21.1. PR [#5130](https://github.com/tiangolo/fastapi/pull/5130) by [@dependabot[bot]](https://github.com/apps/dependabot). * ⬆ Bump actions/setup-python from 2 to 4. PR [#5129](https://github.com/tiangolo/fastapi/pull/5129) by [@dependabot[bot]](https://github.com/apps/dependabot). From 100799cde2c7a9ea86c9addcf6b9a8766c9a8415 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 14 Jul 2022 13:25:32 +0200 Subject: [PATCH 19/52] =?UTF-8?q?=E2=AC=86=20[pre-commit.ci]=20pre-commit?= =?UTF-8?q?=20autoupdate=20(#5030)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/pre-commit/pre-commit-hooks: v4.2.0 → v4.3.0](https://github.com/pre-commit/pre-commit-hooks/compare/v4.2.0...v4.3.0) - [github.com/asottile/pyupgrade: v2.32.1 → v2.37.1](https://github.com/asottile/pyupgrade/compare/v2.32.1...v2.37.1) - [github.com/psf/black: 22.3.0 → 22.6.0](https://github.com/psf/black/compare/22.3.0...22.6.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5c278571e..6944e4a25 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -2,7 +2,7 @@ # See https://pre-commit.com/hooks.html for more hooks repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.2.0 + rev: v4.3.0 hooks: - id: check-added-large-files - id: check-toml @@ -12,7 +12,7 @@ repos: - id: end-of-file-fixer - id: trailing-whitespace - repo: https://github.com/asottile/pyupgrade - rev: v2.32.1 + rev: v2.37.1 hooks: - id: pyupgrade args: @@ -43,7 +43,7 @@ repos: name: isort (pyi) types: [pyi] - repo: https://github.com/psf/black - rev: 22.3.0 + rev: 22.6.0 hooks: - id: black ci: From 606028dc8c395d1f93ee9ec59047834634f5ac9e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Jul 2022 11:26:14 +0000 Subject: [PATCH 20/52] =?UTF-8?q?=E2=AC=86=20Bump=20actions/checkout=20fro?= =?UTF-8?q?m=202=20to=203=20(#5133)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bump actions/checkout from 2 to 3 Bumps [actions/checkout](https://github.com/actions/checkout) from 2 to 3. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v2...v3) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build-docs.yml | 2 +- .github/workflows/latest-changes.yml | 2 +- .github/workflows/notify-translations.yml | 2 +- .github/workflows/people.yml | 2 +- .github/workflows/preview-docs.yml | 2 +- .github/workflows/publish.yml | 2 +- .github/workflows/test.yml | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index bdc664429..512d70078 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -13,7 +13,7 @@ jobs: env: GITHUB_CONTEXT: ${{ toJson(github) }} run: echo "$GITHUB_CONTEXT" - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 with: diff --git a/.github/workflows/latest-changes.yml b/.github/workflows/latest-changes.yml index 5783c993a..4aa8475b6 100644 --- a/.github/workflows/latest-changes.yml +++ b/.github/workflows/latest-changes.yml @@ -20,7 +20,7 @@ jobs: latest-changes: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: # To allow latest-changes to commit to master token: ${{ secrets.ACTIONS_TOKEN }} diff --git a/.github/workflows/notify-translations.yml b/.github/workflows/notify-translations.yml index 7e414ab95..2fcb7595e 100644 --- a/.github/workflows/notify-translations.yml +++ b/.github/workflows/notify-translations.yml @@ -9,7 +9,7 @@ jobs: notify-translations: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 # Allow debugging with tmate - name: Setup tmate session uses: mxschmitt/action-tmate@v3 diff --git a/.github/workflows/people.yml b/.github/workflows/people.yml index 2004ee7b3..4b47b4072 100644 --- a/.github/workflows/people.yml +++ b/.github/workflows/people.yml @@ -14,7 +14,7 @@ jobs: fastapi-people: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 # Allow debugging with tmate - name: Setup tmate session uses: mxschmitt/action-tmate@v3 diff --git a/.github/workflows/preview-docs.yml b/.github/workflows/preview-docs.yml index a05b367d4..9e71a461a 100644 --- a/.github/workflows/preview-docs.yml +++ b/.github/workflows/preview-docs.yml @@ -10,7 +10,7 @@ jobs: preview-docs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Download Artifact Docs uses: dawidd6/action-download-artifact@v2.21.1 with: diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index ad61ff7a8..4686fd0d4 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -13,7 +13,7 @@ jobs: env: GITHUB_CONTEXT: ${{ toJson(github) }} run: echo "$GITHUB_CONTEXT" - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 with: diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index dfa3ed2df..763dbc44b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -16,7 +16,7 @@ jobs: fail-fast: false steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v4 with: From 19701d12fb9078c81072d1c4907d255554f286fd Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 14 Jul 2022 11:26:52 +0000 Subject: [PATCH 21/52] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index 8ff9f8fcc..fcd57540b 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,7 @@ ## Latest Changes +* ⬆ [pre-commit.ci] pre-commit autoupdate. PR [#5030](https://github.com/tiangolo/fastapi/pull/5030) by [@pre-commit-ci[bot]](https://github.com/apps/pre-commit-ci). * ⬆ Bump nwtgck/actions-netlify from 1.1.5 to 1.2.3. PR [#5132](https://github.com/tiangolo/fastapi/pull/5132) by [@dependabot[bot]](https://github.com/apps/dependabot). * ⬆ Bump codecov/codecov-action from 2 to 3. PR [#5131](https://github.com/tiangolo/fastapi/pull/5131) by [@dependabot[bot]](https://github.com/apps/dependabot). * ⬆ Bump dawidd6/action-download-artifact from 2.9.0 to 2.21.1. PR [#5130](https://github.com/tiangolo/fastapi/pull/5130) by [@dependabot[bot]](https://github.com/apps/dependabot). From 48b7804a791579648359353ed06400d9cc595dc7 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 14 Jul 2022 11:27:49 +0000 Subject: [PATCH 22/52] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index fcd57540b..3fe585e72 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,7 @@ ## Latest Changes +* ⬆ Bump actions/checkout from 2 to 3. PR [#5133](https://github.com/tiangolo/fastapi/pull/5133) by [@dependabot[bot]](https://github.com/apps/dependabot). * ⬆ [pre-commit.ci] pre-commit autoupdate. PR [#5030](https://github.com/tiangolo/fastapi/pull/5030) by [@pre-commit-ci[bot]](https://github.com/apps/pre-commit-ci). * ⬆ Bump nwtgck/actions-netlify from 1.1.5 to 1.2.3. PR [#5132](https://github.com/tiangolo/fastapi/pull/5132) by [@dependabot[bot]](https://github.com/apps/dependabot). * ⬆ Bump codecov/codecov-action from 2 to 3. PR [#5131](https://github.com/tiangolo/fastapi/pull/5131) by [@dependabot[bot]](https://github.com/apps/dependabot). From 120cf49089f2ce0e1d34534a3295157e29026636 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kamil=20Wo=C5=BAniak?= <41345824+Valaraucoo@users.noreply.github.com> Date: Thu, 14 Jul 2022 13:30:09 +0200 Subject: [PATCH 23/52] =?UTF-8?q?=F0=9F=8C=90=F0=9F=87=B5=F0=9F=87=B1=20Ad?= =?UTF-8?q?d=20Polish=20translation=20for=20`docs/pl/docs/tutorial/first-s?= =?UTF-8?q?teps.md`=20(#5024)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs: Polish translation for tutorial/first-steps.md * docs: Polish translation / fixes after cr --- docs/pl/docs/tutorial/first-steps.md | 334 +++++++++++++++++++++++++++ docs/pl/mkdocs.yml | 1 + 2 files changed, 335 insertions(+) create mode 100644 docs/pl/docs/tutorial/first-steps.md diff --git a/docs/pl/docs/tutorial/first-steps.md b/docs/pl/docs/tutorial/first-steps.md new file mode 100644 index 000000000..9406d703d --- /dev/null +++ b/docs/pl/docs/tutorial/first-steps.md @@ -0,0 +1,334 @@ +# Pierwsze kroki + +Najprostszy plik FastAPI może wyglądać tak: + +```Python +{!../../../docs_src/first_steps/tutorial001.py!} +``` + +Skopiuj to do pliku `main.py`. + +Uruchom serwer: + +
+ +```console +$ uvicorn main:app --reload + +INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) +INFO: Started reloader process [28720] +INFO: Started server process [28722] +INFO: Waiting for application startup. +INFO: Application startup complete. +``` + +
+ +!!! note + Polecenie `uvicorn main:app` odnosi się do: + + * `main`: plik `main.py` ("moduł" Python). + * `app`: obiekt utworzony w pliku `main.py` w lini `app = FastAPI()`. + * `--reload`: sprawia, że serwer uruchamia się ponownie po zmianie kodu. Używany tylko w trakcie tworzenia oprogramowania. + +Na wyjściu znajduje się linia z czymś w rodzaju: + +```hl_lines="4" +INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) +``` + +Ta linia pokazuje adres URL, pod którym Twoja aplikacja jest obsługiwana, na Twoim lokalnym komputerze. + +### Sprawdź to + +Otwórz w swojej przeglądarce http://127.0.0.1:8000. + +Zobaczysz odpowiedź w formacie JSON: + +```JSON +{"message": "Hello World"} +``` + +### Interaktywna dokumentacja API + +Przejdź teraz do http://127.0.0.1:8000/docs. + +Zobaczysz automatyczną i interaktywną dokumentację API (dostarczoną przez Swagger UI): + +![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png) + +### Alternatywna dokumentacja API + +Teraz przejdź do http://127.0.0.1:8000/redoc. + +Zobaczysz alternatywną automatycznie wygenerowaną dokumentację API (dostarczoną przez ReDoc): + +![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) + +### OpenAPI + +**FastAPI** generuje "schemat" z całym Twoim API przy użyciu standardu **OpenAPI** służącego do definiowania API. + +#### Schema + +"Schema" jest definicją lub opisem czegoś. Nie jest to kod, który go implementuje, ale po prostu abstrakcyjny opis. + +#### API "Schema" + +W typ przypadku, OpenAPI to specyfikacja, która dyktuje sposób definiowania schematu interfejsu API. + +Definicja schematu zawiera ścieżki API, możliwe parametry, które są przyjmowane przez endpointy, itp. + +#### "Schemat" danych + +Termin "schemat" może również odnosić się do wyglądu niektórych danych, takich jak zawartość JSON. + +W takim przypadku będzie to oznaczać atrybuty JSON, ich typy danych itp. + +#### OpenAPI i JSON Schema + +OpenAPI definiuje API Schema dla Twojego API, który zawiera definicje (lub "schematy") danych wysyłanych i odbieranych przez Twój interfejs API przy użyciu **JSON Schema**, standardu dla schematów danych w formacie JSON. + +#### Sprawdź `openapi.json` + +Jeśli jesteś ciekawy, jak wygląda surowy schemat OpenAPI, FastAPI automatycznie generuje JSON Schema z opisami wszystkich Twoich API. + +Możesz to zobaczyć bezpośrednio pod adresem: http://127.0.0.1:8000/openapi.json. + +Zobaczysz JSON zaczynający się od czegoś takiego: + +```JSON +{ + "openapi": "3.0.2", + "info": { + "title": "FastAPI", + "version": "0.1.0" + }, + "paths": { + "/items/": { + "get": { + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + + + +... +``` + +#### Do czego służy OpenAPI + +Schemat OpenAPI jest tym, co zasila dwa dołączone interaktywne systemy dokumentacji. + +Istnieją dziesiątki alternatyw, wszystkie oparte na OpenAPI. Możesz łatwo dodać dowolną z nich do swojej aplikacji zbudowanej za pomocą **FastAPI**. + +Możesz go również użyć do automatycznego generowania kodu dla klientów, którzy komunikują się z Twoim API. Na przykład aplikacje frontendowe, mobilne lub IoT. + +## Przypomnijmy, krok po kroku + +### Krok 1: zaimportuj `FastAPI` + +```Python hl_lines="1" +{!../../../docs_src/first_steps/tutorial001.py!} +``` + +`FastAPI` jest klasą, która zapewnia wszystkie funkcjonalności Twojego API. + +!!! note "Szczegóły techniczne" + `FastAPI` jest klasą, która dziedziczy bezpośrednio z `Starlette`. + + Oznacza to, że możesz korzystać ze wszystkich funkcjonalności Starlette również w `FastAPI`. + + +### Krok 2: utwórz instancję `FastAPI` + +```Python hl_lines="3" +{!../../../docs_src/first_steps/tutorial001.py!} +``` + +Zmienna `app` będzie tutaj "instancją" klasy `FastAPI`. + +Będzie to główny punkt interakcji przy tworzeniu całego interfejsu API. + +Ta zmienna `app` jest tą samą zmienną, do której odnosi się `uvicorn` w poleceniu: + +
+ +```console +$ uvicorn main:app --reload + +INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) +``` + +
+ +Jeśli stworzysz swoją aplikację, np.: + +```Python hl_lines="3" +{!../../../docs_src/first_steps/tutorial002.py!} +``` + +I umieścisz to w pliku `main.py`, to będziesz mógł tak wywołać `uvicorn`: + +
+ +```console +$ uvicorn main:my_awesome_api --reload + +INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) +``` + +
+ +### Krok 3: wykonaj *operację na ścieżce* + +#### Ścieżka + +"Ścieżka" tutaj odnosi się do ostatniej części adresu URL, zaczynając od pierwszego `/`. + +Więc, w adresie URL takim jak: + +``` +https://example.com/items/foo +``` + +...ścieżką będzie: + +``` +/items/foo +``` + +!!! info + "Ścieżka" jest zazwyczaj nazywana "path", "endpoint" lub "route'. + +Podczas budowania API, "ścieżka" jest głównym sposobem na oddzielenie "odpowiedzialności" i „zasobów”. + +#### Operacje + +"Operacje" tutaj odnoszą się do jednej z "metod" HTTP. + +Jedna z: + +* `POST` +* `GET` +* `PUT` +* `DELETE` + +...i te bardziej egzotyczne: + +* `OPTIONS` +* `HEAD` +* `PATCH` +* `TRACE` + +W protokole HTTP można komunikować się z każdą ścieżką za pomocą jednej (lub więcej) "metod". + +--- + +Podczas tworzenia API zwykle używasz tych metod HTTP do wykonania określonej akcji. + +Zazwyczaj używasz: + +* `POST`: do tworzenia danych. +* `GET`: do odczytywania danych. +* `PUT`: do aktualizacji danych. +* `DELETE`: do usuwania danych. + +Tak więc w OpenAPI każda z metod HTTP nazywana jest "operacją". + +Będziemy je również nazywali "**operacjami**". + +#### Zdefiniuj *dekorator operacji na ścieżce* + +```Python hl_lines="6" +{!../../../docs_src/first_steps/tutorial001.py!} +``` + +`@app.get("/")` mówi **FastAPI** że funkcja poniżej odpowiada za obsługę żądań, które trafiają do: + +* ścieżki `/` +* używając operacji get + +!!! info "`@decorator` Info" + Składnia `@something` jest w Pythonie nazywana "dekoratorem". + + Umieszczasz to na szczycie funkcji. Jak ładną ozdobną czapkę (chyba stąd wzięła się nazwa). + + "Dekorator" przyjmuje funkcję znajdującą się poniżej jego i coś z nią robi. + + W naszym przypadku dekorator mówi **FastAPI**, że poniższa funkcja odpowiada **ścieżce** `/` z **operacją** `get`. + + Jest to "**dekorator operacji na ścieżce**". + +Możesz również użyć innej operacji: + +* `@app.post()` +* `@app.put()` +* `@app.delete()` + +Oraz tych bardziej egzotycznych: + +* `@app.options()` +* `@app.head()` +* `@app.patch()` +* `@app.trace()` + +!!! tip + Możesz dowolnie używać każdej operacji (metody HTTP). + + **FastAPI** nie narzuca żadnego konkretnego znaczenia. + + Informacje tutaj są przedstawione jako wskazówka, a nie wymóg. + + Na przykład, używając GraphQL, normalnie wykonujesz wszystkie akcje używając tylko operacji `POST`. + +### Krok 4: zdefiniuj **funkcję obsługującą ścieżkę** + +To jest nasza "**funkcja obsługująca ścieżkę**": + +* **ścieżka**: to `/`. +* **operacja**: to `get`. +* **funkcja**: to funkcja poniżej "dekoratora" (poniżej `@app.get("/")`). + +```Python hl_lines="7" +{!../../../docs_src/first_steps/tutorial001.py!} +``` + +Jest to funkcja Python. + +Zostanie ona wywołana przez **FastAPI** za każdym razem, gdy otrzyma żądanie do adresu URL "`/`" przy użyciu operacji `GET`. + +W tym przypadku jest to funkcja "asynchroniczna". + +--- + +Możesz również zdefiniować to jako normalną funkcję zamiast `async def`: + +```Python hl_lines="7" +{!../../../docs_src/first_steps/tutorial003.py!} +``` + +!!! note + Jeśli nie znasz różnicy, sprawdź [Async: *"In a hurry?"*](/async/#in-a-hurry){.internal-link target=_blank}. + +### Krok 5: zwróć zawartość + +```Python hl_lines="8" +{!../../../docs_src/first_steps/tutorial001.py!} +``` + +Możesz zwrócić `dict`, `list`, pojedynczą wartość jako `str`, `int`, itp. + +Możesz również zwrócić modele Pydantic (więcej o tym później). + +Istnieje wiele innych obiektów i modeli, które zostaną automatycznie skonwertowane do formatu JSON (w tym ORM itp.). Spróbuj użyć swoich ulubionych, jest bardzo prawdopodobne, że są już obsługiwane. + +## Podsumowanie + +* Zaimportuj `FastAPI`. +* Stwórz instancję `app`. +* Dodaj **dekorator operacji na ścieżce** (taki jak `@app.get("/")`). +* Napisz **funkcję obsługującą ścieżkę** (taką jak `def root(): ...` powyżej). +* Uruchom serwer deweloperski (`uvicorn main:app --reload`). diff --git a/docs/pl/mkdocs.yml b/docs/pl/mkdocs.yml index 0c3d100e7..86383d985 100644 --- a/docs/pl/mkdocs.yml +++ b/docs/pl/mkdocs.yml @@ -58,6 +58,7 @@ nav: - zh: /zh/ - Samouczek: - tutorial/index.md + - tutorial/first-steps.md markdown_extensions: - toc: permalink: true From fb26c1ee70c271edb0796c20ccf4c187d1d536e9 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 14 Jul 2022 11:30:45 +0000 Subject: [PATCH 24/52] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index 3fe585e72..b43845e06 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,7 @@ ## Latest Changes +* 🌐🇵🇱 Add Polish translation for `docs/pl/docs/tutorial/first-steps.md`. PR [#5024](https://github.com/tiangolo/fastapi/pull/5024) by [@Valaraucoo](https://github.com/Valaraucoo). * ⬆ Bump actions/checkout from 2 to 3. PR [#5133](https://github.com/tiangolo/fastapi/pull/5133) by [@dependabot[bot]](https://github.com/apps/dependabot). * ⬆ [pre-commit.ci] pre-commit autoupdate. PR [#5030](https://github.com/tiangolo/fastapi/pull/5030) by [@pre-commit-ci[bot]](https://github.com/apps/pre-commit-ci). * ⬆ Bump nwtgck/actions-netlify from 1.1.5 to 1.2.3. PR [#5132](https://github.com/tiangolo/fastapi/pull/5132) by [@dependabot[bot]](https://github.com/apps/dependabot). From 80cb57e4b22ca81708129da3ee79beea5b574f23 Mon Sep 17 00:00:00 2001 From: wakabame <35513518+wakabame@users.noreply.github.com> Date: Thu, 14 Jul 2022 20:34:38 +0900 Subject: [PATCH 25/52] =?UTF-8?q?=F0=9F=8C=90=20Add=20Japanese=20translati?= =?UTF-8?q?on=20for=20`docs/ja/docs/advanced/index.md`=20(#5043)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Amazyra Co-authored-by: tokusumi <41147016+tokusumi@users.noreply.github.com> Co-authored-by: Sebastián Ramírez --- docs/ja/docs/advanced/index.md | 24 ++++++++++++++++++++++++ docs/ja/mkdocs.yml | 1 + 2 files changed, 25 insertions(+) create mode 100644 docs/ja/docs/advanced/index.md diff --git a/docs/ja/docs/advanced/index.md b/docs/ja/docs/advanced/index.md new file mode 100644 index 000000000..676f60359 --- /dev/null +++ b/docs/ja/docs/advanced/index.md @@ -0,0 +1,24 @@ +# ユーザーガイド 応用編 + +## さらなる機能 + +[チュートリアル - ユーザーガイド](../tutorial/){.internal-link target=_blank}により、**FastAPI**の主要な機能は十分に理解できたことでしょう。 + +以降のセクションでは、チュートリアルでは説明しきれなかったオプションや設定、および機能について説明します。 + +!!! tip "豆知識" + 以降のセクションは、 **必ずしも"応用編"ではありません**。 + + ユースケースによっては、その中から解決策を見つけられるかもしれません。 + +## 先にチュートリアルを読む + +[チュートリアル - ユーザーガイド](../tutorial/){.internal-link target=_blank}の知識があれば、**FastAPI**の主要な機能を利用することができます。 + +以降のセクションは、すでにチュートリアルを読んで、その主要なアイデアを理解できていることを前提としています。 + +## テスト駆動開発のコース + +このセクションの内容を補完するために脱初心者用コースを受けたい場合は、**TestDriven.io**による、Test-Driven Development with FastAPI and Dockerを確認するのがよいかもしれません。 + +現在、このコースで得られた利益の10%が**FastAPI**の開発のために寄付されています。🎉 😄 diff --git a/docs/ja/mkdocs.yml b/docs/ja/mkdocs.yml index 055404fea..1548b1905 100644 --- a/docs/ja/mkdocs.yml +++ b/docs/ja/mkdocs.yml @@ -78,6 +78,7 @@ nav: - tutorial/testing.md - tutorial/debugging.md - 高度なユーザーガイド: + - advanced/index.md - advanced/path-operation-advanced-configuration.md - advanced/additional-status-codes.md - advanced/response-directly.md From c5954d3bc0852a0b0450a54dea014733c63413f5 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 14 Jul 2022 11:35:16 +0000 Subject: [PATCH 26/52] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index b43845e06..eb078f165 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,7 @@ ## Latest Changes +* 🌐 Add Japanese translation for `docs/ja/docs/advanced/index.md`. PR [#5043](https://github.com/tiangolo/fastapi/pull/5043) by [@wakabame](https://github.com/wakabame). * 🌐🇵🇱 Add Polish translation for `docs/pl/docs/tutorial/first-steps.md`. PR [#5024](https://github.com/tiangolo/fastapi/pull/5024) by [@Valaraucoo](https://github.com/Valaraucoo). * ⬆ Bump actions/checkout from 2 to 3. PR [#5133](https://github.com/tiangolo/fastapi/pull/5133) by [@dependabot[bot]](https://github.com/apps/dependabot). * ⬆ [pre-commit.ci] pre-commit autoupdate. PR [#5030](https://github.com/tiangolo/fastapi/pull/5030) by [@pre-commit-ci[bot]](https://github.com/apps/pre-commit-ci). From b4a98a7224b642e9a728366137cc5675269a731d Mon Sep 17 00:00:00 2001 From: Robin <51365552+MrRawbin@users.noreply.github.com> Date: Thu, 14 Jul 2022 13:45:01 +0200 Subject: [PATCH 27/52] =?UTF-8?q?=F0=9F=8C=90=20Start=20of=20Swedish=20tra?= =?UTF-8?q?nslation=20(#5062)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Sebastián Ramírez --- docs/az/mkdocs.yml | 7 +- docs/de/mkdocs.yml | 7 +- docs/en/mkdocs.yml | 7 +- docs/es/mkdocs.yml | 7 +- docs/fa/mkdocs.yml | 7 +- docs/fr/mkdocs.yml | 7 +- docs/id/mkdocs.yml | 7 +- docs/it/mkdocs.yml | 7 +- docs/ja/mkdocs.yml | 7 +- docs/ko/mkdocs.yml | 7 +- docs/nl/mkdocs.yml | 7 +- docs/pl/mkdocs.yml | 7 +- docs/pt/mkdocs.yml | 7 +- docs/ru/mkdocs.yml | 7 +- docs/sq/mkdocs.yml | 7 +- docs/sv/docs/index.md | 468 +++++++++++++++++++++++++++++++++++ docs/sv/mkdocs.yml | 140 +++++++++++ docs/sv/overrides/.gitignore | 0 docs/tr/mkdocs.yml | 7 +- docs/uk/mkdocs.yml | 7 +- docs/zh/mkdocs.yml | 7 +- 21 files changed, 698 insertions(+), 36 deletions(-) create mode 100644 docs/sv/docs/index.md create mode 100644 docs/sv/mkdocs.yml create mode 100644 docs/sv/overrides/.gitignore diff --git a/docs/az/mkdocs.yml b/docs/az/mkdocs.yml index 60bd8eaad..7ebf94384 100644 --- a/docs/az/mkdocs.yml +++ b/docs/az/mkdocs.yml @@ -5,14 +5,14 @@ theme: name: material custom_dir: overrides palette: - - media: "(prefers-color-scheme: light)" + - media: '(prefers-color-scheme: light)' scheme: default primary: teal accent: amber toggle: icon: material/lightbulb name: Switch to light mode - - media: "(prefers-color-scheme: dark)" + - media: '(prefers-color-scheme: dark)' scheme: slate primary: teal accent: amber @@ -53,6 +53,7 @@ nav: - pt: /pt/ - ru: /ru/ - sq: /sq/ + - sv: /sv/ - tr: /tr/ - uk: /uk/ - zh: /zh/ @@ -123,6 +124,8 @@ extra: name: ru - русский язык - link: /sq/ name: sq - shqip + - link: /sv/ + name: sv - svenska - link: /tr/ name: tr - Türkçe - link: /uk/ diff --git a/docs/de/mkdocs.yml b/docs/de/mkdocs.yml index c72f325f6..c617e55af 100644 --- a/docs/de/mkdocs.yml +++ b/docs/de/mkdocs.yml @@ -5,14 +5,14 @@ theme: name: material custom_dir: overrides palette: - - media: "(prefers-color-scheme: light)" + - media: '(prefers-color-scheme: light)' scheme: default primary: teal accent: amber toggle: icon: material/lightbulb name: Switch to light mode - - media: "(prefers-color-scheme: dark)" + - media: '(prefers-color-scheme: dark)' scheme: slate primary: teal accent: amber @@ -53,6 +53,7 @@ nav: - pt: /pt/ - ru: /ru/ - sq: /sq/ + - sv: /sv/ - tr: /tr/ - uk: /uk/ - zh: /zh/ @@ -124,6 +125,8 @@ extra: name: ru - русский язык - link: /sq/ name: sq - shqip + - link: /sv/ + name: sv - svenska - link: /tr/ name: tr - Türkçe - link: /uk/ diff --git a/docs/en/mkdocs.yml b/docs/en/mkdocs.yml index 322de0f2f..04639200d 100644 --- a/docs/en/mkdocs.yml +++ b/docs/en/mkdocs.yml @@ -5,14 +5,14 @@ theme: name: material custom_dir: overrides palette: - - media: "(prefers-color-scheme: light)" + - media: '(prefers-color-scheme: light)' scheme: default primary: teal accent: amber toggle: icon: material/lightbulb name: Switch to light mode - - media: "(prefers-color-scheme: dark)" + - media: '(prefers-color-scheme: dark)' scheme: slate primary: teal accent: amber @@ -53,6 +53,7 @@ nav: - pt: /pt/ - ru: /ru/ - sq: /sq/ + - sv: /sv/ - tr: /tr/ - uk: /uk/ - zh: /zh/ @@ -230,6 +231,8 @@ extra: name: ru - русский язык - link: /sq/ name: sq - shqip + - link: /sv/ + name: sv - svenska - link: /tr/ name: tr - Türkçe - link: /uk/ diff --git a/docs/es/mkdocs.yml b/docs/es/mkdocs.yml index b544f9b38..cd1c04ed3 100644 --- a/docs/es/mkdocs.yml +++ b/docs/es/mkdocs.yml @@ -5,14 +5,14 @@ theme: name: material custom_dir: overrides palette: - - media: "(prefers-color-scheme: light)" + - media: '(prefers-color-scheme: light)' scheme: default primary: teal accent: amber toggle: icon: material/lightbulb name: Switch to light mode - - media: "(prefers-color-scheme: dark)" + - media: '(prefers-color-scheme: dark)' scheme: slate primary: teal accent: amber @@ -53,6 +53,7 @@ nav: - pt: /pt/ - ru: /ru/ - sq: /sq/ + - sv: /sv/ - tr: /tr/ - uk: /uk/ - zh: /zh/ @@ -133,6 +134,8 @@ extra: name: ru - русский язык - link: /sq/ name: sq - shqip + - link: /sv/ + name: sv - svenska - link: /tr/ name: tr - Türkçe - link: /uk/ diff --git a/docs/fa/mkdocs.yml b/docs/fa/mkdocs.yml index 3966a6026..79975288a 100644 --- a/docs/fa/mkdocs.yml +++ b/docs/fa/mkdocs.yml @@ -5,14 +5,14 @@ theme: name: material custom_dir: overrides palette: - - media: "(prefers-color-scheme: light)" + - media: '(prefers-color-scheme: light)' scheme: default primary: teal accent: amber toggle: icon: material/lightbulb name: Switch to light mode - - media: "(prefers-color-scheme: dark)" + - media: '(prefers-color-scheme: dark)' scheme: slate primary: teal accent: amber @@ -53,6 +53,7 @@ nav: - pt: /pt/ - ru: /ru/ - sq: /sq/ + - sv: /sv/ - tr: /tr/ - uk: /uk/ - zh: /zh/ @@ -123,6 +124,8 @@ extra: name: ru - русский язык - link: /sq/ name: sq - shqip + - link: /sv/ + name: sv - svenska - link: /tr/ name: tr - Türkçe - link: /uk/ diff --git a/docs/fr/mkdocs.yml b/docs/fr/mkdocs.yml index bf0d2b21c..69a323cec 100644 --- a/docs/fr/mkdocs.yml +++ b/docs/fr/mkdocs.yml @@ -5,14 +5,14 @@ theme: name: material custom_dir: overrides palette: - - media: "(prefers-color-scheme: light)" + - media: '(prefers-color-scheme: light)' scheme: default primary: teal accent: amber toggle: icon: material/lightbulb name: Switch to light mode - - media: "(prefers-color-scheme: dark)" + - media: '(prefers-color-scheme: dark)' scheme: slate primary: teal accent: amber @@ -53,6 +53,7 @@ nav: - pt: /pt/ - ru: /ru/ - sq: /sq/ + - sv: /sv/ - tr: /tr/ - uk: /uk/ - zh: /zh/ @@ -138,6 +139,8 @@ extra: name: ru - русский язык - link: /sq/ name: sq - shqip + - link: /sv/ + name: sv - svenska - link: /tr/ name: tr - Türkçe - link: /uk/ diff --git a/docs/id/mkdocs.yml b/docs/id/mkdocs.yml index 769547d11..6c9f88c90 100644 --- a/docs/id/mkdocs.yml +++ b/docs/id/mkdocs.yml @@ -5,14 +5,14 @@ theme: name: material custom_dir: overrides palette: - - media: "(prefers-color-scheme: light)" + - media: '(prefers-color-scheme: light)' scheme: default primary: teal accent: amber toggle: icon: material/lightbulb name: Switch to light mode - - media: "(prefers-color-scheme: dark)" + - media: '(prefers-color-scheme: dark)' scheme: slate primary: teal accent: amber @@ -53,6 +53,7 @@ nav: - pt: /pt/ - ru: /ru/ - sq: /sq/ + - sv: /sv/ - tr: /tr/ - uk: /uk/ - zh: /zh/ @@ -123,6 +124,8 @@ extra: name: ru - русский язык - link: /sq/ name: sq - shqip + - link: /sv/ + name: sv - svenska - link: /tr/ name: tr - Türkçe - link: /uk/ diff --git a/docs/it/mkdocs.yml b/docs/it/mkdocs.yml index ebec9a642..5f0b7c73b 100644 --- a/docs/it/mkdocs.yml +++ b/docs/it/mkdocs.yml @@ -5,14 +5,14 @@ theme: name: material custom_dir: overrides palette: - - media: "(prefers-color-scheme: light)" + - media: '(prefers-color-scheme: light)' scheme: default primary: teal accent: amber toggle: icon: material/lightbulb name: Switch to light mode - - media: "(prefers-color-scheme: dark)" + - media: '(prefers-color-scheme: dark)' scheme: slate primary: teal accent: amber @@ -53,6 +53,7 @@ nav: - pt: /pt/ - ru: /ru/ - sq: /sq/ + - sv: /sv/ - tr: /tr/ - uk: /uk/ - zh: /zh/ @@ -123,6 +124,8 @@ extra: name: ru - русский язык - link: /sq/ name: sq - shqip + - link: /sv/ + name: sv - svenska - link: /tr/ name: tr - Türkçe - link: /uk/ diff --git a/docs/ja/mkdocs.yml b/docs/ja/mkdocs.yml index 1548b1905..66694ef36 100644 --- a/docs/ja/mkdocs.yml +++ b/docs/ja/mkdocs.yml @@ -5,14 +5,14 @@ theme: name: material custom_dir: overrides palette: - - media: "(prefers-color-scheme: light)" + - media: '(prefers-color-scheme: light)' scheme: default primary: teal accent: amber toggle: icon: material/lightbulb name: Switch to light mode - - media: "(prefers-color-scheme: dark)" + - media: '(prefers-color-scheme: dark)' scheme: slate primary: teal accent: amber @@ -53,6 +53,7 @@ nav: - pt: /pt/ - ru: /ru/ - sq: /sq/ + - sv: /sv/ - tr: /tr/ - uk: /uk/ - zh: /zh/ @@ -165,6 +166,8 @@ extra: name: ru - русский язык - link: /sq/ name: sq - shqip + - link: /sv/ + name: sv - svenska - link: /tr/ name: tr - Türkçe - link: /uk/ diff --git a/docs/ko/mkdocs.yml b/docs/ko/mkdocs.yml index 60cf7d30a..ddadebe7b 100644 --- a/docs/ko/mkdocs.yml +++ b/docs/ko/mkdocs.yml @@ -5,14 +5,14 @@ theme: name: material custom_dir: overrides palette: - - media: "(prefers-color-scheme: light)" + - media: '(prefers-color-scheme: light)' scheme: default primary: teal accent: amber toggle: icon: material/lightbulb name: Switch to light mode - - media: "(prefers-color-scheme: dark)" + - media: '(prefers-color-scheme: dark)' scheme: slate primary: teal accent: amber @@ -53,6 +53,7 @@ nav: - pt: /pt/ - ru: /ru/ - sq: /sq/ + - sv: /sv/ - tr: /tr/ - uk: /uk/ - zh: /zh/ @@ -133,6 +134,8 @@ extra: name: ru - русский язык - link: /sq/ name: sq - shqip + - link: /sv/ + name: sv - svenska - link: /tr/ name: tr - Türkçe - link: /uk/ diff --git a/docs/nl/mkdocs.yml b/docs/nl/mkdocs.yml index 9cd1e0401..620a4b25f 100644 --- a/docs/nl/mkdocs.yml +++ b/docs/nl/mkdocs.yml @@ -5,14 +5,14 @@ theme: name: material custom_dir: overrides palette: - - media: "(prefers-color-scheme: light)" + - media: '(prefers-color-scheme: light)' scheme: default primary: teal accent: amber toggle: icon: material/lightbulb name: Switch to light mode - - media: "(prefers-color-scheme: dark)" + - media: '(prefers-color-scheme: dark)' scheme: slate primary: teal accent: amber @@ -53,6 +53,7 @@ nav: - pt: /pt/ - ru: /ru/ - sq: /sq/ + - sv: /sv/ - tr: /tr/ - uk: /uk/ - zh: /zh/ @@ -123,6 +124,8 @@ extra: name: ru - русский язык - link: /sq/ name: sq - shqip + - link: /sv/ + name: sv - svenska - link: /tr/ name: tr - Türkçe - link: /uk/ diff --git a/docs/pl/mkdocs.yml b/docs/pl/mkdocs.yml index 86383d985..c04f3c1c6 100644 --- a/docs/pl/mkdocs.yml +++ b/docs/pl/mkdocs.yml @@ -5,14 +5,14 @@ theme: name: material custom_dir: overrides palette: - - media: "(prefers-color-scheme: light)" + - media: '(prefers-color-scheme: light)' scheme: default primary: teal accent: amber toggle: icon: material/lightbulb name: Switch to light mode - - media: "(prefers-color-scheme: dark)" + - media: '(prefers-color-scheme: dark)' scheme: slate primary: teal accent: amber @@ -53,6 +53,7 @@ nav: - pt: /pt/ - ru: /ru/ - sq: /sq/ + - sv: /sv/ - tr: /tr/ - uk: /uk/ - zh: /zh/ @@ -126,6 +127,8 @@ extra: name: ru - русский язык - link: /sq/ name: sq - shqip + - link: /sv/ + name: sv - svenska - link: /tr/ name: tr - Türkçe - link: /uk/ diff --git a/docs/pt/mkdocs.yml b/docs/pt/mkdocs.yml index 2bb0b568d..51d448c95 100644 --- a/docs/pt/mkdocs.yml +++ b/docs/pt/mkdocs.yml @@ -5,14 +5,14 @@ theme: name: material custom_dir: overrides palette: - - media: "(prefers-color-scheme: light)" + - media: '(prefers-color-scheme: light)' scheme: default primary: teal accent: amber toggle: icon: material/lightbulb name: Switch to light mode - - media: "(prefers-color-scheme: dark)" + - media: '(prefers-color-scheme: dark)' scheme: slate primary: teal accent: amber @@ -53,6 +53,7 @@ nav: - pt: /pt/ - ru: /ru/ - sq: /sq/ + - sv: /sv/ - tr: /tr/ - uk: /uk/ - zh: /zh/ @@ -148,6 +149,8 @@ extra: name: ru - русский язык - link: /sq/ name: sq - shqip + - link: /sv/ + name: sv - svenska - link: /tr/ name: tr - Türkçe - link: /uk/ diff --git a/docs/ru/mkdocs.yml b/docs/ru/mkdocs.yml index bb0702489..816a0d3a0 100644 --- a/docs/ru/mkdocs.yml +++ b/docs/ru/mkdocs.yml @@ -5,14 +5,14 @@ theme: name: material custom_dir: overrides palette: - - media: "(prefers-color-scheme: light)" + - media: '(prefers-color-scheme: light)' scheme: default primary: teal accent: amber toggle: icon: material/lightbulb name: Switch to light mode - - media: "(prefers-color-scheme: dark)" + - media: '(prefers-color-scheme: dark)' scheme: slate primary: teal accent: amber @@ -53,6 +53,7 @@ nav: - pt: /pt/ - ru: /ru/ - sq: /sq/ + - sv: /sv/ - tr: /tr/ - uk: /uk/ - zh: /zh/ @@ -124,6 +125,8 @@ extra: name: ru - русский язык - link: /sq/ name: sq - shqip + - link: /sv/ + name: sv - svenska - link: /tr/ name: tr - Türkçe - link: /uk/ diff --git a/docs/sq/mkdocs.yml b/docs/sq/mkdocs.yml index 8914395fe..4df6d5b1f 100644 --- a/docs/sq/mkdocs.yml +++ b/docs/sq/mkdocs.yml @@ -5,14 +5,14 @@ theme: name: material custom_dir: overrides palette: - - media: "(prefers-color-scheme: light)" + - media: '(prefers-color-scheme: light)' scheme: default primary: teal accent: amber toggle: icon: material/lightbulb name: Switch to light mode - - media: "(prefers-color-scheme: dark)" + - media: '(prefers-color-scheme: dark)' scheme: slate primary: teal accent: amber @@ -53,6 +53,7 @@ nav: - pt: /pt/ - ru: /ru/ - sq: /sq/ + - sv: /sv/ - tr: /tr/ - uk: /uk/ - zh: /zh/ @@ -123,6 +124,8 @@ extra: name: ru - русский язык - link: /sq/ name: sq - shqip + - link: /sv/ + name: sv - svenska - link: /tr/ name: tr - Türkçe - link: /uk/ diff --git a/docs/sv/docs/index.md b/docs/sv/docs/index.md new file mode 100644 index 000000000..fd52f994c --- /dev/null +++ b/docs/sv/docs/index.md @@ -0,0 +1,468 @@ + +{!../../../docs/missing-translation.md!} + + +

+ FastAPI +

+

+ FastAPI framework, high performance, easy to learn, fast to code, ready for production +

+

+ + Test + + + Coverage + + + Package version + + + Supported Python versions + +

+ +--- + +**Documentation**: https://fastapi.tiangolo.com + +**Source Code**: https://github.com/tiangolo/fastapi + +--- + +FastAPI is a modern, fast (high-performance), web framework for building APIs with Python 3.6+ based on standard Python type hints. + +The key features are: + +* **Fast**: Very high performance, on par with **NodeJS** and **Go** (thanks to Starlette and Pydantic). [One of the fastest Python frameworks available](#performance). + +* **Fast to code**: Increase the speed to develop features by about 200% to 300%. * +* **Fewer bugs**: Reduce about 40% of human (developer) induced errors. * +* **Intuitive**: Great editor support. Completion everywhere. Less time debugging. +* **Easy**: Designed to be easy to use and learn. Less time reading docs. +* **Short**: Minimize code duplication. Multiple features from each parameter declaration. Fewer bugs. +* **Robust**: Get production-ready code. With automatic interactive documentation. +* **Standards-based**: Based on (and fully compatible with) the open standards for APIs: OpenAPI (previously known as Swagger) and JSON Schema. + +* estimation based on tests on an internal development team, building production applications. + +## Sponsors + + + +{% if sponsors %} +{% for sponsor in sponsors.gold -%} + +{% endfor -%} +{%- for sponsor in sponsors.silver -%} + +{% endfor %} +{% endif %} + + + +Other sponsors + +## Opinions + +"_[...] I'm using **FastAPI** a ton these days. [...] I'm actually planning to use it for all of my team's **ML services at Microsoft**. Some of them are getting integrated into the core **Windows** product and some **Office** products._" + +
Kabir Khan - Microsoft (ref)
+ +--- + +"_We adopted the **FastAPI** library to spawn a **REST** server that can be queried to obtain **predictions**. [for Ludwig]_" + +
Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - Uber (ref)
+ +--- + +"_**Netflix** is pleased to announce the open-source release of our **crisis management** orchestration framework: **Dispatch**! [built with **FastAPI**]_" + +
Kevin Glisson, Marc Vilanova, Forest Monsen - Netflix (ref)
+ +--- + +"_I’m over the moon excited about **FastAPI**. It’s so fun!_" + +
Brian Okken - Python Bytes podcast host (ref)
+ +--- + +"_Honestly, what you've built looks super solid and polished. In many ways, it's what I wanted **Hug** to be - it's really inspiring to see someone build that._" + +
Timothy Crosley - Hug creator (ref)
+ +--- + +"_If you're looking to learn one **modern framework** for building REST APIs, check out **FastAPI** [...] It's fast, easy to use and easy to learn [...]_" + +"_We've switched over to **FastAPI** for our **APIs** [...] I think you'll like it [...]_" + +
Ines Montani - Matthew Honnibal - Explosion AI founders - spaCy creators (ref) - (ref)
+ +--- + +## **Typer**, the FastAPI of CLIs + + + +If you are building a CLI app to be used in the terminal instead of a web API, check out **Typer**. + +**Typer** is FastAPI's little sibling. And it's intended to be the **FastAPI of CLIs**. ⌨️ 🚀 + +## Requirements + +Python 3.6+ + +FastAPI stands on the shoulders of giants: + +* Starlette for the web parts. +* Pydantic for the data parts. + +## Installation + +
+ +```console +$ pip install fastapi + +---> 100% +``` + +
+ +You will also need an ASGI server, for production such as Uvicorn or Hypercorn. + +
+ +```console +$ pip install "uvicorn[standard]" + +---> 100% +``` + +
+ +## Example + +### Create it + +* Create a file `main.py` with: + +```Python +from typing import Union + +from fastapi import FastAPI + +app = FastAPI() + + +@app.get("/") +def read_root(): + return {"Hello": "World"} + + +@app.get("/items/{item_id}") +def read_item(item_id: int, q: Union[str, None] = None): + return {"item_id": item_id, "q": q} +``` + +
+Or use async def... + +If your code uses `async` / `await`, use `async def`: + +```Python hl_lines="9 14" +from typing import Union + +from fastapi import FastAPI + +app = FastAPI() + + +@app.get("/") +async def read_root(): + return {"Hello": "World"} + + +@app.get("/items/{item_id}") +async def read_item(item_id: int, q: Union[str, None] = None): + return {"item_id": item_id, "q": q} +``` + +**Note**: + +If you don't know, check the _"In a hurry?"_ section about `async` and `await` in the docs. + +
+ +### Run it + +Run the server with: + +
+ +```console +$ uvicorn main:app --reload + +INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) +INFO: Started reloader process [28720] +INFO: Started server process [28722] +INFO: Waiting for application startup. +INFO: Application startup complete. +``` + +
+ +
+About the command uvicorn main:app --reload... + +The command `uvicorn main:app` refers to: + +* `main`: the file `main.py` (the Python "module"). +* `app`: the object created inside of `main.py` with the line `app = FastAPI()`. +* `--reload`: make the server restart after code changes. Only do this for development. + +
+ +### Check it + +Open your browser at http://127.0.0.1:8000/items/5?q=somequery. + +You will see the JSON response as: + +```JSON +{"item_id": 5, "q": "somequery"} +``` + +You already created an API that: + +* Receives HTTP requests in the _paths_ `/` and `/items/{item_id}`. +* Both _paths_ take `GET` operations (also known as HTTP _methods_). +* The _path_ `/items/{item_id}` has a _path parameter_ `item_id` that should be an `int`. +* The _path_ `/items/{item_id}` has an optional `str` _query parameter_ `q`. + +### Interactive API docs + +Now go to http://127.0.0.1:8000/docs. + +You will see the automatic interactive API documentation (provided by Swagger UI): + +![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png) + +### Alternative API docs + +And now, go to http://127.0.0.1:8000/redoc. + +You will see the alternative automatic documentation (provided by ReDoc): + +![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) + +## Example upgrade + +Now modify the file `main.py` to receive a body from a `PUT` request. + +Declare the body using standard Python types, thanks to Pydantic. + +```Python hl_lines="4 9-12 25-27" +from typing import Union + +from fastapi import FastAPI +from pydantic import BaseModel + +app = FastAPI() + + +class Item(BaseModel): + name: str + price: float + is_offer: Union[bool, None] = None + + +@app.get("/") +def read_root(): + return {"Hello": "World"} + + +@app.get("/items/{item_id}") +def read_item(item_id: int, q: Union[str, None] = None): + return {"item_id": item_id, "q": q} + + +@app.put("/items/{item_id}") +def update_item(item_id: int, item: Item): + return {"item_name": item.name, "item_id": item_id} +``` + +The server should reload automatically (because you added `--reload` to the `uvicorn` command above). + +### Interactive API docs upgrade + +Now go to http://127.0.0.1:8000/docs. + +* The interactive API documentation will be automatically updated, including the new body: + +![Swagger UI](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png) + +* Click on the button "Try it out", it allows you to fill the parameters and directly interact with the API: + +![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-04-swagger-03.png) + +* Then click on the "Execute" button, the user interface will communicate with your API, send the parameters, get the results and show them on the screen: + +![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-05-swagger-04.png) + +### Alternative API docs upgrade + +And now, go to http://127.0.0.1:8000/redoc. + +* The alternative documentation will also reflect the new query parameter and body: + +![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png) + +### Recap + +In summary, you declare **once** the types of parameters, body, etc. as function parameters. + +You do that with standard modern Python types. + +You don't have to learn a new syntax, the methods or classes of a specific library, etc. + +Just standard **Python 3.6+**. + +For example, for an `int`: + +```Python +item_id: int +``` + +or for a more complex `Item` model: + +```Python +item: Item +``` + +...and with that single declaration you get: + +* Editor support, including: + * Completion. + * Type checks. +* Validation of data: + * Automatic and clear errors when the data is invalid. + * Validation even for deeply nested JSON objects. +* Conversion of input data: coming from the network to Python data and types. Reading from: + * JSON. + * Path parameters. + * Query parameters. + * Cookies. + * Headers. + * Forms. + * Files. +* Conversion of output data: converting from Python data and types to network data (as JSON): + * Convert Python types (`str`, `int`, `float`, `bool`, `list`, etc). + * `datetime` objects. + * `UUID` objects. + * Database models. + * ...and many more. +* Automatic interactive API documentation, including 2 alternative user interfaces: + * Swagger UI. + * ReDoc. + +--- + +Coming back to the previous code example, **FastAPI** will: + +* Validate that there is an `item_id` in the path for `GET` and `PUT` requests. +* Validate that the `item_id` is of type `int` for `GET` and `PUT` requests. + * If it is not, the client will see a useful, clear error. +* Check if there is an optional query parameter named `q` (as in `http://127.0.0.1:8000/items/foo?q=somequery`) for `GET` requests. + * As the `q` parameter is declared with `= None`, it is optional. + * Without the `None` it would be required (as is the body in the case with `PUT`). +* For `PUT` requests to `/items/{item_id}`, Read the body as JSON: + * Check that it has a required attribute `name` that should be a `str`. + * Check that it has a required attribute `price` that has to be a `float`. + * Check that it has an optional attribute `is_offer`, that should be a `bool`, if present. + * All this would also work for deeply nested JSON objects. +* Convert from and to JSON automatically. +* Document everything with OpenAPI, that can be used by: + * Interactive documentation systems. + * Automatic client code generation systems, for many languages. +* Provide 2 interactive documentation web interfaces directly. + +--- + +We just scratched the surface, but you already get the idea of how it all works. + +Try changing the line with: + +```Python + return {"item_name": item.name, "item_id": item_id} +``` + +...from: + +```Python + ... "item_name": item.name ... +``` + +...to: + +```Python + ... "item_price": item.price ... +``` + +...and see how your editor will auto-complete the attributes and know their types: + +![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png) + +For a more complete example including more features, see the Tutorial - User Guide. + +**Spoiler alert**: the tutorial - user guide includes: + +* Declaration of **parameters** from other different places as: **headers**, **cookies**, **form fields** and **files**. +* How to set **validation constraints** as `maximum_length` or `regex`. +* A very powerful and easy to use **Dependency Injection** system. +* Security and authentication, including support for **OAuth2** with **JWT tokens** and **HTTP Basic** auth. +* More advanced (but equally easy) techniques for declaring **deeply nested JSON models** (thanks to Pydantic). +* **GraphQL** integration with Strawberry and other libraries. +* Many extra features (thanks to Starlette) as: + * **WebSockets** + * extremely easy tests based on `requests` and `pytest` + * **CORS** + * **Cookie Sessions** + * ...and more. + +## Performance + +Independent TechEmpower benchmarks show **FastAPI** applications running under Uvicorn as one of the fastest Python frameworks available, only below Starlette and Uvicorn themselves (used internally by FastAPI). (*) + +To understand more about it, see the section Benchmarks. + +## Optional Dependencies + +Used by Pydantic: + +* ujson - for faster JSON "parsing". +* email_validator - for email validation. + +Used by Starlette: + +* requests - Required if you want to use the `TestClient`. +* jinja2 - Required if you want to use the default template configuration. +* python-multipart - Required if you want to support form "parsing", with `request.form()`. +* itsdangerous - Required for `SessionMiddleware` support. +* pyyaml - Required for Starlette's `SchemaGenerator` support (you probably don't need it with FastAPI). +* ujson - Required if you want to use `UJSONResponse`. + +Used by FastAPI / Starlette: + +* uvicorn - for the server that loads and serves your application. +* orjson - Required if you want to use `ORJSONResponse`. + +You can install all of these with `pip install "fastapi[all]"`. + +## License + +This project is licensed under the terms of the MIT license. diff --git a/docs/sv/mkdocs.yml b/docs/sv/mkdocs.yml new file mode 100644 index 000000000..fa0296d5c --- /dev/null +++ b/docs/sv/mkdocs.yml @@ -0,0 +1,140 @@ +site_name: FastAPI +site_description: FastAPI framework, high performance, easy to learn, fast to code, ready for production +site_url: https://fastapi.tiangolo.com/sv/ +theme: + name: material + custom_dir: overrides + palette: + - media: '(prefers-color-scheme: light)' + scheme: default + primary: teal + accent: amber + toggle: + icon: material/lightbulb + name: Switch to light mode + - media: '(prefers-color-scheme: dark)' + scheme: slate + primary: teal + accent: amber + toggle: + icon: material/lightbulb-outline + name: Switch to dark mode + features: + - search.suggest + - search.highlight + - content.tabs.link + icon: + repo: fontawesome/brands/github-alt + logo: https://fastapi.tiangolo.com/img/icon-white.svg + favicon: https://fastapi.tiangolo.com/img/favicon.png + language: sv +repo_name: tiangolo/fastapi +repo_url: https://github.com/tiangolo/fastapi +edit_uri: '' +plugins: +- search +- markdownextradata: + data: data +nav: +- FastAPI: index.md +- Languages: + - en: / + - az: /az/ + - de: /de/ + - es: /es/ + - fa: /fa/ + - fr: /fr/ + - id: /id/ + - it: /it/ + - ja: /ja/ + - ko: /ko/ + - nl: /nl/ + - pl: /pl/ + - pt: /pt/ + - ru: /ru/ + - sq: /sq/ + - sv: /sv/ + - tr: /tr/ + - uk: /uk/ + - zh: /zh/ +markdown_extensions: +- toc: + permalink: true +- markdown.extensions.codehilite: + guess_lang: false +- mdx_include: + base_path: docs +- admonition +- codehilite +- extra +- pymdownx.superfences: + custom_fences: + - name: mermaid + class: mermaid + format: !!python/name:pymdownx.superfences.fence_code_format '' +- pymdownx.tabbed: + alternate_style: true +extra: + analytics: + provider: google + property: UA-133183413-1 + social: + - icon: fontawesome/brands/github-alt + link: https://github.com/tiangolo/fastapi + - icon: fontawesome/brands/discord + link: https://discord.gg/VQjSZaeJmf + - icon: fontawesome/brands/twitter + link: https://twitter.com/fastapi + - icon: fontawesome/brands/linkedin + link: https://www.linkedin.com/in/tiangolo + - icon: fontawesome/brands/dev + link: https://dev.to/tiangolo + - icon: fontawesome/brands/medium + link: https://medium.com/@tiangolo + - icon: fontawesome/solid/globe + link: https://tiangolo.com + alternate: + - link: / + name: en - English + - link: /az/ + name: az + - link: /de/ + name: de + - link: /es/ + name: es - español + - link: /fa/ + name: fa + - link: /fr/ + name: fr - français + - link: /id/ + name: id + - link: /it/ + name: it - italiano + - link: /ja/ + name: ja - 日本語 + - link: /ko/ + name: ko - 한국어 + - link: /nl/ + name: nl + - link: /pl/ + name: pl + - link: /pt/ + name: pt - português + - link: /ru/ + name: ru - русский язык + - link: /sq/ + name: sq - shqip + - link: /sv/ + name: sv - svenska + - link: /tr/ + name: tr - Türkçe + - link: /uk/ + name: uk - українська мова + - link: /zh/ + name: zh - 汉语 +extra_css: +- https://fastapi.tiangolo.com/css/termynal.css +- https://fastapi.tiangolo.com/css/custom.css +extra_javascript: +- https://fastapi.tiangolo.com/js/termynal.js +- https://fastapi.tiangolo.com/js/custom.js diff --git a/docs/sv/overrides/.gitignore b/docs/sv/overrides/.gitignore new file mode 100644 index 000000000..e69de29bb diff --git a/docs/tr/mkdocs.yml b/docs/tr/mkdocs.yml index 74186033c..5371cb71f 100644 --- a/docs/tr/mkdocs.yml +++ b/docs/tr/mkdocs.yml @@ -5,14 +5,14 @@ theme: name: material custom_dir: overrides palette: - - media: "(prefers-color-scheme: light)" + - media: '(prefers-color-scheme: light)' scheme: default primary: teal accent: amber toggle: icon: material/lightbulb name: Switch to light mode - - media: "(prefers-color-scheme: dark)" + - media: '(prefers-color-scheme: dark)' scheme: slate primary: teal accent: amber @@ -53,6 +53,7 @@ nav: - pt: /pt/ - ru: /ru/ - sq: /sq/ + - sv: /sv/ - tr: /tr/ - uk: /uk/ - zh: /zh/ @@ -126,6 +127,8 @@ extra: name: ru - русский язык - link: /sq/ name: sq - shqip + - link: /sv/ + name: sv - svenska - link: /tr/ name: tr - Türkçe - link: /uk/ diff --git a/docs/uk/mkdocs.yml b/docs/uk/mkdocs.yml index ddf299d8b..fd371765a 100644 --- a/docs/uk/mkdocs.yml +++ b/docs/uk/mkdocs.yml @@ -5,14 +5,14 @@ theme: name: material custom_dir: overrides palette: - - media: "(prefers-color-scheme: light)" + - media: '(prefers-color-scheme: light)' scheme: default primary: teal accent: amber toggle: icon: material/lightbulb name: Switch to light mode - - media: "(prefers-color-scheme: dark)" + - media: '(prefers-color-scheme: dark)' scheme: slate primary: teal accent: amber @@ -53,6 +53,7 @@ nav: - pt: /pt/ - ru: /ru/ - sq: /sq/ + - sv: /sv/ - tr: /tr/ - uk: /uk/ - zh: /zh/ @@ -123,6 +124,8 @@ extra: name: ru - русский язык - link: /sq/ name: sq - shqip + - link: /sv/ + name: sv - svenska - link: /tr/ name: tr - Türkçe - link: /uk/ diff --git a/docs/zh/mkdocs.yml b/docs/zh/mkdocs.yml index a72ecb657..c1c35c6ed 100644 --- a/docs/zh/mkdocs.yml +++ b/docs/zh/mkdocs.yml @@ -5,14 +5,14 @@ theme: name: material custom_dir: overrides palette: - - media: "(prefers-color-scheme: light)" + - media: '(prefers-color-scheme: light)' scheme: default primary: teal accent: amber toggle: icon: material/lightbulb name: Switch to light mode - - media: "(prefers-color-scheme: dark)" + - media: '(prefers-color-scheme: dark)' scheme: slate primary: teal accent: amber @@ -53,6 +53,7 @@ nav: - pt: /pt/ - ru: /ru/ - sq: /sq/ + - sv: /sv/ - tr: /tr/ - uk: /uk/ - zh: /zh/ @@ -174,6 +175,8 @@ extra: name: ru - русский язык - link: /sq/ name: sq - shqip + - link: /sv/ + name: sv - svenska - link: /tr/ name: tr - Türkçe - link: /uk/ From 2226f962ffffeae09d959ab96f65d6692c1ec87a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Thu, 14 Jul 2022 13:45:26 +0200 Subject: [PATCH 28/52] =?UTF-8?q?=F0=9F=94=A7=20Add=20config=20for=20Swedi?= =?UTF-8?q?sh=20translations=20notification=20(#5147)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/actions/notify-translations/app/translations.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/actions/notify-translations/app/translations.yml b/.github/actions/notify-translations/app/translations.yml index 0e5093f3a..a68167ff8 100644 --- a/.github/actions/notify-translations/app/translations.yml +++ b/.github/actions/notify-translations/app/translations.yml @@ -15,3 +15,4 @@ id: 3717 az: 3994 nl: 4701 uz: 4883 +sv: 5146 From 86fb017aadf973200e7a0f79281d73fb5bc4ccc8 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 14 Jul 2022 11:45:51 +0000 Subject: [PATCH 29/52] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index eb078f165..0c97db5ca 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,7 @@ ## Latest Changes +* 🌐 Start of Swedish translation. PR [#5062](https://github.com/tiangolo/fastapi/pull/5062) by [@MrRawbin](https://github.com/MrRawbin). * 🌐 Add Japanese translation for `docs/ja/docs/advanced/index.md`. PR [#5043](https://github.com/tiangolo/fastapi/pull/5043) by [@wakabame](https://github.com/wakabame). * 🌐🇵🇱 Add Polish translation for `docs/pl/docs/tutorial/first-steps.md`. PR [#5024](https://github.com/tiangolo/fastapi/pull/5024) by [@Valaraucoo](https://github.com/Valaraucoo). * ⬆ Bump actions/checkout from 2 to 3. PR [#5133](https://github.com/tiangolo/fastapi/pull/5133) by [@dependabot[bot]](https://github.com/apps/dependabot). From 801e90863a51108ea4e363d3836b095a48c264df Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 14 Jul 2022 11:46:23 +0000 Subject: [PATCH 30/52] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index 0c97db5ca..714401fde 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,7 @@ ## Latest Changes +* 🔧 Add config for Swedish translations notification. PR [#5147](https://github.com/tiangolo/fastapi/pull/5147) by [@tiangolo](https://github.com/tiangolo). * 🌐 Start of Swedish translation. PR [#5062](https://github.com/tiangolo/fastapi/pull/5062) by [@MrRawbin](https://github.com/MrRawbin). * 🌐 Add Japanese translation for `docs/ja/docs/advanced/index.md`. PR [#5043](https://github.com/tiangolo/fastapi/pull/5043) by [@wakabame](https://github.com/wakabame). * 🌐🇵🇱 Add Polish translation for `docs/pl/docs/tutorial/first-steps.md`. PR [#5024](https://github.com/tiangolo/fastapi/pull/5024) by [@Valaraucoo](https://github.com/Valaraucoo). From 85dc173d192b5514cd81bc1e6f62dc3b867930fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Thu, 14 Jul 2022 14:37:37 +0200 Subject: [PATCH 31/52] =?UTF-8?q?=F0=9F=94=A7=20Update=20Jina=20sponsor=20?= =?UTF-8?q?badges=20(#5151)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 🍱 Update Jina badges * 💄 Tweak sponsors badge CSS * 🔧 Update Jina sponsor * 📝 Re-generate README --- README.md | 2 +- docs/en/data/sponsors.yml | 6 +++--- docs/en/docs/css/custom.css | 2 +- docs/en/docs/img/sponsors/jina-ai-banner.png | Bin 0 -> 14153 bytes docs/en/docs/img/sponsors/jina-ai.png | Bin 0 -> 26112 bytes docs/en/overrides/main.html | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) create mode 100644 docs/en/docs/img/sponsors/jina-ai-banner.png create mode 100644 docs/en/docs/img/sponsors/jina-ai.png diff --git a/README.md b/README.md index 505005ae9..bcea9fe73 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ The key features are: - + diff --git a/docs/en/data/sponsors.yml b/docs/en/data/sponsors.yml index c99c4b57a..efd0f00f8 100644 --- a/docs/en/data/sponsors.yml +++ b/docs/en/data/sponsors.yml @@ -1,7 +1,7 @@ gold: - - url: https://bit.ly/2QSouzH - title: "Jina: build neural search-as-a-service for any kind of data in just minutes." - img: https://fastapi.tiangolo.com/img/sponsors/jina.svg + - url: https://bit.ly/3PjOZqc + title: "DiscoArt: Create compelling Disco Diffusion artworks in just one line" + img: https://fastapi.tiangolo.com/img/sponsors/jina-ai.png - url: https://cryptapi.io/ title: "CryptAPI: Your easy to use, secure and privacy oriented payment gateway." img: https://fastapi.tiangolo.com/img/sponsors/cryptapi.svg diff --git a/docs/en/docs/css/custom.css b/docs/en/docs/css/custom.css index 7d3503e49..42b752bcf 100644 --- a/docs/en/docs/css/custom.css +++ b/docs/en/docs/css/custom.css @@ -94,7 +94,7 @@ a.announce-link:hover { .announce-wrapper .sponsor-badge { display: block; position: absolute; - top: -5px; + top: -10px; right: 0; font-size: 0.5rem; color: #999; diff --git a/docs/en/docs/img/sponsors/jina-ai-banner.png b/docs/en/docs/img/sponsors/jina-ai-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..3ac6b44adcf4b0c28df130ca0e16c674ea43e229 GIT binary patch literal 14153 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 T7SUJA00000NkvXXu0mjfJ5Bsy literal 0 HcmV?d00001 diff --git a/docs/en/docs/img/sponsors/jina-ai.png b/docs/en/docs/img/sponsors/jina-ai.png new file mode 100644 index 0000000000000000000000000000000000000000..d6b0bfb4ec24acce9ab9cb4ca46740bb16c702ae GIT binary patch literal 26112 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 X@XdfIPq1E700000NkvXXu0mjfyQ^GY literal 0 HcmV?d00001 diff --git a/docs/en/overrides/main.html b/docs/en/overrides/main.html index 9bed0253f..5c7029b85 100644 --- a/docs/en/overrides/main.html +++ b/docs/en/overrides/main.html @@ -29,9 +29,9 @@
From e3339f6770eaaa35e89ec6c1df917a5fd02d6f39 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 14 Jul 2022 12:38:22 +0000 Subject: [PATCH 32/52] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index 714401fde..84b511c0a 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,7 @@ ## Latest Changes +* 🔧 Update Jina sponsor badges. PR [#5151](https://github.com/tiangolo/fastapi/pull/5151) by [@tiangolo](https://github.com/tiangolo). * 🔧 Add config for Swedish translations notification. PR [#5147](https://github.com/tiangolo/fastapi/pull/5147) by [@tiangolo](https://github.com/tiangolo). * 🌐 Start of Swedish translation. PR [#5062](https://github.com/tiangolo/fastapi/pull/5062) by [@MrRawbin](https://github.com/MrRawbin). * 🌐 Add Japanese translation for `docs/ja/docs/advanced/index.md`. PR [#5043](https://github.com/tiangolo/fastapi/pull/5043) by [@wakabame](https://github.com/wakabame). From ec2ec482930b0683b5dd6aa4f580c18f1bdd2f23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Thu, 14 Jul 2022 16:56:40 +0200 Subject: [PATCH 33/52] =?UTF-8?q?=F0=9F=91=A5=20Update=20FastAPI=20People?= =?UTF-8?q?=20(#5154)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: github-actions --- docs/en/data/github_sponsors.yml | 197 +++++++++++++++++-------- docs/en/data/people.yml | 246 +++++++++++++++++-------------- 2 files changed, 269 insertions(+), 174 deletions(-) diff --git a/docs/en/data/github_sponsors.yml b/docs/en/data/github_sponsors.yml index db4a9acc6..6c1efcbbd 100644 --- a/docs/en/data/github_sponsors.yml +++ b/docs/en/data/github_sponsors.yml @@ -1,16 +1,25 @@ sponsors: -- - login: cryptapi +- - login: github + avatarUrl: https://avatars.githubusercontent.com/u/9919?v=4 + url: https://github.com/github +- - login: Doist + avatarUrl: https://avatars.githubusercontent.com/u/2565372?v=4 + url: https://github.com/Doist + - login: cryptapi avatarUrl: https://avatars.githubusercontent.com/u/44925437?u=61369138589bc7fee6c417f3fbd50fbd38286cc4&v=4 url: https://github.com/cryptapi + - login: BLUE-DEVIL1134 + avatarUrl: https://avatars.githubusercontent.com/u/55914808?u=f283d674fce31be7fb3ed2665b0f20d89958e541&v=4 + url: https://github.com/BLUE-DEVIL1134 - login: jina-ai avatarUrl: https://avatars.githubusercontent.com/u/60539444?v=4 url: https://github.com/jina-ai - login: DropbaseHQ avatarUrl: https://avatars.githubusercontent.com/u/85367855?v=4 url: https://github.com/DropbaseHQ -- - login: sushi2all - avatarUrl: https://avatars.githubusercontent.com/u/1043732?v=4 - url: https://github.com/sushi2all +- - login: ObliviousAI + avatarUrl: https://avatars.githubusercontent.com/u/65656077?v=4 + url: https://github.com/ObliviousAI - login: chaserowbotham avatarUrl: https://avatars.githubusercontent.com/u/97751084?v=4 url: https://github.com/chaserowbotham @@ -32,9 +41,6 @@ sponsors: - login: VincentParedes avatarUrl: https://avatars.githubusercontent.com/u/103889729?v=4 url: https://github.com/VincentParedes -- - login: plocher - avatarUrl: https://avatars.githubusercontent.com/u/1082871?v=4 - url: https://github.com/plocher - - login: InesIvanova avatarUrl: https://avatars.githubusercontent.com/u/22920417?u=409882ec1df6dbd77455788bb383a8de223dbf6f&v=4 url: https://github.com/InesIvanova @@ -53,7 +59,10 @@ sponsors: - login: BoostryJP avatarUrl: https://avatars.githubusercontent.com/u/57932412?v=4 url: https://github.com/BoostryJP -- - login: johnadjei +- - login: nnfuzzy + avatarUrl: https://avatars.githubusercontent.com/u/687670?v=4 + url: https://github.com/nnfuzzy + - login: johnadjei avatarUrl: https://avatars.githubusercontent.com/u/767860?v=4 url: https://github.com/johnadjei - login: HiredScore @@ -68,9 +77,6 @@ sponsors: - login: RodneyU215 avatarUrl: https://avatars.githubusercontent.com/u/3329665?u=ec6a9adf8e7e8e306eed7d49687c398608d1604f&v=4 url: https://github.com/RodneyU215 - - login: grillazz - avatarUrl: https://avatars.githubusercontent.com/u/3415861?u=0b32b7073ae1ab8b7f6d2db0188c2e1e357ff451&v=4 - url: https://github.com/grillazz - login: tizz98 avatarUrl: https://avatars.githubusercontent.com/u/5739698?u=f095a3659e3a8e7c69ccd822696990b521ea25f9&v=4 url: https://github.com/tizz98 @@ -80,30 +86,36 @@ sponsors: - login: marutoraman avatarUrl: https://avatars.githubusercontent.com/u/33813153?u=2d0522bceba0b8b69adf1f2db866503bd96f944e&v=4 url: https://github.com/marutoraman + - login: leynier + avatarUrl: https://avatars.githubusercontent.com/u/36774373?u=2284831c821307de562ebde5b59014d5416c7e0d&v=4 + url: https://github.com/leynier - login: mainframeindustries avatarUrl: https://avatars.githubusercontent.com/u/55092103?v=4 url: https://github.com/mainframeindustries - login: A-Edge avatarUrl: https://avatars.githubusercontent.com/u/59514131?v=4 url: https://github.com/A-Edge + - login: DelfinaCare + avatarUrl: https://avatars.githubusercontent.com/u/83734439?v=4 + url: https://github.com/DelfinaCare +- - login: povilasb + avatarUrl: https://avatars.githubusercontent.com/u/1213442?u=b11f58ed6ceea6e8297c9b310030478ebdac894d&v=4 + url: https://github.com/povilasb - - login: Kludex avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=62adc405ef418f4b6c8caa93d3eb8ab107bc4927&v=4 url: https://github.com/Kludex - login: samuelcolvin avatarUrl: https://avatars.githubusercontent.com/u/4039449?u=807390ba9cfe23906c3bf8a0d56aaca3cf2bfa0d&v=4 url: https://github.com/samuelcolvin - - login: jokull - avatarUrl: https://avatars.githubusercontent.com/u/701?u=0532b62166893d5160ef795c4c8b7512d971af05&v=4 - url: https://github.com/jokull - login: jefftriplett avatarUrl: https://avatars.githubusercontent.com/u/50527?u=af1ddfd50f6afd6d99f333ba2ac8d0a5b245ea74&v=4 url: https://github.com/jefftriplett + - login: medecau + avatarUrl: https://avatars.githubusercontent.com/u/59870?u=f9341c95adaba780828162fd4c7442357ecfcefa&v=4 + url: https://github.com/medecau - login: kamalgill avatarUrl: https://avatars.githubusercontent.com/u/133923?u=0df9181d97436ce330e9acf90ab8a54b7022efe7&v=4 url: https://github.com/kamalgill - - login: jsutton - avatarUrl: https://avatars.githubusercontent.com/u/280777?v=4 - url: https://github.com/jsutton - login: deserat avatarUrl: https://avatars.githubusercontent.com/u/299332?v=4 url: https://github.com/deserat @@ -117,14 +129,17 @@ sponsors: avatarUrl: https://avatars.githubusercontent.com/u/630670?u=507d8577b4b3670546b449c4c2ccbc5af40d72f7&v=4 url: https://github.com/koxudaxi - login: jqueguiner - avatarUrl: https://avatars.githubusercontent.com/u/690878?u=e4835b2a985a0f2d52018e4926cb5a58c26a62e8&v=4 + avatarUrl: https://avatars.githubusercontent.com/u/690878?u=bd65cc1f228ce6455e56dfaca3ef47c33bc7c3b0&v=4 url: https://github.com/jqueguiner + - login: alexsantos + avatarUrl: https://avatars.githubusercontent.com/u/932219?v=4 + url: https://github.com/alexsantos + - login: tcsmith + avatarUrl: https://avatars.githubusercontent.com/u/989034?u=7d8d741552b3279e8f4d3878679823a705a46f8f&v=4 + url: https://github.com/tcsmith - login: ltieman avatarUrl: https://avatars.githubusercontent.com/u/1084689?u=e69b17de17cb3ca141a17daa7ccbe173ceb1eb17&v=4 url: https://github.com/ltieman - - login: westonsteimel - avatarUrl: https://avatars.githubusercontent.com/u/1593939?u=0f2c0e3647f916fe295d62fa70da7a4c177115e3&v=4 - url: https://github.com/westonsteimel - login: corleyma avatarUrl: https://avatars.githubusercontent.com/u/2080732?u=aed2ff652294a87d666b1c3f6dbe98104db76d26&v=4 url: https://github.com/corleyma @@ -140,6 +155,9 @@ sponsors: - login: Shark009 avatarUrl: https://avatars.githubusercontent.com/u/3163309?u=0c6f4091b0eda05c44c390466199826e6dc6e431&v=4 url: https://github.com/Shark009 + - login: grillazz + avatarUrl: https://avatars.githubusercontent.com/u/3415861?u=0b32b7073ae1ab8b7f6d2db0188c2e1e357ff451&v=4 + url: https://github.com/grillazz - login: dblackrun avatarUrl: https://avatars.githubusercontent.com/u/3528486?v=4 url: https://github.com/dblackrun @@ -152,6 +170,9 @@ sponsors: - login: peterHoburg avatarUrl: https://avatars.githubusercontent.com/u/3860655?u=f55f47eb2d6a9b495e806ac5a044e3ae01ccc1fa&v=4 url: https://github.com/peterHoburg + - login: gorhack + avatarUrl: https://avatars.githubusercontent.com/u/4141690?u=ec119ebc4bdf00a7bc84657a71aa17834f4f27f3&v=4 + url: https://github.com/gorhack - login: jaredtrog avatarUrl: https://avatars.githubusercontent.com/u/4381365?v=4 url: https://github.com/jaredtrog @@ -182,6 +203,9 @@ sponsors: - login: pkucmus avatarUrl: https://avatars.githubusercontent.com/u/6347418?u=98f5918b32e214a168a2f5d59b0b8ebdf57dca0d&v=4 url: https://github.com/pkucmus + - login: ioalloc + avatarUrl: https://avatars.githubusercontent.com/u/6737824?u=6c3a31449f1c92064287171aa9ebe6363a0c9b7b&v=4 + url: https://github.com/ioalloc - login: s3ich4n avatarUrl: https://avatars.githubusercontent.com/u/6926298?u=ba3025d698e1c986655e776ae383a3d60d9d578e&v=4 url: https://github.com/s3ich4n @@ -200,6 +224,9 @@ sponsors: - login: Ge0f3 avatarUrl: https://avatars.githubusercontent.com/u/11887760?u=ccd80f1ac36dcb8517ef5c4e702e8cc5a80cad2f&v=4 url: https://github.com/Ge0f3 + - login: svats2k + avatarUrl: https://avatars.githubusercontent.com/u/12378398?u=ecf28c19f61052e664bdfeb2391f8107d137915c&v=4 + url: https://github.com/svats2k - login: gokulyc avatarUrl: https://avatars.githubusercontent.com/u/13468848?u=269f269d3e70407b5fb80138c52daba7af783997&v=4 url: https://github.com/gokulyc @@ -215,9 +242,6 @@ sponsors: - login: wedwardbeck avatarUrl: https://avatars.githubusercontent.com/u/19333237?u=1de4ae2bf8d59eb4c013f21d863cbe0f2010575f&v=4 url: https://github.com/wedwardbeck - - login: linusg - avatarUrl: https://avatars.githubusercontent.com/u/19366641?u=125e390abef8fff3b3b0d370c369cba5d7fd4c67&v=4 - url: https://github.com/linusg - login: stradivari96 avatarUrl: https://avatars.githubusercontent.com/u/19752586?u=255f5f06a768f518b20cebd6963e840ac49294fd&v=4 url: https://github.com/stradivari96 @@ -230,6 +254,9 @@ sponsors: - login: shuheng-liu avatarUrl: https://avatars.githubusercontent.com/u/22414322?u=813c45f30786c6b511b21a661def025d8f7b609e&v=4 url: https://github.com/shuheng-liu + - login: Joeriksson + avatarUrl: https://avatars.githubusercontent.com/u/25037079?v=4 + url: https://github.com/Joeriksson - login: cometa-haley avatarUrl: https://avatars.githubusercontent.com/u/25950317?u=cec1a3e0643b785288ae8260cc295a85ab344995&v=4 url: https://github.com/cometa-haley @@ -258,23 +285,32 @@ sponsors: avatarUrl: https://avatars.githubusercontent.com/u/35070513?u=b48c05f669d1ea1d329f90dc70e45f10b569ef55&v=4 url: https://github.com/guligon90 - login: ybressler - avatarUrl: https://avatars.githubusercontent.com/u/40807730?u=6621dc9ab53b697912ab2a32211bb29ae90a9112&v=4 + avatarUrl: https://avatars.githubusercontent.com/u/40807730?u=41e2c00f1eebe3c402635f0325e41b4e6511462c&v=4 url: https://github.com/ybressler - - login: iamkarshe - avatarUrl: https://avatars.githubusercontent.com/u/43641892?u=d08c901b359c931784501740610d416558ff3e24&v=4 - url: https://github.com/iamkarshe + - login: ddilidili + avatarUrl: https://avatars.githubusercontent.com/u/42176885?u=c0a849dde06987434653197b5f638d3deb55fc6c&v=4 + url: https://github.com/ddilidili - login: dbanty avatarUrl: https://avatars.githubusercontent.com/u/43723790?u=9bcce836bbce55835291c5b2ac93a4e311f4b3c3&v=4 url: https://github.com/dbanty + - login: VictorCalderon + avatarUrl: https://avatars.githubusercontent.com/u/44529243?u=cea69884f826a29aff1415493405209e0706d07a&v=4 + url: https://github.com/VictorCalderon + - login: arthuRHD + avatarUrl: https://avatars.githubusercontent.com/u/48015496?u=05a0d5b8b9320eeb7990d35c9337b823f269d2ff&v=4 + url: https://github.com/arthuRHD - login: rafsaf - avatarUrl: https://avatars.githubusercontent.com/u/51059348?u=be9f06b8ced2d2b677297decc781fa8ce4f7ddbd&v=4 + avatarUrl: https://avatars.githubusercontent.com/u/51059348?u=f8f0d6d6e90fac39fa786228158ba7f013c74271&v=4 url: https://github.com/rafsaf - login: dudikbender avatarUrl: https://avatars.githubusercontent.com/u/53487583?u=494f85229115076121b3639a3806bbac1c6ae7f6&v=4 url: https://github.com/dudikbender - login: daisuke8000 - avatarUrl: https://avatars.githubusercontent.com/u/55035595?u=5025e379cd3655ae1a96039efc85223a873d2e38&v=4 + avatarUrl: https://avatars.githubusercontent.com/u/55035595?u=23a3f2f2925ad3efc27c7420041622b7f5fd2b79&v=4 url: https://github.com/daisuke8000 + - login: dazeddd + avatarUrl: https://avatars.githubusercontent.com/u/59472056?u=7a1b668449bf8b448db13e4c575576d24d7d658b&v=4 + url: https://github.com/dazeddd - login: yakkonaut avatarUrl: https://avatars.githubusercontent.com/u/60633704?u=90a71fd631aa998ba4a96480788f017c9904e07b&v=4 url: https://github.com/yakkonaut @@ -291,11 +327,8 @@ sponsors: avatarUrl: https://avatars.githubusercontent.com/u/70378377?u=6d1814195c0de7162820eaad95a25b423a3869c0&v=4 url: https://github.com/daverin - login: anthonycepeda - avatarUrl: https://avatars.githubusercontent.com/u/72019805?u=892f700c79f9732211bd5221bf16eec32356a732&v=4 + avatarUrl: https://avatars.githubusercontent.com/u/72019805?u=4252c6b6dc5024af502a823a3ac5e7a03a69963f&v=4 url: https://github.com/anthonycepeda - - login: NinaHwang - avatarUrl: https://avatars.githubusercontent.com/u/79563565?u=1741703bd6c8f491503354b363a86e879b4c1cab&v=4 - url: https://github.com/NinaHwang - login: dotlas avatarUrl: https://avatars.githubusercontent.com/u/88832003?v=4 url: https://github.com/dotlas @@ -347,27 +380,27 @@ sponsors: - login: hardbyte avatarUrl: https://avatars.githubusercontent.com/u/855189?u=aa29e92f34708814d6b67fcd47ca4cf2ce1c04ed&v=4 url: https://github.com/hardbyte + - login: browniebroke + avatarUrl: https://avatars.githubusercontent.com/u/861044?u=5abfca5588f3e906b31583d7ee62f6de4b68aa24&v=4 + url: https://github.com/browniebroke - login: janfilips avatarUrl: https://avatars.githubusercontent.com/u/870699?u=6034d81731ecb41ae5c717e56a901ed46fc039a8&v=4 url: https://github.com/janfilips - - login: scari - avatarUrl: https://avatars.githubusercontent.com/u/964251?v=4 - url: https://github.com/scari + - login: woodrad + avatarUrl: https://avatars.githubusercontent.com/u/1410765?u=86707076bb03d143b3b11afc1743d2aa496bd8bf&v=4 + url: https://github.com/woodrad - login: Pytlicek avatarUrl: https://avatars.githubusercontent.com/u/1430522?u=169dba3bfbc04ed214a914640ff435969f19ddb3&v=4 url: https://github.com/Pytlicek - - login: Celeborn2BeAlive - avatarUrl: https://avatars.githubusercontent.com/u/1659465?u=944517e4db0f6df65070074e81cabdad9c8a434b&v=4 - url: https://github.com/Celeborn2BeAlive + - login: allen0125 + avatarUrl: https://avatars.githubusercontent.com/u/1448456?u=d4feb3d06a61baa4a69857ce371cc53fb4dffd2c&v=4 + url: https://github.com/allen0125 - login: WillHogan avatarUrl: https://avatars.githubusercontent.com/u/1661551?u=7036c064cf29781470573865264ec8e60b6b809f&v=4 url: https://github.com/WillHogan - login: cbonoz avatarUrl: https://avatars.githubusercontent.com/u/2351087?u=fd3e8030b2cc9fbfbb54a65e9890c548a016f58b&v=4 url: https://github.com/cbonoz - - login: Abbe98 - avatarUrl: https://avatars.githubusercontent.com/u/2631719?u=8a064aba9a710229ad28c616549d81a24191a5df&v=4 - url: https://github.com/Abbe98 - login: rglsk avatarUrl: https://avatars.githubusercontent.com/u/2768101?u=e349c88673f2155fe021331377c656a9d74bcc25&v=4 url: https://github.com/rglsk @@ -386,6 +419,9 @@ sponsors: - login: Alisa-lisa avatarUrl: https://avatars.githubusercontent.com/u/4137964?u=e7e393504f554f4ff15863a1e01a5746863ef9ce&v=4 url: https://github.com/Alisa-lisa + - login: danielunderwood + avatarUrl: https://avatars.githubusercontent.com/u/4472301?v=4 + url: https://github.com/danielunderwood - login: unredundant avatarUrl: https://avatars.githubusercontent.com/u/5607577?u=57dd0023365bec03f4fc566df6b81bc0a264a47d&v=4 url: https://github.com/unredundant @@ -401,9 +437,6 @@ sponsors: - login: yenchenLiu avatarUrl: https://avatars.githubusercontent.com/u/9199638?u=8cdf5ae507448430d90f6f3518d1665a23afe99b&v=4 url: https://github.com/yenchenLiu - - login: VivianSolide - avatarUrl: https://avatars.githubusercontent.com/u/9358572?u=4a38ef72dd39e8b262bd5ab819992128b55c52b4&v=4 - url: https://github.com/VivianSolide - login: xncbf avatarUrl: https://avatars.githubusercontent.com/u/9462045?u=866a1311e4bd3ec5ae84185c4fcc99f397c883d7&v=4 url: https://github.com/xncbf @@ -425,12 +458,24 @@ sponsors: - login: logan-connolly avatarUrl: https://avatars.githubusercontent.com/u/16244943?u=8ae66dfbba936463cc8aa0dd7a6d2b4c0cc757eb&v=4 url: https://github.com/logan-connolly + - login: sanghunka + avatarUrl: https://avatars.githubusercontent.com/u/16280020?u=960f5426ae08303229f045b9cc2ed463dcd41c15&v=4 + url: https://github.com/sanghunka + - login: stevenayers + avatarUrl: https://avatars.githubusercontent.com/u/16361214?u=098b797d8d48afb8cd964b717847943b61d24a6d&v=4 + url: https://github.com/stevenayers - login: cdsre avatarUrl: https://avatars.githubusercontent.com/u/16945936?v=4 url: https://github.com/cdsre + - login: aprilcoskun + avatarUrl: https://avatars.githubusercontent.com/u/17393603?u=29145243b4c7fadc80c7099471309cc2c04b6bcc&v=4 + url: https://github.com/aprilcoskun - login: jangia avatarUrl: https://avatars.githubusercontent.com/u/17927101?u=9261b9bb0c3e3bb1ecba43e8915dc58d8c9a077e&v=4 url: https://github.com/jangia + - login: yannicschroeer + avatarUrl: https://avatars.githubusercontent.com/u/22749683?u=4df05a7296c207b91c5d7c7a11c29df5ab313e2b&v=4 + url: https://github.com/yannicschroeer - login: ghandic avatarUrl: https://avatars.githubusercontent.com/u/23500353?u=e2e1d736f924d9be81e8bfc565b6d8836ba99773&v=4 url: https://github.com/ghandic @@ -440,9 +485,12 @@ sponsors: - login: mertguvencli avatarUrl: https://avatars.githubusercontent.com/u/29762151?u=16a906d90df96c8cff9ea131a575c4bc171b1523&v=4 url: https://github.com/mertguvencli - - login: dwreeves - avatarUrl: https://avatars.githubusercontent.com/u/31971762?u=69732aba05aa5cf0780866349ebe109cf632b047&v=4 - url: https://github.com/dwreeves + - login: elisoncrum + avatarUrl: https://avatars.githubusercontent.com/u/30413278?u=531190845bb0935dbc1e4f017cda3cb7b4dd0e54&v=4 + url: https://github.com/elisoncrum + - login: HosamAlmoghraby + avatarUrl: https://avatars.githubusercontent.com/u/32025281?u=aa1b09feabccbf9dc506b81c71155f32d126cefa&v=4 + url: https://github.com/HosamAlmoghraby - login: kitaramu0401 avatarUrl: https://avatars.githubusercontent.com/u/33246506?u=929e6efa2c518033b8097ba524eb5347a069bb3b&v=4 url: https://github.com/kitaramu0401 @@ -452,45 +500,72 @@ sponsors: - login: declon avatarUrl: https://avatars.githubusercontent.com/u/36180226?v=4 url: https://github.com/declon + - login: alvarobartt + avatarUrl: https://avatars.githubusercontent.com/u/36760800?u=ac9ccb8b9164eb5fe7d5276142591aa1b8080daf&v=4 + url: https://github.com/alvarobartt - login: d-e-h-i-o avatarUrl: https://avatars.githubusercontent.com/u/36816716?v=4 url: https://github.com/d-e-h-i-o + - login: ww-daniel-mora + avatarUrl: https://avatars.githubusercontent.com/u/38921751?u=ae14bc1e40f2dd5a9c5741fc0b0dffbd416a5fa9&v=4 + url: https://github.com/ww-daniel-mora + - login: rwxd + avatarUrl: https://avatars.githubusercontent.com/u/40308458?u=9ddf8023ca3326381ba8fb77285ae36598a15de3&v=4 + url: https://github.com/rwxd - login: ilias-ant avatarUrl: https://avatars.githubusercontent.com/u/42189572?u=a2d6121bac4d125d92ec207460fa3f1842d37e66&v=4 url: https://github.com/ilias-ant - login: arrrrrmin avatarUrl: https://avatars.githubusercontent.com/u/43553423?u=fee5739394fea074cb0b66929d070114a5067aae&v=4 url: https://github.com/arrrrrmin - - login: Nephilim-Jack - avatarUrl: https://avatars.githubusercontent.com/u/48372168?u=6f2bb405238d7efc467536fe01f58df6779c58a9&v=4 - url: https://github.com/Nephilim-Jack + - login: BomGard + avatarUrl: https://avatars.githubusercontent.com/u/47395385?u=8e9052f54e0b8dc7285099c438fa29c55a7d6407&v=4 + url: https://github.com/BomGard - login: akanz1 avatarUrl: https://avatars.githubusercontent.com/u/51492342?u=2280f57134118714645e16b535c1a37adf6b369b&v=4 url: https://github.com/akanz1 - - login: rooflexx - avatarUrl: https://avatars.githubusercontent.com/u/58993673?u=f8ba450460f1aea18430ed1e4a3889049a3b4dfa&v=4 - url: https://github.com/rooflexx - - login: denisyao1 - avatarUrl: https://avatars.githubusercontent.com/u/60019356?v=4 - url: https://github.com/denisyao1 + - login: shidenko97 + avatarUrl: https://avatars.githubusercontent.com/u/54946990?u=3fdc0caea36af9217dacf1cc7760c7ed9d67dcfe&v=4 + url: https://github.com/shidenko97 + - login: data-djinn + avatarUrl: https://avatars.githubusercontent.com/u/56449985?u=42146e140806908d49bd59ccc96f222abf587886&v=4 + url: https://github.com/data-djinn + - login: leo-jp-edwards + avatarUrl: https://avatars.githubusercontent.com/u/58213433?u=2c128e8b0794b7a66211cd7d8ebe05db20b7e9c0&v=4 + url: https://github.com/leo-jp-edwards - login: apar-tiwari avatarUrl: https://avatars.githubusercontent.com/u/61064197?v=4 url: https://github.com/apar-tiwari + - login: Vyvy-vi + avatarUrl: https://avatars.githubusercontent.com/u/62864373?u=1a9b0b28779abc2bc9b62cb4d2e44d453973c9c3&v=4 + url: https://github.com/Vyvy-vi - login: 0417taehyun avatarUrl: https://avatars.githubusercontent.com/u/63915557?u=47debaa860fd52c9b98c97ef357ddcec3b3fb399&v=4 url: https://github.com/0417taehyun + - login: realabja + avatarUrl: https://avatars.githubusercontent.com/u/66185192?u=001e2dd9297784f4218997981b4e6fa8357bb70b&v=4 + url: https://github.com/realabja - login: alessio-proietti avatarUrl: https://avatars.githubusercontent.com/u/67370599?u=8ac73db1e18e946a7681f173abdb640516f88515&v=4 url: https://github.com/alessio-proietti + - login: Mr-Sunglasses + avatarUrl: https://avatars.githubusercontent.com/u/81439109?u=a5d0762fdcec26e18a028aef05323de3c6fb195c&v=4 + url: https://github.com/Mr-Sunglasses - - login: backbord avatarUrl: https://avatars.githubusercontent.com/u/6814946?v=4 url: https://github.com/backbord - - login: sadikkuzu - avatarUrl: https://avatars.githubusercontent.com/u/23168063?u=765ed469c44c004560079210ccdad5b29938eaa9&v=4 - url: https://github.com/sadikkuzu - login: gabrielmbmb avatarUrl: https://avatars.githubusercontent.com/u/29572918?u=6d1e00b5d558e96718312ff910a2318f47cc3145&v=4 url: https://github.com/gabrielmbmb - login: danburonline avatarUrl: https://avatars.githubusercontent.com/u/34251194?u=2cad4388c1544e539ecb732d656e42fb07b4ff2d&v=4 url: https://github.com/danburonline + - login: zachspar + avatarUrl: https://avatars.githubusercontent.com/u/41600414?u=edf29c197137f51bace3f19a2ba759662640771f&v=4 + url: https://github.com/zachspar + - login: sownt + avatarUrl: https://avatars.githubusercontent.com/u/44340502?u=c06e3c45fb00a403075172770805fe57ff17b1cf&v=4 + url: https://github.com/sownt + - login: aahouzi + avatarUrl: https://avatars.githubusercontent.com/u/75032370?u=82677ee9cd86b3ccf4e13d9cb6765d8de5713e1e&v=4 + url: https://github.com/aahouzi diff --git a/docs/en/data/people.yml b/docs/en/data/people.yml index 92aab109f..031c1ca4d 100644 --- a/docs/en/data/people.yml +++ b/docs/en/data/people.yml @@ -1,12 +1,12 @@ maintainers: - login: tiangolo - answers: 1243 - prs: 300 - avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=5cad72c846b7aba2e960546af490edc7375dafc4&v=4 + answers: 1248 + prs: 318 + avatarUrl: https://avatars.githubusercontent.com/u/1326112?u=740f11212a731f56798f558ceddb0bd07642afa7&v=4 url: https://github.com/tiangolo experts: - login: Kludex - count: 335 + count: 352 avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=62adc405ef418f4b6c8caa93d3eb8ab107bc4927&v=4 url: https://github.com/Kludex - login: dmontagu @@ -30,19 +30,23 @@ experts: avatarUrl: https://avatars.githubusercontent.com/u/331403?v=4 url: https://github.com/phy25 - login: raphaelauv - count: 71 + count: 77 avatarUrl: https://avatars.githubusercontent.com/u/10202690?u=e6f86f5c0c3026a15d6b51792fa3e532b12f1371&v=4 url: https://github.com/raphaelauv - login: ArcLightSlavik count: 71 avatarUrl: https://avatars.githubusercontent.com/u/31127044?u=b0f2c37142f4b762e41ad65dc49581813422bd71&v=4 url: https://github.com/ArcLightSlavik +- login: JarroVGIT + count: 68 + avatarUrl: https://avatars.githubusercontent.com/u/13659033?u=e8bea32d07a5ef72f7dde3b2079ceb714923ca05&v=4 + url: https://github.com/JarroVGIT - login: falkben count: 58 avatarUrl: https://avatars.githubusercontent.com/u/653031?u=0c8d8f33d87f1aa1a6488d3f02105e9abc838105&v=4 url: https://github.com/falkben - login: sm-Fifteen - count: 48 + count: 49 avatarUrl: https://avatars.githubusercontent.com/u/516999?u=437c0c5038558c67e887ccd863c1ba0f846c03da&v=4 url: https://github.com/sm-Fifteen - login: insomnes @@ -53,22 +57,22 @@ experts: count: 43 avatarUrl: https://avatars.githubusercontent.com/u/27180793?u=5cf2877f50b3eb2bc55086089a78a36f07042889&v=4 url: https://github.com/Dustyposa +- login: adriangb + count: 40 + avatarUrl: https://avatars.githubusercontent.com/u/1755071?u=81f0262df34e1460ca546fbd0c211169c2478532&v=4 + url: https://github.com/adriangb +- login: jgould22 + count: 40 + avatarUrl: https://avatars.githubusercontent.com/u/4335847?u=ed77f67e0bb069084639b24d812dbb2a2b1dc554&v=4 + url: https://github.com/jgould22 - login: includeamin count: 39 avatarUrl: https://avatars.githubusercontent.com/u/11836741?u=8bd5ef7e62fe6a82055e33c4c0e0a7879ff8cfb6&v=4 url: https://github.com/includeamin -- login: jgould22 - count: 38 - avatarUrl: https://avatars.githubusercontent.com/u/4335847?u=ed77f67e0bb069084639b24d812dbb2a2b1dc554&v=4 - url: https://github.com/jgould22 - login: STeveShary count: 37 avatarUrl: https://avatars.githubusercontent.com/u/5167622?u=de8f597c81d6336fcebc37b32dfd61a3f877160c&v=4 url: https://github.com/STeveShary -- login: adriangb - count: 36 - avatarUrl: https://avatars.githubusercontent.com/u/1755071?u=81f0262df34e1460ca546fbd0c211169c2478532&v=4 - url: https://github.com/adriangb - login: prostomarkeloff count: 33 avatarUrl: https://avatars.githubusercontent.com/u/28061158?u=72309cc1f2e04e40fa38b29969cb4e9d3f722e7b&v=4 @@ -81,18 +85,22 @@ experts: count: 31 avatarUrl: https://avatars.githubusercontent.com/u/31960541?u=47f4829c77f4962ab437ffb7995951e41eeebe9b&v=4 url: https://github.com/krishnardt +- login: chbndrhnns + count: 30 + avatarUrl: https://avatars.githubusercontent.com/u/7534547?v=4 + url: https://github.com/chbndrhnns - login: wshayes count: 29 avatarUrl: https://avatars.githubusercontent.com/u/365303?u=07ca03c5ee811eb0920e633cc3c3db73dbec1aa5&v=4 url: https://github.com/wshayes -- login: chbndrhnns - count: 28 - avatarUrl: https://avatars.githubusercontent.com/u/7534547?v=4 - url: https://github.com/chbndrhnns - login: panla - count: 26 + count: 27 avatarUrl: https://avatars.githubusercontent.com/u/41326348?u=ba2fda6b30110411ecbf406d187907e2b420ac19&v=4 url: https://github.com/panla +- login: acidjunk + count: 25 + avatarUrl: https://avatars.githubusercontent.com/u/685002?u=b5094ab4527fc84b006c0ac9ff54367bdebb2267&v=4 + url: https://github.com/acidjunk - login: ghandic count: 25 avatarUrl: https://avatars.githubusercontent.com/u/23500353?u=e2e1d736f924d9be81e8bfc565b6d8836ba99773&v=4 @@ -121,14 +129,18 @@ experts: count: 19 avatarUrl: https://avatars.githubusercontent.com/u/24581770?v=4 url: https://github.com/retnikt -- login: acidjunk - count: 18 - avatarUrl: https://avatars.githubusercontent.com/u/685002?u=b5094ab4527fc84b006c0ac9ff54367bdebb2267&v=4 - url: https://github.com/acidjunk +- login: odiseo0 + count: 19 + avatarUrl: https://avatars.githubusercontent.com/u/87550035?u=ab724eae71c3fe1cf81e8dc76e73415da926ef7d&v=4 + url: https://github.com/odiseo0 - login: Hultner count: 18 avatarUrl: https://avatars.githubusercontent.com/u/2669034?u=115e53df959309898ad8dc9443fbb35fee71df07&v=4 url: https://github.com/Hultner +- login: rafsaf + count: 18 + avatarUrl: https://avatars.githubusercontent.com/u/51059348?u=f8f0d6d6e90fac39fa786228158ba7f013c74271&v=4 + url: https://github.com/rafsaf - login: jorgerpo count: 17 avatarUrl: https://avatars.githubusercontent.com/u/12537771?u=7444d20019198e34911082780cc7ad73f2b97cb3&v=4 @@ -141,10 +153,6 @@ experts: count: 17 avatarUrl: https://avatars.githubusercontent.com/u/1765494?u=5b1ab7c582db4b4016fa31affe977d10af108ad4&v=4 url: https://github.com/harunyasar -- login: rafsaf - count: 17 - avatarUrl: https://avatars.githubusercontent.com/u/51059348?u=be9f06b8ced2d2b677297decc781fa8ce4f7ddbd&v=4 - url: https://github.com/rafsaf - login: waynerv count: 16 avatarUrl: https://avatars.githubusercontent.com/u/39515546?u=ec35139777597cdbbbddda29bf8b9d4396b429a9&v=4 @@ -153,6 +161,14 @@ experts: count: 16 avatarUrl: https://avatars.githubusercontent.com/u/41964673?u=9f2174f9d61c15c6e3a4c9e3aeee66f711ce311f&v=4 url: https://github.com/dstlny +- login: jonatasoli + count: 15 + avatarUrl: https://avatars.githubusercontent.com/u/26334101?u=071c062d2861d3dd127f6b4a5258cd8ef55d4c50&v=4 + url: https://github.com/jonatasoli +- login: hellocoldworld + count: 14 + avatarUrl: https://avatars.githubusercontent.com/u/47581948?u=3d2186796434c507a6cb6de35189ab0ad27c356f&v=4 + url: https://github.com/hellocoldworld - login: haizaar count: 13 avatarUrl: https://avatars.githubusercontent.com/u/58201?u=4f1f9843d69433ca0d380d95146cfe119e5fdac4&v=4 @@ -161,10 +177,6 @@ experts: count: 13 avatarUrl: https://avatars.githubusercontent.com/u/42819267?u=fdeeaa9242a59b243f8603496b00994f6951d5a2&v=4 url: https://github.com/valentin994 -- login: hellocoldworld - count: 12 - avatarUrl: https://avatars.githubusercontent.com/u/47581948?v=4 - url: https://github.com/hellocoldworld - login: David-Lor count: 12 avatarUrl: https://avatars.githubusercontent.com/u/17401854?u=474680c02b94cba810cb9032fb7eb787d9cc9d22&v=4 @@ -173,10 +185,10 @@ experts: count: 12 avatarUrl: https://avatars.githubusercontent.com/u/37829370?v=4 url: https://github.com/yinziyan1206 -- login: jonatasoli +- login: n8sty count: 12 - avatarUrl: https://avatars.githubusercontent.com/u/26334101?u=071c062d2861d3dd127f6b4a5258cd8ef55d4c50&v=4 - url: https://github.com/jonatasoli + avatarUrl: https://avatars.githubusercontent.com/u/2964996?v=4 + url: https://github.com/n8sty - login: lowercase00 count: 11 avatarUrl: https://avatars.githubusercontent.com/u/21188280?v=4 @@ -185,39 +197,31 @@ experts: count: 11 avatarUrl: https://avatars.githubusercontent.com/u/40475662?u=e58ef61034e8d0d6a312cc956fb09b9c3332b449&v=4 url: https://github.com/zamiramir -- login: juntatalor - count: 11 - avatarUrl: https://avatars.githubusercontent.com/u/8134632?v=4 - url: https://github.com/juntatalor -- login: n8sty - count: 11 - avatarUrl: https://avatars.githubusercontent.com/u/2964996?v=4 - url: https://github.com/n8sty -- login: aalifadv - count: 11 - avatarUrl: https://avatars.githubusercontent.com/u/78442260?v=4 - url: https://github.com/aalifadv last_month_active: -- login: jgould22 - count: 15 - avatarUrl: https://avatars.githubusercontent.com/u/4335847?u=ed77f67e0bb069084639b24d812dbb2a2b1dc554&v=4 - url: https://github.com/jgould22 -- login: accelleon +- login: JarroVGIT + count: 30 + avatarUrl: https://avatars.githubusercontent.com/u/13659033?u=e8bea32d07a5ef72f7dde3b2079ceb714923ca05&v=4 + url: https://github.com/JarroVGIT +- login: zoliknemet + count: 9 + avatarUrl: https://avatars.githubusercontent.com/u/22326718?u=31ba446ac290e23e56eea8e4f0c558aaf0b40779&v=4 + url: https://github.com/zoliknemet +- login: iudeen count: 5 - avatarUrl: https://avatars.githubusercontent.com/u/5001614?v=4 - url: https://github.com/accelleon -- login: jonatasoli - count: 4 - avatarUrl: https://avatars.githubusercontent.com/u/26334101?u=071c062d2861d3dd127f6b4a5258cd8ef55d4c50&v=4 - url: https://github.com/jonatasoli + avatarUrl: https://avatars.githubusercontent.com/u/10519440?u=2843b3303282bff8b212dcd4d9d6689452e4470c&v=4 + url: https://github.com/iudeen - login: Kludex - count: 4 + count: 5 avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=62adc405ef418f4b6c8caa93d3eb8ab107bc4927&v=4 url: https://github.com/Kludex -- login: yinziyan1206 +- login: odiseo0 + count: 4 + avatarUrl: https://avatars.githubusercontent.com/u/87550035?u=ab724eae71c3fe1cf81e8dc76e73415da926ef7d&v=4 + url: https://github.com/odiseo0 +- login: jonatasoli count: 3 - avatarUrl: https://avatars.githubusercontent.com/u/37829370?v=4 - url: https://github.com/yinziyan1206 + avatarUrl: https://avatars.githubusercontent.com/u/26334101?u=071c062d2861d3dd127f6b4a5258cd8ef55d4c50&v=4 + url: https://github.com/jonatasoli top_contributors: - login: waynerv count: 25 @@ -243,21 +247,21 @@ top_contributors: count: 12 avatarUrl: https://avatars.githubusercontent.com/u/11489395?u=4adb6986bf3debfc2b8216ae701f2bd47d73da7d&v=4 url: https://github.com/mariacamilagl +- login: Kludex + count: 11 + avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=62adc405ef418f4b6c8caa93d3eb8ab107bc4927&v=4 + url: https://github.com/Kludex - login: Smlep - count: 9 + count: 10 avatarUrl: https://avatars.githubusercontent.com/u/16785985?v=4 url: https://github.com/Smlep - login: Serrones count: 8 avatarUrl: https://avatars.githubusercontent.com/u/22691749?u=4795b880e13ca33a73e52fc0ef7dc9c60c8fce47&v=4 url: https://github.com/Serrones -- login: Kludex - count: 8 - avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=62adc405ef418f4b6c8caa93d3eb8ab107bc4927&v=4 - url: https://github.com/Kludex - login: RunningIkkyu count: 7 - avatarUrl: https://avatars.githubusercontent.com/u/31848542?u=706e1ee3f248245f2d68b976d149d06fd5a2010d&v=4 + avatarUrl: https://avatars.githubusercontent.com/u/31848542?u=efb5b45b55584450507834f279ce48d4d64dea2f&v=4 url: https://github.com/RunningIkkyu - login: hard-coders count: 7 @@ -275,6 +279,10 @@ top_contributors: count: 5 avatarUrl: https://avatars.githubusercontent.com/u/1175560?v=4 url: https://github.com/Attsun1031 +- login: dependabot + count: 5 + avatarUrl: https://avatars.githubusercontent.com/in/29110?v=4 + url: https://github.com/apps/dependabot - login: jekirl count: 4 avatarUrl: https://avatars.githubusercontent.com/u/2546697?u=a027452387d85bd4a14834e19d716c99255fb3b7&v=4 @@ -291,15 +299,31 @@ top_contributors: count: 4 avatarUrl: https://avatars.githubusercontent.com/u/39375566?u=260ad6b1a4b34c07dbfa728da5e586f16f6d1824&v=4 url: https://github.com/komtaki +- login: hitrust + count: 4 + avatarUrl: https://avatars.githubusercontent.com/u/3360631?u=5fa1f475ad784d64eb9666bdd43cc4d285dcc773&v=4 + url: https://github.com/hitrust +- login: lsglucas + count: 4 + avatarUrl: https://avatars.githubusercontent.com/u/61513630?u=320e43fe4dc7bc6efc64e9b8f325f8075634fd20&v=4 + url: https://github.com/lsglucas +- login: ComicShrimp + count: 4 + avatarUrl: https://avatars.githubusercontent.com/u/43503750?u=b3e4d9a14d9a65d429ce62c566aef73178b7111d&v=4 + url: https://github.com/ComicShrimp - login: NinaHwang count: 4 avatarUrl: https://avatars.githubusercontent.com/u/79563565?u=1741703bd6c8f491503354b363a86e879b4c1cab&v=4 url: https://github.com/NinaHwang top_reviewers: - login: Kludex - count: 93 + count: 95 avatarUrl: https://avatars.githubusercontent.com/u/7353520?u=62adc405ef418f4b6c8caa93d3eb8ab107bc4927&v=4 url: https://github.com/Kludex +- login: tokusumi + count: 49 + avatarUrl: https://avatars.githubusercontent.com/u/41147016?u=55010621aece725aa702270b54fed829b6a1fe60&v=4 + url: https://github.com/tokusumi - login: waynerv count: 47 avatarUrl: https://avatars.githubusercontent.com/u/39515546?u=ec35139777597cdbbbddda29bf8b9d4396b429a9&v=4 @@ -308,10 +332,10 @@ top_reviewers: count: 47 avatarUrl: https://avatars.githubusercontent.com/u/59285379?v=4 url: https://github.com/Laineyzhang55 -- login: tokusumi - count: 46 - avatarUrl: https://avatars.githubusercontent.com/u/41147016?u=55010621aece725aa702270b54fed829b6a1fe60&v=4 - url: https://github.com/tokusumi +- login: BilalAlpaslan + count: 45 + avatarUrl: https://avatars.githubusercontent.com/u/47563997?u=63ed66e304fe8d765762c70587d61d9196e5c82d&v=4 + url: https://github.com/BilalAlpaslan - login: ycd count: 45 avatarUrl: https://avatars.githubusercontent.com/u/62724709?u=826f228edf0bab0d19ad1d5c4ba4df1047ccffef&v=4 @@ -320,13 +344,13 @@ top_reviewers: count: 41 avatarUrl: https://avatars.githubusercontent.com/u/24587499?u=e772190a051ab0eaa9c8542fcff1892471638f2b&v=4 url: https://github.com/cikay -- login: BilalAlpaslan - count: 40 - avatarUrl: https://avatars.githubusercontent.com/u/47563997?u=63ed66e304fe8d765762c70587d61d9196e5c82d&v=4 - url: https://github.com/BilalAlpaslan +- login: yezz123 + count: 34 + avatarUrl: https://avatars.githubusercontent.com/u/52716203?u=636b4f79645176df4527dd45c12d5dbb5a4193cf&v=4 + url: https://github.com/yezz123 - login: AdrianDeAnda count: 33 - avatarUrl: https://avatars.githubusercontent.com/u/1024932?u=bb7f8a0d6c9de4e9d0320a9f271210206e202250&v=4 + avatarUrl: https://avatars.githubusercontent.com/u/1024932?u=b2ea249c6b41ddf98679c8d110d0f67d4a3ebf93&v=4 url: https://github.com/AdrianDeAnda - login: ArcLightSlavik count: 31 @@ -344,10 +368,6 @@ top_reviewers: count: 21 avatarUrl: https://avatars.githubusercontent.com/u/39375566?u=260ad6b1a4b34c07dbfa728da5e586f16f6d1824&v=4 url: https://github.com/komtaki -- login: yezz123 - count: 19 - avatarUrl: https://avatars.githubusercontent.com/u/52716203?u=636b4f79645176df4527dd45c12d5dbb5a4193cf&v=4 - url: https://github.com/yezz123 - login: hard-coders count: 19 avatarUrl: https://avatars.githubusercontent.com/u/9651103?u=95db33927bbff1ed1c07efddeb97ac2ff33068ed&v=4 @@ -356,6 +376,14 @@ top_reviewers: count: 19 avatarUrl: https://avatars.githubusercontent.com/u/63915557?u=47debaa860fd52c9b98c97ef357ddcec3b3fb399&v=4 url: https://github.com/0417taehyun +- login: lsglucas + count: 18 + avatarUrl: https://avatars.githubusercontent.com/u/61513630?u=320e43fe4dc7bc6efc64e9b8f325f8075634fd20&v=4 + url: https://github.com/lsglucas +- login: JarroVGIT + count: 18 + avatarUrl: https://avatars.githubusercontent.com/u/13659033?u=e8bea32d07a5ef72f7dde3b2079ceb714923ca05&v=4 + url: https://github.com/JarroVGIT - login: zy7y count: 17 avatarUrl: https://avatars.githubusercontent.com/u/67154681?u=5d634834cc514028ea3f9115f7030b99a1f4d5a4&v=4 @@ -364,14 +392,14 @@ top_reviewers: count: 16 avatarUrl: https://avatars.githubusercontent.com/u/21978760?v=4 url: https://github.com/yanever -- login: lsglucas - count: 16 - avatarUrl: https://avatars.githubusercontent.com/u/61513630?u=320e43fe4dc7bc6efc64e9b8f325f8075634fd20&v=4 - url: https://github.com/lsglucas - login: SwftAlpc count: 16 avatarUrl: https://avatars.githubusercontent.com/u/52768429?u=6a3aa15277406520ad37f6236e89466ed44bc5b8&v=4 url: https://github.com/SwftAlpc +- login: rjNemo + count: 16 + avatarUrl: https://avatars.githubusercontent.com/u/56785022?u=d5c3a02567c8649e146fcfc51b6060ccaf8adef8&v=4 + url: https://github.com/rjNemo - login: Smlep count: 16 avatarUrl: https://avatars.githubusercontent.com/u/16785985?v=4 @@ -388,18 +416,18 @@ top_reviewers: count: 15 avatarUrl: https://avatars.githubusercontent.com/u/63476957?u=6c86e59b48e0394d4db230f37fc9ad4d7e2c27c7&v=4 url: https://github.com/delhi09 -- login: rjNemo - count: 14 - avatarUrl: https://avatars.githubusercontent.com/u/56785022?u=d5c3a02567c8649e146fcfc51b6060ccaf8adef8&v=4 - url: https://github.com/rjNemo -- login: RunningIkkyu - count: 12 - avatarUrl: https://avatars.githubusercontent.com/u/31848542?u=706e1ee3f248245f2d68b976d149d06fd5a2010d&v=4 - url: https://github.com/RunningIkkyu - login: sh0nk - count: 12 + count: 13 avatarUrl: https://avatars.githubusercontent.com/u/6478810?u=af15d724875cec682ed8088a86d36b2798f981c0&v=4 url: https://github.com/sh0nk +- login: RunningIkkyu + count: 12 + avatarUrl: https://avatars.githubusercontent.com/u/31848542?u=efb5b45b55584450507834f279ce48d4d64dea2f&v=4 + url: https://github.com/RunningIkkyu +- login: solomein-sv + count: 11 + avatarUrl: https://avatars.githubusercontent.com/u/46193920?u=46acfb4aeefb1d7b9fdc5a8cbd9eb8744683c47a&v=4 + url: https://github.com/solomein-sv - login: mariacamilagl count: 10 avatarUrl: https://avatars.githubusercontent.com/u/11489395?u=4adb6986bf3debfc2b8216ae701f2bd47d73da7d&v=4 @@ -412,10 +440,10 @@ top_reviewers: count: 10 avatarUrl: https://avatars.githubusercontent.com/u/7887703?v=4 url: https://github.com/maoyibo -- login: solomein-sv +- login: odiseo0 count: 10 - avatarUrl: https://avatars.githubusercontent.com/u/46193920?u=46acfb4aeefb1d7b9fdc5a8cbd9eb8744683c47a&v=4 - url: https://github.com/solomein-sv + avatarUrl: https://avatars.githubusercontent.com/u/87550035?u=ab724eae71c3fe1cf81e8dc76e73415da926ef7d&v=4 + url: https://github.com/odiseo0 - login: graingert count: 9 avatarUrl: https://avatars.githubusercontent.com/u/413772?v=4 @@ -432,6 +460,10 @@ top_reviewers: count: 9 avatarUrl: https://avatars.githubusercontent.com/u/69092910?u=4ac58eab99bd37d663f3d23551df96d4fbdbf760&v=4 url: https://github.com/bezaca +- login: raphaelauv + count: 8 + avatarUrl: https://avatars.githubusercontent.com/u/10202690?u=e6f86f5c0c3026a15d6b51792fa3e532b12f1371&v=4 + url: https://github.com/raphaelauv - login: blt232018 count: 8 avatarUrl: https://avatars.githubusercontent.com/u/43393471?u=172b0e0391db1aa6c1706498d6dfcb003c8a4857&v=4 @@ -460,10 +492,6 @@ top_reviewers: count: 7 avatarUrl: https://avatars.githubusercontent.com/u/36391432?u=094eec0cfddd5013f76f31e55e56147d78b19553&v=4 url: https://github.com/ryuckel -- login: raphaelauv - count: 7 - avatarUrl: https://avatars.githubusercontent.com/u/10202690?u=e6f86f5c0c3026a15d6b51792fa3e532b12f1371&v=4 - url: https://github.com/raphaelauv - login: NastasiaSaby count: 7 avatarUrl: https://avatars.githubusercontent.com/u/8245071?u=b3afd005f9e4bf080c219ef61a592b3a8004b764&v=4 @@ -472,6 +500,10 @@ top_reviewers: count: 7 avatarUrl: https://avatars.githubusercontent.com/u/1405026?v=4 url: https://github.com/Mause +- login: wakabame + count: 7 + avatarUrl: https://avatars.githubusercontent.com/u/35513518?v=4 + url: https://github.com/wakabame - login: AlexandreBiguet count: 7 avatarUrl: https://avatars.githubusercontent.com/u/1483079?u=ff926455cd4cab03c6c49441aa5dc2b21df3e266&v=4 @@ -480,15 +512,3 @@ top_reviewers: count: 7 avatarUrl: https://avatars.githubusercontent.com/u/34248814?v=4 url: https://github.com/krocdort -- login: jovicon - count: 6 - avatarUrl: https://avatars.githubusercontent.com/u/21287303?u=b049eac3e51a4c0473c2efe66b4d28a7d8f2b572&v=4 - url: https://github.com/jovicon -- login: LorhanSohaky - count: 6 - avatarUrl: https://avatars.githubusercontent.com/u/16273730?u=095b66f243a2cd6a0aadba9a095009f8aaf18393&v=4 - url: https://github.com/LorhanSohaky -- login: peidrao - count: 6 - avatarUrl: https://avatars.githubusercontent.com/u/32584628?u=88c2cb42a99e0f50cdeae3606992568184783ee5&v=4 - url: https://github.com/peidrao From 21fd708c6e9d9be470e287760e324e970fda7b35 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 14 Jul 2022 14:57:21 +0000 Subject: [PATCH 34/52] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index 84b511c0a..230d501c2 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,7 @@ ## Latest Changes +* 👥 Update FastAPI People. PR [#5154](https://github.com/tiangolo/fastapi/pull/5154) by [@tiangolo](https://github.com/tiangolo). * 🔧 Update Jina sponsor badges. PR [#5151](https://github.com/tiangolo/fastapi/pull/5151) by [@tiangolo](https://github.com/tiangolo). * 🔧 Add config for Swedish translations notification. PR [#5147](https://github.com/tiangolo/fastapi/pull/5147) by [@tiangolo](https://github.com/tiangolo). * 🌐 Start of Swedish translation. PR [#5062](https://github.com/tiangolo/fastapi/pull/5062) by [@MrRawbin](https://github.com/MrRawbin). From 169af0217ed771698f518713b12a0f5a74ca3a19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Thu, 14 Jul 2022 17:04:37 +0200 Subject: [PATCH 35/52] =?UTF-8?q?=F0=9F=94=A7=20Update=20sponsors=20badge?= =?UTF-8?q?=20configs=20(#5155)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/data/sponsors_badge.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/en/data/sponsors_badge.yml b/docs/en/data/sponsors_badge.yml index 10a31b86a..a8bfb0b1b 100644 --- a/docs/en/data/sponsors_badge.yml +++ b/docs/en/data/sponsors_badge.yml @@ -11,3 +11,5 @@ logins: - DropbaseHQ - VincentParedes - BLUE-DEVIL1134 + - ObliviousAI + - Doist From 0be244ad5273b074109b980cae7ba8e83b223fad Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 14 Jul 2022 15:05:19 +0000 Subject: [PATCH 36/52] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index 230d501c2..160518644 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,7 @@ ## Latest Changes +* 🔧 Update sponsors badge configs. PR [#5155](https://github.com/tiangolo/fastapi/pull/5155) by [@tiangolo](https://github.com/tiangolo). * 👥 Update FastAPI People. PR [#5154](https://github.com/tiangolo/fastapi/pull/5154) by [@tiangolo](https://github.com/tiangolo). * 🔧 Update Jina sponsor badges. PR [#5151](https://github.com/tiangolo/fastapi/pull/5151) by [@tiangolo](https://github.com/tiangolo). * 🔧 Add config for Swedish translations notification. PR [#5147](https://github.com/tiangolo/fastapi/pull/5147) by [@tiangolo](https://github.com/tiangolo). From 35244ee83bb94b4f663ffa957f87ef432c137761 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Jul 2022 18:14:54 +0200 Subject: [PATCH 37/52] =?UTF-8?q?=E2=AC=86=20Bump=20actions/cache=20from?= =?UTF-8?q?=202=20to=203=20(#5149)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [actions/cache](https://github.com/actions/cache) from 2 to 3. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/v2...v3) --- updated-dependencies: - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build-docs.yml | 2 +- .github/workflows/publish.yml | 2 +- .github/workflows/test.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index 512d70078..a0d895911 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -18,7 +18,7 @@ jobs: uses: actions/setup-python@v4 with: python-version: "3.7" - - uses: actions/cache@v2 + - uses: actions/cache@v3 id: cache with: path: ${{ env.pythonLocation }} diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 4686fd0d4..02846cefd 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -18,7 +18,7 @@ jobs: uses: actions/setup-python@v4 with: python-version: "3.6" - - uses: actions/cache@v2 + - uses: actions/cache@v3 id: cache with: path: ${{ env.pythonLocation }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 763dbc44b..14dc141d9 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -21,7 +21,7 @@ jobs: uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - - uses: actions/cache@v2 + - uses: actions/cache@v3 id: cache with: path: ${{ env.pythonLocation }} From ec3b6e975c33530343bbbcacaebc6288bdb9466a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Jul 2022 18:15:08 +0200 Subject: [PATCH 38/52] =?UTF-8?q?=E2=AC=86=20Bump=20actions/upload-artifac?= =?UTF-8?q?t=20from=202=20to=203=20(#5148)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build-docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index a0d895911..0d666b82a 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -36,7 +36,7 @@ jobs: run: python3.7 ./scripts/docs.py build-all - name: Zip docs run: bash ./scripts/zip-docs.sh - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v3 with: name: docs-zip path: ./docs.zip From 84f6a030114bccdcfd49546b12d73423b4db1782 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 14 Jul 2022 16:15:31 +0000 Subject: [PATCH 39/52] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index 160518644..802079cd4 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,7 @@ ## Latest Changes +* ⬆ Bump actions/cache from 2 to 3. PR [#5149](https://github.com/tiangolo/fastapi/pull/5149) by [@dependabot[bot]](https://github.com/apps/dependabot). * 🔧 Update sponsors badge configs. PR [#5155](https://github.com/tiangolo/fastapi/pull/5155) by [@tiangolo](https://github.com/tiangolo). * 👥 Update FastAPI People. PR [#5154](https://github.com/tiangolo/fastapi/pull/5154) by [@tiangolo](https://github.com/tiangolo). * 🔧 Update Jina sponsor badges. PR [#5151](https://github.com/tiangolo/fastapi/pull/5151) by [@tiangolo](https://github.com/tiangolo). From 49619c0180c40dfb5039874dfbd279e4fed19479 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 14 Jul 2022 16:15:55 +0000 Subject: [PATCH 40/52] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index 802079cd4..e3265c704 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,7 @@ ## Latest Changes +* ⬆ Bump actions/upload-artifact from 2 to 3. PR [#5148](https://github.com/tiangolo/fastapi/pull/5148) by [@dependabot[bot]](https://github.com/apps/dependabot). * ⬆ Bump actions/cache from 2 to 3. PR [#5149](https://github.com/tiangolo/fastapi/pull/5149) by [@dependabot[bot]](https://github.com/apps/dependabot). * 🔧 Update sponsors badge configs. PR [#5155](https://github.com/tiangolo/fastapi/pull/5155) by [@tiangolo](https://github.com/tiangolo). * 👥 Update FastAPI People. PR [#5154](https://github.com/tiangolo/fastapi/pull/5154) by [@tiangolo](https://github.com/tiangolo). From 71b10e58904aa1543a8761bcf4028eee155c1af9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Thu, 14 Jul 2022 19:04:20 +0200 Subject: [PATCH 41/52] =?UTF-8?q?=F0=9F=94=A7=20Update=20Dependabot=20comm?= =?UTF-8?q?it=20message=20(#5156)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/dependabot.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 946f2358c..cd972a0ba 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -5,8 +5,12 @@ updates: directory: "/" schedule: interval: "daily" + commit-message: + prefix: ⬆ # Python - package-ecosystem: "pip" directory: "/" schedule: interval: "daily" + commit-message: + prefix: ⬆ From f30b6c6001186794950eca0553d0466c0b59eaa6 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 14 Jul 2022 17:05:01 +0000 Subject: [PATCH 42/52] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index e3265c704..4dce21b64 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,7 @@ ## Latest Changes +* 🔧 Update Dependabot commit message. PR [#5156](https://github.com/tiangolo/fastapi/pull/5156) by [@tiangolo](https://github.com/tiangolo). * ⬆ Bump actions/upload-artifact from 2 to 3. PR [#5148](https://github.com/tiangolo/fastapi/pull/5148) by [@dependabot[bot]](https://github.com/apps/dependabot). * ⬆ Bump actions/cache from 2 to 3. PR [#5149](https://github.com/tiangolo/fastapi/pull/5149) by [@dependabot[bot]](https://github.com/apps/dependabot). * 🔧 Update sponsors badge configs. PR [#5155](https://github.com/tiangolo/fastapi/pull/5155) by [@tiangolo](https://github.com/tiangolo). From 9197cbd36cc2a275ecffb231ade6200dbea62326 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Thu, 14 Jul 2022 19:14:53 +0200 Subject: [PATCH 43/52] =?UTF-8?q?=F0=9F=94=A7=20Update=20translations=20no?= =?UTF-8?q?tification=20for=20Hebrew=20(#5158)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/actions/notify-translations/app/translations.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/actions/notify-translations/app/translations.yml b/.github/actions/notify-translations/app/translations.yml index a68167ff8..ac15978a9 100644 --- a/.github/actions/notify-translations/app/translations.yml +++ b/.github/actions/notify-translations/app/translations.yml @@ -16,3 +16,4 @@ az: 3994 nl: 4701 uz: 4883 sv: 5146 +he: 5157 From ee182c6a0ad86083a2855321a51690cf597efd7b Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 14 Jul 2022 17:15:39 +0000 Subject: [PATCH 44/52] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index 4dce21b64..714696529 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,7 @@ ## Latest Changes +* 🔧 Update translations notification for Hebrew. PR [#5158](https://github.com/tiangolo/fastapi/pull/5158) by [@tiangolo](https://github.com/tiangolo). * 🔧 Update Dependabot commit message. PR [#5156](https://github.com/tiangolo/fastapi/pull/5156) by [@tiangolo](https://github.com/tiangolo). * ⬆ Bump actions/upload-artifact from 2 to 3. PR [#5148](https://github.com/tiangolo/fastapi/pull/5148) by [@dependabot[bot]](https://github.com/apps/dependabot). * ⬆ Bump actions/cache from 2 to 3. PR [#5149](https://github.com/tiangolo/fastapi/pull/5149) by [@dependabot[bot]](https://github.com/apps/dependabot). From 59d154fa6f7b7345c4a8e2650954f1cc67230974 Mon Sep 17 00:00:00 2001 From: Itay Raveh <83612679+itay-raveh@users.noreply.github.com> Date: Thu, 14 Jul 2022 17:16:28 +0000 Subject: [PATCH 45/52] =?UTF-8?q?=F0=9F=8C=90=20Start=20of=20Hebrew=20tran?= =?UTF-8?q?slation=20(#5050)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Sebastián Ramírez --- docs/az/mkdocs.yml | 3 + docs/de/mkdocs.yml | 3 + docs/en/mkdocs.yml | 3 + docs/es/mkdocs.yml | 3 + docs/fa/mkdocs.yml | 3 + docs/fr/mkdocs.yml | 3 + docs/he/docs/index.md | 464 +++++++++++++++++++++++++++++++++++ docs/he/mkdocs.yml | 140 +++++++++++ docs/he/overrides/.gitignore | 0 docs/id/mkdocs.yml | 3 + docs/it/mkdocs.yml | 3 + docs/ja/mkdocs.yml | 3 + docs/ko/mkdocs.yml | 3 + docs/nl/mkdocs.yml | 3 + docs/pl/mkdocs.yml | 3 + docs/pt/mkdocs.yml | 3 + docs/ru/mkdocs.yml | 3 + docs/sq/mkdocs.yml | 3 + docs/tr/mkdocs.yml | 3 + docs/uk/mkdocs.yml | 3 + docs/zh/mkdocs.yml | 3 + 21 files changed, 658 insertions(+) create mode 100644 docs/he/docs/index.md create mode 100644 docs/he/mkdocs.yml create mode 100644 docs/he/overrides/.gitignore diff --git a/docs/az/mkdocs.yml b/docs/az/mkdocs.yml index 7ebf94384..90ee0bb82 100644 --- a/docs/az/mkdocs.yml +++ b/docs/az/mkdocs.yml @@ -44,6 +44,7 @@ nav: - es: /es/ - fa: /fa/ - fr: /fr/ + - he: /he/ - id: /id/ - it: /it/ - ja: /ja/ @@ -106,6 +107,8 @@ extra: name: fa - link: /fr/ name: fr - français + - link: /he/ + name: he - link: /id/ name: id - link: /it/ diff --git a/docs/de/mkdocs.yml b/docs/de/mkdocs.yml index c617e55af..6009dd2fe 100644 --- a/docs/de/mkdocs.yml +++ b/docs/de/mkdocs.yml @@ -44,6 +44,7 @@ nav: - es: /es/ - fa: /fa/ - fr: /fr/ + - he: /he/ - id: /id/ - it: /it/ - ja: /ja/ @@ -107,6 +108,8 @@ extra: name: fa - link: /fr/ name: fr - français + - link: /he/ + name: he - link: /id/ name: id - link: /it/ diff --git a/docs/en/mkdocs.yml b/docs/en/mkdocs.yml index 04639200d..7adfae0f9 100644 --- a/docs/en/mkdocs.yml +++ b/docs/en/mkdocs.yml @@ -44,6 +44,7 @@ nav: - es: /es/ - fa: /fa/ - fr: /fr/ + - he: /he/ - id: /id/ - it: /it/ - ja: /ja/ @@ -213,6 +214,8 @@ extra: name: fa - link: /fr/ name: fr - français + - link: /he/ + name: he - link: /id/ name: id - link: /it/ diff --git a/docs/es/mkdocs.yml b/docs/es/mkdocs.yml index cd1c04ed3..511ea0255 100644 --- a/docs/es/mkdocs.yml +++ b/docs/es/mkdocs.yml @@ -44,6 +44,7 @@ nav: - es: /es/ - fa: /fa/ - fr: /fr/ + - he: /he/ - id: /id/ - it: /it/ - ja: /ja/ @@ -116,6 +117,8 @@ extra: name: fa - link: /fr/ name: fr - français + - link: /he/ + name: he - link: /id/ name: id - link: /it/ diff --git a/docs/fa/mkdocs.yml b/docs/fa/mkdocs.yml index 79975288a..7d74e0407 100644 --- a/docs/fa/mkdocs.yml +++ b/docs/fa/mkdocs.yml @@ -44,6 +44,7 @@ nav: - es: /es/ - fa: /fa/ - fr: /fr/ + - he: /he/ - id: /id/ - it: /it/ - ja: /ja/ @@ -106,6 +107,8 @@ extra: name: fa - link: /fr/ name: fr - français + - link: /he/ + name: he - link: /id/ name: id - link: /it/ diff --git a/docs/fr/mkdocs.yml b/docs/fr/mkdocs.yml index 69a323cec..f790c0299 100644 --- a/docs/fr/mkdocs.yml +++ b/docs/fr/mkdocs.yml @@ -44,6 +44,7 @@ nav: - es: /es/ - fa: /fa/ - fr: /fr/ + - he: /he/ - id: /id/ - it: /it/ - ja: /ja/ @@ -121,6 +122,8 @@ extra: name: fa - link: /fr/ name: fr - français + - link: /he/ + name: he - link: /id/ name: id - link: /it/ diff --git a/docs/he/docs/index.md b/docs/he/docs/index.md new file mode 100644 index 000000000..fa63d8cb7 --- /dev/null +++ b/docs/he/docs/index.md @@ -0,0 +1,464 @@ +

+ FastAPI +

+

+ תשתית FastAPI, ביצועים גבוהים, קלה ללמידה, מהירה לתכנות, מוכנה לסביבת ייצור +

+

+ + Test + + + Coverage + + + Package version + + + Supported Python versions + +

+ +--- + +**תיעוד**: https://fastapi.tiangolo.com + +**קוד**: https://github.com/tiangolo/fastapi + +--- + +FastAPI היא תשתית רשת מודרנית ומהירה (ביצועים גבוהים) לבניית ממשקי תכנות יישומים (API) עם פייתון 3.6+ בהתבסס על רמזי טיפוסים סטנדרטיים. + +תכונות המפתח הן: + +- **מהירה**: ביצועים גבוהים מאוד, בקנה אחד עם NodeJS ו - Go (תודות ל - Starlette ו - Pydantic). [אחת מתשתיות הפייתון המהירות ביותר](#performance). + +- **מהירה לתכנות**: הגבירו את מהירות פיתוח התכונות החדשות בכ - %200 עד %300. \* +- **פחות שגיאות**: מנעו כ - %40 משגיאות אנוש (מפתחים). \* +- **אינטואיטיבית**: תמיכת עורך מעולה. השלמה בכל מקום. פחות זמן ניפוי שגיאות. +- **קלה**: מתוכננת להיות קלה לשימוש וללמידה. פחות זמן קריאת תיעוד. +- **קצרה**: מזערו שכפול קוד. מספר תכונות מכל הכרזת פרמטר. פחות שגיאות. +- **חסונה**: קבלו קוד מוכן לסביבת ייצור. עם תיעוד אינטרקטיבי אוטומטי. +- **מבוססת סטנדרטים**: מבוססת על (ותואמת לחלוטין ל -) הסטדנרטים הפתוחים לממשקי תכנות יישומים: OpenAPI (ידועים לשעבר כ - Swagger) ו - JSON Schema. + +\* הערכה מבוססת על בדיקות של צוות פיתוח פנימי שבונה אפליקציות בסביבת ייצור. + +## נותני חסות + + + +{% if sponsors %} +{% for sponsor in sponsors.gold -%} + +{% endfor -%} +{%- for sponsor in sponsors.silver -%} + +{% endfor %} +{% endif %} + + + +נותני חסות אחרים + +## דעות + +"_[...] I'm using **FastAPI** a ton these days. [...] I'm actually planning to use it for all of my team's **ML services at Microsoft**. Some of them are getting integrated into the core **Windows** product and some **Office** products._" + +
Kabir Khan - Microsoft (ref)
+ +--- + +"_We adopted the **FastAPI** library to spawn a **REST** server that can be queried to obtain **predictions**. [for Ludwig]_" + +
Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - Uber (ref)
+ +--- + +"_**Netflix** is pleased to announce the open-source release of our **crisis management** orchestration framework: **Dispatch**! [built with **FastAPI**]_" + +
Kevin Glisson, Marc Vilanova, Forest Monsen - Netflix (ref)
+ +--- + +"_I’m over the moon excited about **FastAPI**. It’s so fun!_" + +
Brian Okken - Python Bytes podcast host (ref)
+ +--- + +"_Honestly, what you've built looks super solid and polished. In many ways, it's what I wanted **Hug** to be - it's really inspiring to see someone build that._" + +
Timothy Crosley - Hug creator (ref)
+ +--- + +"_If you're looking to learn one **modern framework** for building REST APIs, check out **FastAPI** [...] It's fast, easy to use and easy to learn [...]_" + +"_We've switched over to **FastAPI** for our **APIs** [...] I think you'll like it [...]_" + +
Ines Montani - Matthew Honnibal - Explosion AI founders - spaCy creators (ref) - (ref)
+ +--- + +## **Typer**, ה - FastAPI של ממשקי שורת פקודה (CLI). + + + +אם אתם בונים אפליקציית CLI לשימוש במסוף במקום ממשק רשת, העיפו מבט על **Typer**. + +**Typer** היא אחותה הקטנה של FastAPI. ומטרתה היא להיות ה - **FastAPI של ממשקי שורת פקודה**. ⌨️ 🚀 + +## תלויות + +פייתון 3.6+ + +FastAPI עומדת על כתפי ענקיות: + +- Starlette לחלקי הרשת. +- Pydantic לחלקי המידע. + +## התקנה + +
+ +```console +$ pip install fastapi + +---> 100% +``` + +
+ +תצטרכו גם שרת ASGI כגון Uvicorn או Hypercorn. + +
+ +```console +$ pip install "uvicorn[standard]" + +---> 100% +``` + +
+ +## דוגמא + +### צרו אותה + +- צרו קובץ בשם `main.py` עם: + +```Python +from typing import Union + +from fastapi import FastAPI + +app = FastAPI() + + +@app.get("/") +def read_root(): + return {"Hello": "World"} + + +@app.get("/items/{item_id}") +def read_item(item_id: int, q: Union[str, None] = None): + return {"item_id": item_id, "q": q} +``` + +
+או השתמשו ב - async def... + +אם הקוד שלכם משתמש ב - `async` / `await`, השתמשו ב - `async def`: + +```Python hl_lines="9 14" +from typing import Union + +from fastapi import FastAPI + +app = FastAPI() + + +@app.get("/") +async def read_root(): + return {"Hello": "World"} + + +@app.get("/items/{item_id}") +async def read_item(item_id: int, q: Union[str, None] = None): + return {"item_id": item_id, "q": q} +``` + +**שימו לב**: + +אם אינכם יודעים, בדקו את פרק "ממהרים?" על `async` ו - `await` בתיעוד. + +
+ +### הריצו אותה + +התחילו את השרת עם: + +
+ +```console +$ uvicorn main:app --reload + +INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) +INFO: Started reloader process [28720] +INFO: Started server process [28722] +INFO: Waiting for application startup. +INFO: Application startup complete. +``` + +
+ +
+על הפקודה uvicorn main:app --reload... + +הפקודה `uvicorn main:app` מתייחסת ל: + +- `main`: הקובץ `main.py` (מודול פייתון). +- `app`: האובייקט שנוצר בתוך `main.py` עם השורה app = FastAPI(). +- --reload: גרמו לשרת להתאתחל לאחר שינויים בקוד. עשו זאת רק בסביבת פיתוח. + +
+ +### בדקו אותה + +פתחו את הדפדפן שלכם בכתובת http://127.0.0.1:8000/items/5?q=somequery. + +אתם תראו תגובת JSON: + +```JSON +{"item_id": 5, "q": "somequery"} +``` + +כבר יצרתם API ש: + +- מקבל בקשות HTTP בנתיבים `/` ו - /items/{item_id}. +- שני ה _נתיבים_ מקבלים _בקשות_ `GET` (ידועות גם כ*מתודות* HTTP). +- ה _נתיב_ /items/{item_id} כולל \*פרמטר נתיב\_ `item_id` שאמור להיות `int`. +- ה _נתיב_ /items/{item_id} \*פרמטר שאילתא\_ אופציונלי `q`. + +### תיעוד API אינטרקטיבי + +כעת פנו לכתובת http://127.0.0.1:8000/docs. + +אתם תראו את התיעוד האוטומטי (מסופק על ידי Swagger UI): + +![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png) + +### תיעוד אלטרנטיבי + +כעת פנו לכתובת http://127.0.0.1:8000/redoc. + +אתם תראו תיעוד אלטרנטיבי (מסופק על ידי ReDoc): + +![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) + +## שדרוג לדוגמא + +כעת ערכו את הקובץ `main.py` כך שיוכל לקבל גוף מבקשת `PUT`. + +הגדירו את הגוף בעזרת רמזי טיפוסים סטנדרטיים, הודות ל - `Pydantic`. + +```Python hl_lines="4 9-12 25-27" +from typing import Union + +from fastapi import FastAPI +from pydantic import BaseModel + +app = FastAPI() + + +class Item(BaseModel): + name: str + price: float + is_offer: Union[bool, None] = None + + +@app.get("/") +def read_root(): + return {"Hello": "World"} + + +@app.get("/items/{item_id}") +def read_item(item_id: int, q: Union[str, None] = None): + return {"item_id": item_id, "q": q} + + +@app.put("/items/{item_id}") +def update_item(item_id: int, item: Item): + return {"item_name": item.name, "item_id": item_id} +``` + +השרת אמול להתאתחל אוטומטית (מאחר והוספתם --reload לפקודת `uvicorn` שלמעלה). + +### שדרוג התיעוד האינטרקטיבי + +כעת פנו לכתובת http://127.0.0.1:8000/docs. + +- התיעוד האוטומטי יתעדכן, כולל הגוף החדש: + +![Swagger UI](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png) + +- לחצו על הכפתור "Try it out", הוא יאפשר לכם למלא את הפרמטרים ולעבוד ישירות מול ה - API. + +![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-04-swagger-03.png) + +- אחר כך לחצו על הכפתור "Execute", האתר יתקשר עם ה - API שלכם, ישלח את הפרמטרים, ישיג את התוצאות ואז יראה אותן על המסך: + +![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-05-swagger-04.png) + +### שדרוג התיעוד האלטרנטיבי + +כעת פנו לכתובת http://127.0.0.1:8000/redoc. + +- התיעוד האלטרנטיבי גם יראה את פרמטר השאילתא והגוף החדשים. + +![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png) + +### סיכום + +לסיכום, אתם מכריזים ** פעם אחת** על טיפוסי הפרמטרים, גוף וכו' כפרמטרים לפונקציה. + +אתם עושים את זה עם טיפוסי פייתון מודרניים. + +אתם לא צריכים ללמוד תחביר חדש, מתודות או מחלקות של ספרייה ספיציפית, וכו' + +רק **פייתון 3.6+** סטנדרטי. + +לדוגמא, ל - `int`: + +```Python +item_id: int +``` + +או למודל `Item` מורכב יותר: + +```Python +item: Item +``` + +...ועם הכרזת הטיפוס האחת הזו אתם מקבלים: + +- תמיכת עורך, כולל: + - השלמות. + - בדיקת טיפוסים. +- אימות מידע: + - שגיאות ברורות ואטומטיות כאשר מוכנס מידע לא חוקי . + - אימות אפילו לאובייקטי JSON מקוננים. +- המרה של מידע קלט: המרה של מידע שמגיע מהרשת למידע וטיפוסים של פייתון. קורא מ: + - JSON. + - פרמטרי נתיב. + - פרמטרי שאילתא. + - עוגיות. + - כותרות. + - טפסים. + - קבצים. +- המרה של מידע פלט: המרה של מידע וטיפוסים מפייתון למידע רשת (כ - JSON): + - המירו טיפוסי פייתון (`str`, `int`, `float`, `bool`, `list`, etc). + - עצמי `datetime`. + - עצמי `UUID`. + - מודלי בסיסי נתונים. + - ...ורבים אחרים. +- תיעוד API אוטומטי ואינטרקטיבית כולל שתי אלטרנטיבות לממשק המשתמש: + - Swagger UI. + - ReDoc. + +--- + +בחזרה לדוגמאת הקוד הקודמת, **FastAPI** ידאג: + +- לאמת שיש `item_id` בנתיב בבקשות `GET` ו - `PUT`. +- לאמת שה - `item_id` הוא מטיפוס `int` בבקשות `GET` ו - `PUT`. + - אם הוא לא, הלקוח יראה שגיאה ברורה ושימושית. +- לבדוק האם קיים פרמטר שאילתא בשם `q` (קרי `http://127.0.0.1:8000/items/foo?q=somequery`) לבקשות `GET`. + - מאחר והפרמטר `q` מוגדר עם = None, הוא אופציונלי. + - לולא ה - `None` הוא היה חובה (כמו הגוף במקרה של `PUT`). +- לבקשות `PUT` לנתיב /items/{item_id}, לקרוא את גוף הבקשה כ - JSON: + - לאמת שהוא כולל את מאפיין החובה `name` שאמור להיות מטיפוס `str`. + - לאמת שהוא כולל את מאפיין החובה `price` שחייב להיות מטיפוס `float`. + - לבדוק האם הוא כולל את מאפיין הרשות `is_offer` שאמור להיות מטיפוס `bool`, אם הוא נמצא. + - כל זה יעבוד גם לאובייקט JSON מקונן. +- להמיר מ - JSON ול- JSON אוטומטית. +- לתעד הכל באמצעות OpenAPI, תיעוד שבו יוכלו להשתמש: + - מערכות תיעוד אינטרקטיביות. + - מערכות ייצור קוד אוטומטיות, להרבה שפות. +- לספק ישירות שתי מערכות תיעוד רשתיות. + +--- + +רק גרדנו את קצה הקרחון, אבל כבר יש לכם רעיון של איך הכל עובד. + +נסו לשנות את השורה: + +```Python + return {"item_name": item.name, "item_id": item_id} +``` + +...מ: + +```Python + ... "item_name": item.name ... +``` + +...ל: + +```Python + ... "item_price": item.price ... +``` + +...וראו איך העורך שלכם משלים את המאפיינים ויודע את הטיפוסים שלהם: + +![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png) + +לדוגמא יותר שלמה שכוללת עוד תכונות, ראו את המדריך - למשתמש. + +**התראת ספוילרים**: המדריך - למשתמש כולל: + +- הכרזה על **פרמטרים** ממקורות אחרים ושונים כגון: **כותרות**, **עוגיות**, **טפסים** ו - **קבצים**. +- איך לקבוע **מגבלות אימות** בעזרת `maximum_length` או `regex`. +- דרך חזקה וקלה להשתמש ב**הזרקת תלויות**. +- אבטחה והתאמתות, כולל תמיכה ב - **OAuth2** עם **JWT** והתאמתות **HTTP Basic**. +- טכניקות מתקדמות (אבל קלות באותה מידה) להכרזת אובייקטי JSON מקוננים (תודות ל - Pydantic). +- אינטרקציה עם **GraphQL** דרך Strawberry וספריות אחרות. +- תכונות נוספות רבות (תודות ל - Starlette) כגון: + - **WebSockets** + - בדיקות קלות במיוחד מבוססות על `requests` ו - `pytest` + - **CORS** + - **Cookie Sessions** + - ...ועוד. + +## ביצועים + +בדיקות עצמאיות של TechEmpower הראו שאפליקציות **FastAPI** שרצות תחת Uvicorn הן מתשתיות הפייתון המהירות ביותר, רק מתחת ל - Starlette ו - Uvicorn עצמן (ש - FastAPI מבוססת עליהן). (\*) + +כדי להבין עוד על הנושא, ראו את הפרק Benchmarks. + +## תלויות אופציונליות + +בשימוש Pydantic: + +- ujson - "פרסור" JSON. +- email_validator - לאימות כתובות אימייל. + +בשימוש Starlette: + +- requests - דרוש אם ברצונכם להשתמש ב - `TestClient`. +- jinja2 - דרוש אם ברצונכם להשתמש בברירת המחדל של תצורת הטמפלייטים. +- python-multipart - דרוש אם ברצונכם לתמוך ב "פרסור" טפסים, באצמעות request.form(). +- itsdangerous - דרוש אם ברצונכם להשתמש ב - `SessionMiddleware`. +- pyyaml - דרוש אם ברצונכם להשתמש ב - `SchemaGenerator` של Starlette (כנראה שאתם לא צריכים את זה עם FastAPI). +- ujson - דרוש אם ברצונכם להשתמש ב - `UJSONResponse`. + +בשימוש FastAPI / Starlette: + +- uvicorn - לשרת שטוען ומגיש את האפליקציה שלכם. +- orjson - דרוש אם ברצונכם להשתמש ב - `ORJSONResponse`. + +תוכלו להתקין את כל אלו באמצעות pip install "fastapi[all]". + +## רשיון + +הפרויקט הזה הוא תחת התנאים של רשיון MIT. diff --git a/docs/he/mkdocs.yml b/docs/he/mkdocs.yml new file mode 100644 index 000000000..34a3b0e6a --- /dev/null +++ b/docs/he/mkdocs.yml @@ -0,0 +1,140 @@ +site_name: FastAPI +site_description: FastAPI framework, high performance, easy to learn, fast to code, ready for production +site_url: https://fastapi.tiangolo.com/he/ +theme: + name: material + custom_dir: overrides + palette: + - media: '(prefers-color-scheme: light)' + scheme: default + primary: teal + accent: amber + toggle: + icon: material/lightbulb + name: Switch to light mode + - media: '(prefers-color-scheme: dark)' + scheme: slate + primary: teal + accent: amber + toggle: + icon: material/lightbulb-outline + name: Switch to dark mode + features: + - search.suggest + - search.highlight + - content.tabs.link + icon: + repo: fontawesome/brands/github-alt + logo: https://fastapi.tiangolo.com/img/icon-white.svg + favicon: https://fastapi.tiangolo.com/img/favicon.png + language: he +repo_name: tiangolo/fastapi +repo_url: https://github.com/tiangolo/fastapi +edit_uri: '' +plugins: +- search +- markdownextradata: + data: data +nav: +- FastAPI: index.md +- Languages: + - en: / + - az: /az/ + - de: /de/ + - es: /es/ + - fa: /fa/ + - fr: /fr/ + - he: /he/ + - id: /id/ + - it: /it/ + - ja: /ja/ + - ko: /ko/ + - nl: /nl/ + - pl: /pl/ + - pt: /pt/ + - ru: /ru/ + - sq: /sq/ + - tr: /tr/ + - uk: /uk/ + - zh: /zh/ +markdown_extensions: +- toc: + permalink: true +- markdown.extensions.codehilite: + guess_lang: false +- mdx_include: + base_path: docs +- admonition +- codehilite +- extra +- pymdownx.superfences: + custom_fences: + - name: mermaid + class: mermaid + format: !!python/name:pymdownx.superfences.fence_code_format '' +- pymdownx.tabbed: + alternate_style: true +extra: + analytics: + provider: google + property: UA-133183413-1 + social: + - icon: fontawesome/brands/github-alt + link: https://github.com/tiangolo/fastapi + - icon: fontawesome/brands/discord + link: https://discord.gg/VQjSZaeJmf + - icon: fontawesome/brands/twitter + link: https://twitter.com/fastapi + - icon: fontawesome/brands/linkedin + link: https://www.linkedin.com/in/tiangolo + - icon: fontawesome/brands/dev + link: https://dev.to/tiangolo + - icon: fontawesome/brands/medium + link: https://medium.com/@tiangolo + - icon: fontawesome/solid/globe + link: https://tiangolo.com + alternate: + - link: / + name: en - English + - link: /az/ + name: az + - link: /de/ + name: de + - link: /es/ + name: es - español + - link: /fa/ + name: fa + - link: /fr/ + name: fr - français + - link: /he/ + name: he + - link: /id/ + name: id + - link: /it/ + name: it - italiano + - link: /ja/ + name: ja - 日本語 + - link: /ko/ + name: ko - 한국어 + - link: /nl/ + name: nl + - link: /pl/ + name: pl + - link: /pt/ + name: pt - português + - link: /ru/ + name: ru - русский язык + - link: /sq/ + name: sq - shqip + - link: /tr/ + name: tr - Türkçe + - link: /uk/ + name: uk - українська мова + - link: /zh/ + name: zh - 汉语 +extra_css: +- https://fastapi.tiangolo.com/css/termynal.css +- https://fastapi.tiangolo.com/css/custom.css +extra_javascript: +- https://fastapi.tiangolo.com/js/termynal.js +- https://fastapi.tiangolo.com/js/custom.js diff --git a/docs/he/overrides/.gitignore b/docs/he/overrides/.gitignore new file mode 100644 index 000000000..e69de29bb diff --git a/docs/id/mkdocs.yml b/docs/id/mkdocs.yml index 6c9f88c90..697ecd4cb 100644 --- a/docs/id/mkdocs.yml +++ b/docs/id/mkdocs.yml @@ -44,6 +44,7 @@ nav: - es: /es/ - fa: /fa/ - fr: /fr/ + - he: /he/ - id: /id/ - it: /it/ - ja: /ja/ @@ -106,6 +107,8 @@ extra: name: fa - link: /fr/ name: fr - français + - link: /he/ + name: he - link: /id/ name: id - link: /it/ diff --git a/docs/it/mkdocs.yml b/docs/it/mkdocs.yml index 5f0b7c73b..1f1d0016d 100644 --- a/docs/it/mkdocs.yml +++ b/docs/it/mkdocs.yml @@ -44,6 +44,7 @@ nav: - es: /es/ - fa: /fa/ - fr: /fr/ + - he: /he/ - id: /id/ - it: /it/ - ja: /ja/ @@ -106,6 +107,8 @@ extra: name: fa - link: /fr/ name: fr - français + - link: /he/ + name: he - link: /id/ name: id - link: /it/ diff --git a/docs/ja/mkdocs.yml b/docs/ja/mkdocs.yml index 66694ef36..d96074ef1 100644 --- a/docs/ja/mkdocs.yml +++ b/docs/ja/mkdocs.yml @@ -44,6 +44,7 @@ nav: - es: /es/ - fa: /fa/ - fr: /fr/ + - he: /he/ - id: /id/ - it: /it/ - ja: /ja/ @@ -148,6 +149,8 @@ extra: name: fa - link: /fr/ name: fr - français + - link: /he/ + name: he - link: /id/ name: id - link: /it/ diff --git a/docs/ko/mkdocs.yml b/docs/ko/mkdocs.yml index ddadebe7b..4a576baf2 100644 --- a/docs/ko/mkdocs.yml +++ b/docs/ko/mkdocs.yml @@ -44,6 +44,7 @@ nav: - es: /es/ - fa: /fa/ - fr: /fr/ + - he: /he/ - id: /id/ - it: /it/ - ja: /ja/ @@ -116,6 +117,8 @@ extra: name: fa - link: /fr/ name: fr - français + - link: /he/ + name: he - link: /id/ name: id - link: /it/ diff --git a/docs/nl/mkdocs.yml b/docs/nl/mkdocs.yml index 620a4b25f..8831571dd 100644 --- a/docs/nl/mkdocs.yml +++ b/docs/nl/mkdocs.yml @@ -44,6 +44,7 @@ nav: - es: /es/ - fa: /fa/ - fr: /fr/ + - he: /he/ - id: /id/ - it: /it/ - ja: /ja/ @@ -106,6 +107,8 @@ extra: name: fa - link: /fr/ name: fr - français + - link: /he/ + name: he - link: /id/ name: id - link: /it/ diff --git a/docs/pl/mkdocs.yml b/docs/pl/mkdocs.yml index c04f3c1c6..982b1a060 100644 --- a/docs/pl/mkdocs.yml +++ b/docs/pl/mkdocs.yml @@ -44,6 +44,7 @@ nav: - es: /es/ - fa: /fa/ - fr: /fr/ + - he: /he/ - id: /id/ - it: /it/ - ja: /ja/ @@ -109,6 +110,8 @@ extra: name: fa - link: /fr/ name: fr - français + - link: /he/ + name: he - link: /id/ name: id - link: /it/ diff --git a/docs/pt/mkdocs.yml b/docs/pt/mkdocs.yml index 51d448c95..fb95bfe29 100644 --- a/docs/pt/mkdocs.yml +++ b/docs/pt/mkdocs.yml @@ -44,6 +44,7 @@ nav: - es: /es/ - fa: /fa/ - fr: /fr/ + - he: /he/ - id: /id/ - it: /it/ - ja: /ja/ @@ -131,6 +132,8 @@ extra: name: fa - link: /fr/ name: fr - français + - link: /he/ + name: he - link: /id/ name: id - link: /it/ diff --git a/docs/ru/mkdocs.yml b/docs/ru/mkdocs.yml index 816a0d3a0..2eb8eb935 100644 --- a/docs/ru/mkdocs.yml +++ b/docs/ru/mkdocs.yml @@ -44,6 +44,7 @@ nav: - es: /es/ - fa: /fa/ - fr: /fr/ + - he: /he/ - id: /id/ - it: /it/ - ja: /ja/ @@ -107,6 +108,8 @@ extra: name: fa - link: /fr/ name: fr - français + - link: /he/ + name: he - link: /id/ name: id - link: /it/ diff --git a/docs/sq/mkdocs.yml b/docs/sq/mkdocs.yml index 4df6d5b1f..1d8d9d04e 100644 --- a/docs/sq/mkdocs.yml +++ b/docs/sq/mkdocs.yml @@ -44,6 +44,7 @@ nav: - es: /es/ - fa: /fa/ - fr: /fr/ + - he: /he/ - id: /id/ - it: /it/ - ja: /ja/ @@ -106,6 +107,8 @@ extra: name: fa - link: /fr/ name: fr - français + - link: /he/ + name: he - link: /id/ name: id - link: /it/ diff --git a/docs/tr/mkdocs.yml b/docs/tr/mkdocs.yml index 5371cb71f..bf66edd68 100644 --- a/docs/tr/mkdocs.yml +++ b/docs/tr/mkdocs.yml @@ -44,6 +44,7 @@ nav: - es: /es/ - fa: /fa/ - fr: /fr/ + - he: /he/ - id: /id/ - it: /it/ - ja: /ja/ @@ -109,6 +110,8 @@ extra: name: fa - link: /fr/ name: fr - français + - link: /he/ + name: he - link: /id/ name: id - link: /it/ diff --git a/docs/uk/mkdocs.yml b/docs/uk/mkdocs.yml index fd371765a..3b8475907 100644 --- a/docs/uk/mkdocs.yml +++ b/docs/uk/mkdocs.yml @@ -44,6 +44,7 @@ nav: - es: /es/ - fa: /fa/ - fr: /fr/ + - he: /he/ - id: /id/ - it: /it/ - ja: /ja/ @@ -106,6 +107,8 @@ extra: name: fa - link: /fr/ name: fr - français + - link: /he/ + name: he - link: /id/ name: id - link: /it/ diff --git a/docs/zh/mkdocs.yml b/docs/zh/mkdocs.yml index c1c35c6ed..f9bfd6875 100644 --- a/docs/zh/mkdocs.yml +++ b/docs/zh/mkdocs.yml @@ -44,6 +44,7 @@ nav: - es: /es/ - fa: /fa/ - fr: /fr/ + - he: /he/ - id: /id/ - it: /it/ - ja: /ja/ @@ -157,6 +158,8 @@ extra: name: fa - link: /fr/ name: fr - français + - link: /he/ + name: he - link: /id/ name: id - link: /it/ From e35df688d55c93f92e31019a5652247082ae51b3 Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 14 Jul 2022 17:17:09 +0000 Subject: [PATCH 46/52] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index 714696529..542637032 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,7 @@ ## Latest Changes +* 🌐 Start of Hebrew translation. PR [#5050](https://github.com/tiangolo/fastapi/pull/5050) by [@itay-raveh](https://github.com/itay-raveh). * 🔧 Update translations notification for Hebrew. PR [#5158](https://github.com/tiangolo/fastapi/pull/5158) by [@tiangolo](https://github.com/tiangolo). * 🔧 Update Dependabot commit message. PR [#5156](https://github.com/tiangolo/fastapi/pull/5156) by [@tiangolo](https://github.com/tiangolo). * ⬆ Bump actions/upload-artifact from 2 to 3. PR [#5148](https://github.com/tiangolo/fastapi/pull/5148) by [@dependabot[bot]](https://github.com/apps/dependabot). From 2f21bef91b72dbd723fceb12a23ca5cf58540684 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Thu, 14 Jul 2022 19:34:25 +0200 Subject: [PATCH 47/52] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index 542637032..5dece6163 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,7 +2,23 @@ ## Latest Changes +### Fixes - Breaking Changes + +* 🐛 Fix removing body from status codes that do not support it. PR [#5145](https://github.com/tiangolo/fastapi/pull/5145) by [@tiangolo](https://github.com/tiangolo). + * Setting `status_code` to `204`, `304`, or any code below `200` (1xx) will remove the body from the response. + * This fixes an error in Uvicorn that otherwise would be thrown: `RuntimeError: Response content longer than Content-Length`. + * This removes `fastapi.openapi.constants.STATUS_CODES_WITH_NO_BODY`, it is replaced by a function in utils. + +### Translations + * 🌐 Start of Hebrew translation. PR [#5050](https://github.com/tiangolo/fastapi/pull/5050) by [@itay-raveh](https://github.com/itay-raveh). +* 🔧 Add config for Swedish translations notification. PR [#5147](https://github.com/tiangolo/fastapi/pull/5147) by [@tiangolo](https://github.com/tiangolo). +* 🌐 Start of Swedish translation. PR [#5062](https://github.com/tiangolo/fastapi/pull/5062) by [@MrRawbin](https://github.com/MrRawbin). +* 🌐 Add Japanese translation for `docs/ja/docs/advanced/index.md`. PR [#5043](https://github.com/tiangolo/fastapi/pull/5043) by [@wakabame](https://github.com/wakabame). +* 🌐🇵🇱 Add Polish translation for `docs/pl/docs/tutorial/first-steps.md`. PR [#5024](https://github.com/tiangolo/fastapi/pull/5024) by [@Valaraucoo](https://github.com/Valaraucoo). + +### Internal + * 🔧 Update translations notification for Hebrew. PR [#5158](https://github.com/tiangolo/fastapi/pull/5158) by [@tiangolo](https://github.com/tiangolo). * 🔧 Update Dependabot commit message. PR [#5156](https://github.com/tiangolo/fastapi/pull/5156) by [@tiangolo](https://github.com/tiangolo). * ⬆ Bump actions/upload-artifact from 2 to 3. PR [#5148](https://github.com/tiangolo/fastapi/pull/5148) by [@dependabot[bot]](https://github.com/apps/dependabot). @@ -10,17 +26,12 @@ * 🔧 Update sponsors badge configs. PR [#5155](https://github.com/tiangolo/fastapi/pull/5155) by [@tiangolo](https://github.com/tiangolo). * 👥 Update FastAPI People. PR [#5154](https://github.com/tiangolo/fastapi/pull/5154) by [@tiangolo](https://github.com/tiangolo). * 🔧 Update Jina sponsor badges. PR [#5151](https://github.com/tiangolo/fastapi/pull/5151) by [@tiangolo](https://github.com/tiangolo). -* 🔧 Add config for Swedish translations notification. PR [#5147](https://github.com/tiangolo/fastapi/pull/5147) by [@tiangolo](https://github.com/tiangolo). -* 🌐 Start of Swedish translation. PR [#5062](https://github.com/tiangolo/fastapi/pull/5062) by [@MrRawbin](https://github.com/MrRawbin). -* 🌐 Add Japanese translation for `docs/ja/docs/advanced/index.md`. PR [#5043](https://github.com/tiangolo/fastapi/pull/5043) by [@wakabame](https://github.com/wakabame). -* 🌐🇵🇱 Add Polish translation for `docs/pl/docs/tutorial/first-steps.md`. PR [#5024](https://github.com/tiangolo/fastapi/pull/5024) by [@Valaraucoo](https://github.com/Valaraucoo). * ⬆ Bump actions/checkout from 2 to 3. PR [#5133](https://github.com/tiangolo/fastapi/pull/5133) by [@dependabot[bot]](https://github.com/apps/dependabot). * ⬆ [pre-commit.ci] pre-commit autoupdate. PR [#5030](https://github.com/tiangolo/fastapi/pull/5030) by [@pre-commit-ci[bot]](https://github.com/apps/pre-commit-ci). * ⬆ Bump nwtgck/actions-netlify from 1.1.5 to 1.2.3. PR [#5132](https://github.com/tiangolo/fastapi/pull/5132) by [@dependabot[bot]](https://github.com/apps/dependabot). * ⬆ Bump codecov/codecov-action from 2 to 3. PR [#5131](https://github.com/tiangolo/fastapi/pull/5131) by [@dependabot[bot]](https://github.com/apps/dependabot). * ⬆ Bump dawidd6/action-download-artifact from 2.9.0 to 2.21.1. PR [#5130](https://github.com/tiangolo/fastapi/pull/5130) by [@dependabot[bot]](https://github.com/apps/dependabot). * ⬆ Bump actions/setup-python from 2 to 4. PR [#5129](https://github.com/tiangolo/fastapi/pull/5129) by [@dependabot[bot]](https://github.com/apps/dependabot). -* 🐛 Fix removing body from status codes that do not support it. PR [#5145](https://github.com/tiangolo/fastapi/pull/5145) by [@tiangolo](https://github.com/tiangolo). * 👷 Add Dependabot. PR [#5128](https://github.com/tiangolo/fastapi/pull/5128) by [@tiangolo](https://github.com/tiangolo). * ♻️ Move from `Optional[X]` to `Union[X, None]` for internal utils. PR [#5124](https://github.com/tiangolo/fastapi/pull/5124) by [@tiangolo](https://github.com/tiangolo). * 🔧 Update sponsors, remove Dropbase, add Doist. PR [#5096](https://github.com/tiangolo/fastapi/pull/5096) by [@tiangolo](https://github.com/tiangolo). From 50fb34bf55c1711e3753363ab6427d77be25dbb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Thu, 14 Jul 2022 19:35:13 +0200 Subject: [PATCH 48/52] =?UTF-8?q?=F0=9F=94=96=20Release=20version=200.79.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 3 +++ fastapi/__init__.py | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index 5dece6163..55df22c06 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,9 @@ ## Latest Changes + +## 0.79.0 + ### Fixes - Breaking Changes * 🐛 Fix removing body from status codes that do not support it. PR [#5145](https://github.com/tiangolo/fastapi/pull/5145) by [@tiangolo](https://github.com/tiangolo). diff --git a/fastapi/__init__.py b/fastapi/__init__.py index 2465e2c27..e5cdbeb09 100644 --- a/fastapi/__init__.py +++ b/fastapi/__init__.py @@ -1,6 +1,6 @@ """FastAPI framework, high performance, easy to learn, fast to code, ready for production""" -__version__ = "0.78.0" +__version__ = "0.79.0" from starlette import status as status From 3b5839260f916ac416585ef0452f101105884834 Mon Sep 17 00:00:00 2001 From: Mohsen Mahmoodi Date: Wed, 20 Jul 2022 16:55:23 +0430 Subject: [PATCH 49/52] =?UTF-8?q?=F0=9F=8C=90=20Add=20Persian=20translatio?= =?UTF-8?q?n=20for=20`docs/fa/docs/index.md`=20and=20tweak=20right-to-left?= =?UTF-8?q?=20CSS=20(#2395)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Sebastián Ramírez --- .../notify-translations/app/translations.yml | 2 +- docs/en/docs/css/custom.css | 21 ++ docs/fa/docs/index.md | 338 +++++++++--------- docs/he/mkdocs.yml | 3 + docs/sv/mkdocs.yml | 3 + 5 files changed, 194 insertions(+), 173 deletions(-) diff --git a/.github/actions/notify-translations/app/translations.yml b/.github/actions/notify-translations/app/translations.yml index ac15978a9..d283ef9f7 100644 --- a/.github/actions/notify-translations/app/translations.yml +++ b/.github/actions/notify-translations/app/translations.yml @@ -8,7 +8,7 @@ uk: 1748 tr: 1892 fr: 1972 ko: 2017 -sq: 2041 +fa: 2041 pl: 3169 de: 3716 id: 3717 diff --git a/docs/en/docs/css/custom.css b/docs/en/docs/css/custom.css index 42b752bcf..226ca2b11 100644 --- a/docs/en/docs/css/custom.css +++ b/docs/en/docs/css/custom.css @@ -4,10 +4,21 @@ display: block; } +.termy { + /* For right to left languages */ + direction: ltr; +} + .termy [data-termynal] { white-space: pre-wrap; } +a.external-link { + /* For right to left languages */ + direction: ltr; + display: inline-block; +} + a.external-link::after { /* \00A0 is a non-breaking space to make the mark be on the same line as the link @@ -118,3 +129,13 @@ a.announce-link:hover { .twitter { color: #00acee; } + +/* Right to left languages */ +code { + direction: ltr; + display: inline-block; +} + +.md-content__inner h1 { + direction: ltr !important; +} diff --git a/docs/fa/docs/index.md b/docs/fa/docs/index.md index fd52f994c..0f7cd569a 100644 --- a/docs/fa/docs/index.md +++ b/docs/fa/docs/index.md @@ -1,16 +1,12 @@ - -{!../../../docs/missing-translation.md!} - -

FastAPI

- FastAPI framework, high performance, easy to learn, fast to code, ready for production + فریم‌ورک FastAPI، کارایی بالا، یادگیری آسان، کدنویسی سریع، آماده برای استفاده در محیط پروداکشن

- - Test + + Test Coverage @@ -25,103 +21,99 @@ --- -**Documentation**: https://fastapi.tiangolo.com +**مستندات**: https://fastapi.tiangolo.com -**Source Code**: https://github.com/tiangolo/fastapi +**کد منبع**: https://github.com/tiangolo/fastapi --- +FastAPI یک وب فریم‌ورک مدرن و سریع (با کارایی بالا) برای ایجاد APIهای متنوع (وب، وب‌سوکت و غبره) با زبان پایتون نسخه +۳.۶ است. این فریم‌ورک با رعایت کامل راهنمای نوع داده (Type Hint) ایجاد شده است. -FastAPI is a modern, fast (high-performance), web framework for building APIs with Python 3.6+ based on standard Python type hints. +ویژگی‌های کلیدی این فریم‌ورک عبارتند از: -The key features are: +* **سرعت**: کارایی بسیار بالا و قابل مقایسه با **NodeJS** و **Go** (با تشکر از Starlette و Pydantic). [یکی از سریع‌ترین فریم‌ورک‌های پایتونی موجود](#performance). -* **Fast**: Very high performance, on par with **NodeJS** and **Go** (thanks to Starlette and Pydantic). [One of the fastest Python frameworks available](#performance). +* **کدنویسی سریع**: افزایش ۲۰۰ تا ۳۰۰ درصدی سرعت توسعه فابلیت‌های جدید. * +* **باگ کمتر**: کاهش ۴۰ درصدی خطاهای انسانی (برنامه‌نویسی). * +* **غریزی**: پشتیبانی فوق‌العاده در محیط‌های توسعه یکپارچه (IDE). تکمیل در همه بخش‌های کد. کاهش زمان رفع باگ. +* **آسان**: طراحی شده برای یادگیری و استفاده آسان. کاهش زمان مورد نیاز برای مراجعه به مستندات. +* **کوچک**: کاهش تکرار در کد. چندین قابلیت برای هر پارامتر (منظور پارامترهای ورودی تابع هندلر می‌باشد، به بخش خلاصه در همین صفحه مراجعه شود). باگ کمتر. +* **استوار**: ایجاد کدی آماده برای استفاده در محیط پروداکشن و تولید خودکار مستندات تعاملی +* **مبتنی بر استانداردها**: مبتنی بر (و منطبق با) استانداردهای متن باز مربوط به API: OpenAPI (سوگر سابق) و JSON Schema. -* **Fast to code**: Increase the speed to develop features by about 200% to 300%. * -* **Fewer bugs**: Reduce about 40% of human (developer) induced errors. * -* **Intuitive**: Great editor support. Completion everywhere. Less time debugging. -* **Easy**: Designed to be easy to use and learn. Less time reading docs. -* **Short**: Minimize code duplication. Multiple features from each parameter declaration. Fewer bugs. -* **Robust**: Get production-ready code. With automatic interactive documentation. -* **Standards-based**: Based on (and fully compatible with) the open standards for APIs: OpenAPI (previously known as Swagger) and JSON Schema. +* تخمین‌ها بر اساس تست‌های انجام شده در یک تیم توسعه داخلی که مشغول ایجاد برنامه‌های کاربردی واقعی بودند صورت گرفته است. -* estimation based on tests on an internal development team, building production applications. - -## Sponsors +## اسپانسرهای طلایی {% if sponsors %} {% for sponsor in sponsors.gold -%} - -{% endfor -%} -{%- for sponsor in sponsors.silver -%} - + {% endfor %} {% endif %} -Other sponsors +دیگر اسپانسرها -## Opinions +## نظر دیگران در مورد FastAPI -"_[...] I'm using **FastAPI** a ton these days. [...] I'm actually planning to use it for all of my team's **ML services at Microsoft**. Some of them are getting integrated into the core **Windows** product and some **Office** products._" +

[...] I'm using FastAPI a ton these days. [...] I'm actually planning to use it for all of my team's ML services at Microsoft. Some of them are getting integrated into the core Windows product and some Office products."
Kabir Khan - Microsoft (ref)
--- -"_We adopted the **FastAPI** library to spawn a **REST** server that can be queried to obtain **predictions**. [for Ludwig]_" +
"We adopted the FastAPI library to spawn a RESTserver that can be queried to obtain predictions. [for Ludwig]"
Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - Uber (ref)
--- -"_**Netflix** is pleased to announce the open-source release of our **crisis management** orchestration framework: **Dispatch**! [built with **FastAPI**]_" +
"Netflix is pleased to announce the open-source release of our crisis management orchestration framework: Dispatch! [built with FastAPI]"
Kevin Glisson, Marc Vilanova, Forest Monsen - Netflix (ref)
--- -"_I’m over the moon excited about **FastAPI**. It’s so fun!_" +
"I’m over the moon excited about FastAPI. It’s so fun!"
Brian Okken - Python Bytes podcast host (ref)
--- -"_Honestly, what you've built looks super solid and polished. In many ways, it's what I wanted **Hug** to be - it's really inspiring to see someone build that._" +
"Honestly, what you've built looks super solid and polished. In many ways, it's what I wanted Hug to be - it's really inspiring to see someone build that."
Timothy Crosley - Hug creator (ref)
--- -"_If you're looking to learn one **modern framework** for building REST APIs, check out **FastAPI** [...] It's fast, easy to use and easy to learn [...]_" +
"If you're looking to learn one modern framework for building REST APIs, check out FastAPI [...] It's fast, easy to use and easy to learn [...]"
-"_We've switched over to **FastAPI** for our **APIs** [...] I think you'll like it [...]_" +
"We've switched over to FastAPI for our APIs [...] I think you'll like it [...]"
Ines Montani - Matthew Honnibal - Explosion AI founders - spaCy creators (ref) - (ref)
--- -## **Typer**, the FastAPI of CLIs +## **Typer**, فریم‌ورکی معادل FastAPI برای کار با واسط خط فرمان -If you are building a CLI app to be used in the terminal instead of a web API, check out **Typer**. +اگر در حال ساختن برنامه‌ای برای استفاده در CLI (به جای استفاده در وب) هستید، می‌توانید از **Typer**. استفاده کنید. -**Typer** is FastAPI's little sibling. And it's intended to be the **FastAPI of CLIs**. ⌨️ 🚀 +**Typer** دوقلوی کوچکتر FastAPI است و قرار است معادلی برای FastAPI در برنامه‌های CLI باشد.️ 🚀 -## Requirements +## نیازمندی‌ها -Python 3.6+ +پایتون +۳.۶ -FastAPI stands on the shoulders of giants: +FastAPI مبتنی بر ابزارهای قدرتمند زیر است: -* Starlette for the web parts. -* Pydantic for the data parts. +* فریم‌ورک Starlette برای بخش وب. +* کتابخانه Pydantic برای بخش داده‌. -## Installation +## نصب
@@ -133,7 +125,7 @@ $ pip install fastapi
-You will also need an ASGI server, for production such as Uvicorn or Hypercorn. +نصب یک سرور پروداکشن نظیر Uvicorn یا Hypercorn نیز جزء نیازمندی‌هاست.
@@ -145,14 +137,13 @@ $ pip install "uvicorn[standard]"
-## Example +## مثال -### Create it - -* Create a file `main.py` with: +### ایجاد کنید +* فایلی به نام `main.py` با محتوای زیر ایجاد کنید : ```Python -from typing import Union +from typing import Optional from fastapi import FastAPI @@ -170,12 +161,12 @@ def read_item(item_id: int, q: Union[str, None] = None): ```
-Or use async def... +همچنین می‌توانید از async def... نیز استفاده کنید -If your code uses `async` / `await`, use `async def`: +اگر در کدتان از `async` / `await` استفاده می‌کنید, از `async def` برای تعریف تابع خود استفاده کنید: ```Python hl_lines="9 14" -from typing import Union +from typing import Optional from fastapi import FastAPI @@ -188,19 +179,20 @@ async def read_root(): @app.get("/items/{item_id}") -async def read_item(item_id: int, q: Union[str, None] = None): +async def read_item(item_id: int, q: Optional[str] = None): return {"item_id": item_id, "q": q} ``` -**Note**: +**توجه**: + +اگر با `async / await` آشنا نیستید، به بخش _"عجله‌ دارید?"_ در صفحه درباره `async` و `await` در مستندات مراجعه کنید. -If you don't know, check the _"In a hurry?"_ section about `async` and `await` in the docs.
-### Run it +### اجرا کنید -Run the server with: +با استفاده از دستور زیر سرور را اجرا کنید:
@@ -217,57 +209,57 @@ INFO: Application startup complete.
-About the command uvicorn main:app --reload... +درباره دستور uvicorn main:app --reload... -The command `uvicorn main:app` refers to: +دستور `uvicorn main:app` شامل موارد زیر است: -* `main`: the file `main.py` (the Python "module"). -* `app`: the object created inside of `main.py` with the line `app = FastAPI()`. -* `--reload`: make the server restart after code changes. Only do this for development. +* `main`: فایل `main.py` (ماژول پایتون ایجاد شده). +* `app`: شیء ایجاد شده در فایل `main.py` در خط `app = FastAPI()`. +* `--reload`: ریستارت کردن سرور با تغییر کد. تنها در هنگام توسعه از این گزینه استفاده شود..
-### Check it +### بررسی کنید -Open your browser at http://127.0.0.1:8000/items/5?q=somequery. +آدرس http://127.0.0.1:8000/items/5?q=somequery را در مرورگر خود باز کنید. -You will see the JSON response as: +پاسخ JSON زیر را مشاهده خواهید کرد: ```JSON {"item_id": 5, "q": "somequery"} ``` -You already created an API that: +تا اینجا شما APIای ساختید که: -* Receives HTTP requests in the _paths_ `/` and `/items/{item_id}`. -* Both _paths_ take `GET` operations (also known as HTTP _methods_). -* The _path_ `/items/{item_id}` has a _path parameter_ `item_id` that should be an `int`. -* The _path_ `/items/{item_id}` has an optional `str` _query parameter_ `q`. +* درخواست‌های HTTP به _مسیرهای_ `/` و `/items/{item_id}` را دریافت می‌کند. +* هردو _مسیر_ عملیات (یا HTTP _متد_) `GET` را پشتیبانی می‌کنند. +* _مسیر_ `/items/{item_id}` شامل _پارامتر مسیر_ `item_id` از نوع `int` است. +* _مسیر_ `/items/{item_id}` شامل _پارامتر پرسمان_ اختیاری `q` از نوع `str` است. -### Interactive API docs +### مستندات API تعاملی -Now go to http://127.0.0.1:8000/docs. +حال به آدرس http://127.0.0.1:8000/docs بروید. -You will see the automatic interactive API documentation (provided by Swagger UI): +مستندات API تعاملی (ایجاد شده به کمک Swagger UI) را مشاهده خواهید کرد: ![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png) -### Alternative API docs +### مستندات API جایگزین -And now, go to http://127.0.0.1:8000/redoc. +حال به آدرس http://127.0.0.1:8000/redoc بروید. -You will see the alternative automatic documentation (provided by ReDoc): +مستندات خودکار دیگری را مشاهده خواهید کرد که به کمک ReDoc ایجاد می‌شود: ![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) -## Example upgrade +## تغییر مثال -Now modify the file `main.py` to receive a body from a `PUT` request. +حال فایل `main.py` را مطابق زیر ویرایش کنید تا بتوانید بدنه یک درخواست `PUT` را دریافت کنید. -Declare the body using standard Python types, thanks to Pydantic. +به کمک Pydantic بدنه درخواست را با انواع استاندارد پایتون تعریف کنید. ```Python hl_lines="4 9-12 25-27" -from typing import Union +from typing import Optional from fastapi import FastAPI from pydantic import BaseModel @@ -296,173 +288,175 @@ def update_item(item_id: int, item: Item): return {"item_name": item.name, "item_id": item_id} ``` -The server should reload automatically (because you added `--reload` to the `uvicorn` command above). +سرور به صورت خودکار ری‌استارت می‌شود (زیرا پیشتر از گزینه `--reload` در دستور `uvicorn` استفاده کردیم). -### Interactive API docs upgrade +### تغییر مستندات API تعاملی -Now go to http://127.0.0.1:8000/docs. +مجددا به آدرس http://127.0.0.1:8000/docs بروید. -* The interactive API documentation will be automatically updated, including the new body: +* مستندات API تعاملی به صورت خودکار به‌روز شده است و شامل بدنه تعریف شده در مرحله قبل است: ![Swagger UI](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png) -* Click on the button "Try it out", it allows you to fill the parameters and directly interact with the API: +* روی دکمه "Try it out" کلیک کنید, اکنون می‌توانید پارامترهای مورد نیاز هر API را مشخص کرده و به صورت مستقیم با آنها تعامل کنید: ![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-04-swagger-03.png) -* Then click on the "Execute" button, the user interface will communicate with your API, send the parameters, get the results and show them on the screen: +* سپس روی دکمه "Execute" کلیک کنید, خواهید دید که واسط کاریری با APIهای تعریف شده ارتباط برقرار کرده، پارامترهای مورد نیاز را به آن‌ها ارسال می‌کند، سپس نتایج را دریافت کرده و در صفحه نشان می‌دهد: ![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-05-swagger-04.png) -### Alternative API docs upgrade +### تغییر مستندات API جایگزین -And now, go to http://127.0.0.1:8000/redoc. +حال به آدرس http://127.0.0.1:8000/redoc بروید. -* The alternative documentation will also reflect the new query parameter and body: +* خواهید دید که مستندات جایگزین نیز به‌روزرسانی شده و شامل پارامتر پرسمان و بدنه تعریف شده می‌باشد: ![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png) -### Recap +### خلاصه -In summary, you declare **once** the types of parameters, body, etc. as function parameters. +به طور خلاصه شما **یک بار** انواع پارامترها، بدنه و غیره را به عنوان پارامترهای ورودی تابع خود تعریف می‌کنید. -You do that with standard modern Python types. + این کار را با استفاده از انواع استاندارد و مدرن موجود در پایتون انجام می‌دهید. -You don't have to learn a new syntax, the methods or classes of a specific library, etc. +نیازی به یادگیری نحو جدید یا متدها و کلاس‌های یک کتابخانه بخصوص و غیره نیست. -Just standard **Python 3.6+**. +تنها **پایتون +۳.۶**. -For example, for an `int`: +به عنوان مثال برای یک پارامتر از نوع `int`: ```Python item_id: int ``` -or for a more complex `Item` model: +یا برای یک مدل پیچیده‌تر مثل `Item`: ```Python item: Item ``` -...and with that single declaration you get: +...و با همین اعلان تمامی قابلیت‌های زیر در دسترس قرار می‌گیرد: -* Editor support, including: - * Completion. - * Type checks. -* Validation of data: - * Automatic and clear errors when the data is invalid. - * Validation even for deeply nested JSON objects. -* Conversion of input data: coming from the network to Python data and types. Reading from: +* پشتیبانی ویرایشگر متنی شامل: + * تکمیل کد. + * بررسی انواع داده. +* اعتبارسنجی داده: + * خطاهای خودکار و مشخص در هنگام نامعتبر بودن داده + * اعتبارسنجی، حتی برای اشیاء JSON تو در تو. +* تبدیل داده ورودی: که از شبکه رسیده به انواع و داد‌ه‌ پایتونی. این داده‌ شامل: * JSON. - * Path parameters. - * Query parameters. - * Cookies. - * Headers. - * Forms. - * Files. -* Conversion of output data: converting from Python data and types to network data (as JSON): - * Convert Python types (`str`, `int`, `float`, `bool`, `list`, etc). - * `datetime` objects. - * `UUID` objects. - * Database models. - * ...and many more. -* Automatic interactive API documentation, including 2 alternative user interfaces: + * پارامترهای مسیر. + * پارامترهای پرسمان. + * کوکی‌ها. + * سرآیند‌ها (هدرها). + * فرم‌ها. + * فایل‌ها. +* تبدیل داده خروجی: تبدیل از انواع و داده‌ پایتون به داده شبکه (مانند JSON): + * تبدیل انواع داده پایتونی (`str`, `int`, `float`, `bool`, `list` و غیره). + * اشیاء `datetime`. + * اشیاء `UUID`. + * qمدل‌های پایگاه‌داده. + * و موارد بیشمار دیگر. +* دو مدل مستند API تعاملی خودکار : * Swagger UI. * ReDoc. --- -Coming back to the previous code example, **FastAPI** will: +به مثال قبلی باز می‌گردیم، در این مثال **FastAPI** موارد زیر را انجام می‌دهد: -* Validate that there is an `item_id` in the path for `GET` and `PUT` requests. -* Validate that the `item_id` is of type `int` for `GET` and `PUT` requests. - * If it is not, the client will see a useful, clear error. -* Check if there is an optional query parameter named `q` (as in `http://127.0.0.1:8000/items/foo?q=somequery`) for `GET` requests. - * As the `q` parameter is declared with `= None`, it is optional. - * Without the `None` it would be required (as is the body in the case with `PUT`). -* For `PUT` requests to `/items/{item_id}`, Read the body as JSON: - * Check that it has a required attribute `name` that should be a `str`. - * Check that it has a required attribute `price` that has to be a `float`. - * Check that it has an optional attribute `is_offer`, that should be a `bool`, if present. - * All this would also work for deeply nested JSON objects. -* Convert from and to JSON automatically. -* Document everything with OpenAPI, that can be used by: - * Interactive documentation systems. - * Automatic client code generation systems, for many languages. -* Provide 2 interactive documentation web interfaces directly. +* اعتبارسنجی اینکه پارامتر `item_id` در مسیر درخواست‌های `GET` و `PUT` موجود است . +* اعتبارسنجی اینکه پارامتر `item_id` در درخواست‌های `GET` و `PUT` از نوع `int` است. + * اگر غیر از این موارد باشد، سرویس‌گیرنده خطای مفید و مشخصی دریافت خواهد کرد. +* بررسی وجود پارامتر پرسمان اختیاری `q` (مانند `http://127.0.0.1:8000/items/foo?q=somequery`) در درخواست‌های `GET`. + * از آنجا که پارامتر `q` با `= None` مقداردهی شده است, این پارامتر اختیاری است. + * اگر از مقدار اولیه `None` استفاده نکنیم، این پارامتر الزامی خواهد بود (همانند بدنه درخواست در درخواست `PUT`). +* برای درخواست‌های `PUT` به آدرس `/items/{item_id}`, بدنه درخواست باید از نوع JSON تعریف شده باشد: + * بررسی اینکه بدنه شامل فیلدی با نام `name` و از نوع `str` است. + * بررسی اینکه بدنه شامل فیلدی با نام `price` و از نوع `float` است. + * بررسی اینکه بدنه شامل فیلدی اختیاری با نام `is_offer` است, که در صورت وجود باید از نوع `bool` باشد. + * تمامی این موارد برای اشیاء JSON در هر عمقی قابل بررسی می‌باشد. +* تبدیل از/به JSON به صورت خودکار. +* مستندسازی همه چیز با استفاده از OpenAPI, که می‌توان از آن برای موارد زیر استفاده کرد: + * سیستم مستندات تعاملی. + * تولید خودکار کد سرویس‌گیرنده‌ در زبان‌های برنامه‌نویسی بیشمار. +* فراهم سازی ۲ مستند تعاملی مبتنی بر وب به صورت پیش‌فرض . --- -We just scratched the surface, but you already get the idea of how it all works. +موارد ذکر شده تنها پاره‌ای از ویژگی‌های بیشمار FastAPI است اما ایده‌ای کلی از طرز کار آن در اختیار قرار می‌دهد. -Try changing the line with: +خط زیر را به این صورت تغییر دهید: ```Python return {"item_name": item.name, "item_id": item_id} ``` -...from: +از: ```Python ... "item_name": item.name ... ``` -...to: +به: ```Python ... "item_price": item.price ... ``` -...and see how your editor will auto-complete the attributes and know their types: +در حین تایپ کردن توجه کنید که چگونه ویرایش‌گر، ویژگی‌های کلاس `Item` را تشخیص داده و به تکمیل خودکار آنها کمک می‌کند: ![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png) -For a more complete example including more features, see the Tutorial - User Guide. +برای مشاهده مثال‌های کامل‌تر که شامل قابلیت‌های بیشتری از FastAPI باشد به بخش آموزش - راهنمای کاربر مراجعه کنید. -**Spoiler alert**: the tutorial - user guide includes: +**هشدار اسپویل**: بخش آموزش - راهنمای کاربر شامل موارد زیر است: -* Declaration of **parameters** from other different places as: **headers**, **cookies**, **form fields** and **files**. -* How to set **validation constraints** as `maximum_length` or `regex`. -* A very powerful and easy to use **Dependency Injection** system. -* Security and authentication, including support for **OAuth2** with **JWT tokens** and **HTTP Basic** auth. -* More advanced (but equally easy) techniques for declaring **deeply nested JSON models** (thanks to Pydantic). -* **GraphQL** integration with Strawberry and other libraries. -* Many extra features (thanks to Starlette) as: - * **WebSockets** - * extremely easy tests based on `requests` and `pytest` +* اعلان **پارامترهای** موجود در بخش‌های دیگر درخواست، شامل: **سرآیند‌ (هدر)ها**, **کوکی‌ها**, **فیلد‌های فرم** و **فایل‌ها**. +* چگونگی تنظیم **محدودیت‌های اعتبارسنجی** به عنوان مثال `maximum_length` یا `regex`. +* سیستم **Dependency Injection** قوی و کاربردی. +* امنیت و تایید هویت, شامل پشتیبانی از **OAuth2** مبتنی بر **JWT tokens** و **HTTP Basic**. +* تکنیک پیشرفته برای تعریف **مدل‌های چند سطحی JSON** (بر اساس Pydantic). +* قابلیت‌های اضافی دیگر (بر اساس Starlette) شامل: + * **وب‌سوکت** + * **GraphQL** + * تست‌های خودکار آسان مبتنی بر `requests` و `pytest` * **CORS** * **Cookie Sessions** - * ...and more. + * و موارد بیشمار دیگر. -## Performance +## کارایی -Independent TechEmpower benchmarks show **FastAPI** applications running under Uvicorn as one of the fastest Python frameworks available, only below Starlette and Uvicorn themselves (used internally by FastAPI). (*) +معیار (بنچمارک‌)های مستقل TechEmpower حاکی از آن است که برنامه‌های **FastAPI** که تحت Uvicorn اجرا می‌شود، یکی از سریع‌ترین فریم‌ورک‌های مبتنی بر پایتون, است که کمی ضعیف‌تر از Starlette و Uvicorn عمل می‌کند (فریم‌ورک و سروری که FastAPI بر اساس آنها ایجاد شده است) (*) -To understand more about it, see the section Benchmarks. +برای درک بهتری از این موضوع به بخش بنچ‌مارک‌ها مراجعه کنید. -## Optional Dependencies +## نیازمندی‌های اختیاری -Used by Pydantic: +استفاده شده توسط Pydantic: -* ujson - for faster JSON "parsing". -* email_validator - for email validation. +* ujson - برای "تجزیه (parse)" سریع‌تر JSON . +* email_validator - برای اعتبارسنجی آدرس‌های ایمیل. -Used by Starlette: +استفاده شده توسط Starlette: -* requests - Required if you want to use the `TestClient`. -* jinja2 - Required if you want to use the default template configuration. -* python-multipart - Required if you want to support form "parsing", with `request.form()`. -* itsdangerous - Required for `SessionMiddleware` support. -* pyyaml - Required for Starlette's `SchemaGenerator` support (you probably don't need it with FastAPI). -* ujson - Required if you want to use `UJSONResponse`. +* requests - در صورتی که می‌خواهید از `TestClient` استفاده کنید. +* aiofiles - در صورتی که می‌خواهید از `FileResponse` و `StaticFiles` استفاده کنید. +* jinja2 - در صورتی که بخواهید از پیکربندی پیش‌فرض برای قالب‌ها استفاده کنید. +* python-multipart - در صورتی که بخواهید با استفاده از `request.form()` از قابلیت "تجزیه (parse)" فرم استفاده کنید. +* itsdangerous - در صورتی که بخواید از `SessionMiddleware` پشتیبانی کنید. +* pyyaml - برای پشتیبانی `SchemaGenerator` در Starlet (به احتمال زیاد برای کار کردن با FastAPI به آن نیازی پیدا نمی‌کنید.). +* graphene - در صورتی که از `GraphQLApp` پشتیبانی می‌کنید. +* ujson - در صورتی که بخواهید از `UJSONResponse` استفاده کنید. -Used by FastAPI / Starlette: +استفاده شده توسط FastAPI / Starlette: -* uvicorn - for the server that loads and serves your application. -* orjson - Required if you want to use `ORJSONResponse`. +* uvicorn - برای سرور اجرا کننده برنامه وب. +* orjson - در صورتی که بخواهید از `ORJSONResponse` استفاده کنید. -You can install all of these with `pip install "fastapi[all]"`. +می‌توان همه این موارد را با استفاده از دستور `pip install fastapi[all]`. به صورت یکجا نصب کرد. -## License +## لایسنس -This project is licensed under the terms of the MIT license. +این پروژه مشمول قوانین و مقررات لایسنس MIT است. diff --git a/docs/he/mkdocs.yml b/docs/he/mkdocs.yml index 34a3b0e6a..532cc5cab 100644 --- a/docs/he/mkdocs.yml +++ b/docs/he/mkdocs.yml @@ -54,6 +54,7 @@ nav: - pt: /pt/ - ru: /ru/ - sq: /sq/ + - sv: /sv/ - tr: /tr/ - uk: /uk/ - zh: /zh/ @@ -126,6 +127,8 @@ extra: name: ru - русский язык - link: /sq/ name: sq - shqip + - link: /sv/ + name: sv - svenska - link: /tr/ name: tr - Türkçe - link: /uk/ diff --git a/docs/sv/mkdocs.yml b/docs/sv/mkdocs.yml index fa0296d5c..4606c9349 100644 --- a/docs/sv/mkdocs.yml +++ b/docs/sv/mkdocs.yml @@ -44,6 +44,7 @@ nav: - es: /es/ - fa: /fa/ - fr: /fr/ + - he: /he/ - id: /id/ - it: /it/ - ja: /ja/ @@ -106,6 +107,8 @@ extra: name: fa - link: /fr/ name: fr - français + - link: /he/ + name: he - link: /id/ name: id - link: /it/ From c07aced06d5f9216ea9af44f83f65221b626210f Mon Sep 17 00:00:00 2001 From: github-actions Date: Wed, 20 Jul 2022 12:26:04 +0000 Subject: [PATCH 50/52] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index 55df22c06..6d90cd916 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,7 @@ ## Latest Changes +* 🌐 Add Persian translation for `docs/fa/docs/index.md` and tweak right-to-left CSS. PR [#2395](https://github.com/tiangolo/fastapi/pull/2395) by [@mohsen-mahmoodi](https://github.com/mohsen-mahmoodi). ## 0.79.0 From 9031d1daeed911f3f2ff4dbaca0c0a0013694eb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Wed, 20 Jul 2022 15:20:12 +0200 Subject: [PATCH 51/52] =?UTF-8?q?=F0=9F=94=A7=20Update=20sponsors,=20Striv?= =?UTF-8?q?eworks=20badge=20(#5179)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/data/sponsors.yml | 4 ++-- docs/en/docs/img/sponsors/striveworks2.png | Bin 0 -> 34780 bytes 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 docs/en/docs/img/sponsors/striveworks2.png diff --git a/docs/en/data/sponsors.yml b/docs/en/data/sponsors.yml index efd0f00f8..7aa50b111 100644 --- a/docs/en/data/sponsors.yml +++ b/docs/en/data/sponsors.yml @@ -37,6 +37,6 @@ bronze: - url: https://www.exoflare.com/open-source/?utm_source=FastAPI&utm_campaign=open_source title: Biosecurity risk assessments made easy. img: https://fastapi.tiangolo.com/img/sponsors/exoflare.png - - url: https://striveworks.us/careers?utm_source=fastapi&utm_medium=sponsor_banner&utm_campaign=feb_march#openings + - url: https://bit.ly/3ccLCmM title: https://striveworks.us/careers - img: https://fastapi.tiangolo.com/img/sponsors/striveworks.png + img: https://fastapi.tiangolo.com/img/sponsors/striveworks2.png diff --git a/docs/en/docs/img/sponsors/striveworks2.png b/docs/en/docs/img/sponsors/striveworks2.png new file mode 100644 index 0000000000000000000000000000000000000000..bed9cb0a773a49e8021902202b8ab21a3bd672b7 GIT binary patch literal 34780 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

n~I<2aQ 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 Date: Wed, 20 Jul 2022 13:21:07 +0000 Subject: [PATCH 52/52] =?UTF-8?q?=F0=9F=93=9D=20Update=20release=20notes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/en/docs/release-notes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/en/docs/release-notes.md b/docs/en/docs/release-notes.md index 6d90cd916..3bf9c27a0 100644 --- a/docs/en/docs/release-notes.md +++ b/docs/en/docs/release-notes.md @@ -2,6 +2,7 @@ ## Latest Changes +* 🔧 Update sponsors, Striveworks badge. PR [#5179](https://github.com/tiangolo/fastapi/pull/5179) by [@tiangolo](https://github.com/tiangolo). * 🌐 Add Persian translation for `docs/fa/docs/index.md` and tweak right-to-left CSS. PR [#2395](https://github.com/tiangolo/fastapi/pull/2395) by [@mohsen-mahmoodi](https://github.com/mohsen-mahmoodi). ## 0.79.0